github.com/lzy4123/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 }