github.com/true-sqn/fabric@v2.1.1+incompatible/internal/peer/chaincode/signpackage_test.go (about)

     1  /*
     2  Copyright Digital Asset Holdings, LLC. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package chaincode
     8  
     9  import (
    10  	"fmt"
    11  	"io/ioutil"
    12  	"os"
    13  	"testing"
    14  
    15  	"github.com/golang/protobuf/proto"
    16  	pcommon "github.com/hyperledger/fabric-protos-go/common"
    17  	"github.com/hyperledger/fabric/bccsp"
    18  	"github.com/hyperledger/fabric/bccsp/sw"
    19  	"github.com/hyperledger/fabric/internal/peer/common"
    20  	"github.com/stretchr/testify/assert"
    21  )
    22  
    23  //helper to sign an existing package
    24  func signExistingPackage(env *pcommon.Envelope, infile, outfile string, cryptoProvider bccsp.BCCSP) error {
    25  	signer, err := common.GetDefaultSigner()
    26  	if err != nil {
    27  		return fmt.Errorf("Get default signer error: %v", err)
    28  	}
    29  
    30  	mockCF := &ChaincodeCmdFactory{Signer: signer}
    31  
    32  	cmd := signpackageCmd(mockCF, cryptoProvider)
    33  	addFlags(cmd)
    34  
    35  	cmd.SetArgs([]string{infile, outfile})
    36  
    37  	if err := cmd.Execute(); err != nil {
    38  		return err
    39  	}
    40  
    41  	return nil
    42  }
    43  
    44  // TestSignExistingPackage signs an existing package
    45  func TestSignExistingPackage(t *testing.T) {
    46  	resetFlags()
    47  	defer resetFlags()
    48  	pdir := newTempDir()
    49  	defer os.RemoveAll(pdir)
    50  
    51  	cryptoProvider, err := sw.NewDefaultSecurityLevelWithKeystore(sw.NewDummyKeyStore())
    52  	assert.NoError(t, err)
    53  
    54  	ccpackfile := pdir + "/ccpack.file"
    55  	err = createSignedCDSPackage(t, []string{"-n", "somecc", "-p", "some/go/package", "-v", "0", "-s", "-S", ccpackfile}, true)
    56  	if err != nil {
    57  		t.Fatalf("error creating signed :%v", err)
    58  	}
    59  
    60  	b, err := ioutil.ReadFile(ccpackfile)
    61  	if err != nil {
    62  		t.Fatalf("package file %s not created", ccpackfile)
    63  	}
    64  
    65  	e := &pcommon.Envelope{}
    66  	err = proto.Unmarshal(b, e)
    67  	if err != nil {
    68  		t.Fatalf("could not unmarshall envelope")
    69  	}
    70  
    71  	signedfile := pdir + "/signed.file"
    72  	err = signExistingPackage(e, ccpackfile, signedfile, cryptoProvider)
    73  	if err != nil {
    74  		t.Fatalf("could not sign envelope")
    75  	}
    76  
    77  	b, err = ioutil.ReadFile(signedfile)
    78  	if err != nil {
    79  		t.Fatalf("signed package file %s not created", signedfile)
    80  	}
    81  
    82  	e = &pcommon.Envelope{}
    83  	err = proto.Unmarshal(b, e)
    84  	if err != nil {
    85  		t.Fatalf("could not unmarshall signed envelope")
    86  	}
    87  
    88  	_, p, err := extractSignedCCDepSpec(e)
    89  	if err != nil {
    90  		t.Fatalf("could not extract signed dep spec")
    91  	}
    92  
    93  	if p.OwnerEndorsements == nil {
    94  		t.Fatalf("expected endorsements")
    95  	}
    96  
    97  	if len(p.OwnerEndorsements) != 2 {
    98  		t.Fatalf("expected 2 endorserments but found %d", len(p.OwnerEndorsements))
    99  	}
   100  }
   101  
   102  // TestFailSignUnsignedPackage tries to signs a package that was not originally signed
   103  func TestFailSignUnsignedPackage(t *testing.T) {
   104  	resetFlags()
   105  	defer resetFlags()
   106  	pdir := newTempDir()
   107  	defer os.RemoveAll(pdir)
   108  	cryptoProvider, err := sw.NewDefaultSecurityLevelWithKeystore(sw.NewDummyKeyStore())
   109  	assert.NoError(t, err)
   110  
   111  	ccpackfile := pdir + "/ccpack.file"
   112  	// don't sign it ... no "-S"
   113  	err = createSignedCDSPackage(t, []string{"-n", "somecc", "-p", "some/go/package", "-v", "0", "-s", ccpackfile}, true)
   114  	if err != nil {
   115  		t.Fatalf("error creating signed :%v", err)
   116  	}
   117  
   118  	b, err := ioutil.ReadFile(ccpackfile)
   119  	if err != nil {
   120  		t.Fatalf("package file %s not created", ccpackfile)
   121  	}
   122  
   123  	e := &pcommon.Envelope{}
   124  	err = proto.Unmarshal(b, e)
   125  	if err != nil {
   126  		t.Fatalf("could not unmarshall envelope")
   127  	}
   128  
   129  	signedfile := pdir + "/signed.file"
   130  	err = signExistingPackage(e, ccpackfile, signedfile, cryptoProvider)
   131  	if err == nil {
   132  		t.Fatalf("expected signing a package that's not originally signed to fail")
   133  	}
   134  }