github.com/s7techlab/cckit@v0.10.5/extensions/owner/owner_test.go (about) 1 package owner 2 3 import ( 4 "testing" 5 6 "github.com/s7techlab/cckit/identity" 7 "github.com/s7techlab/cckit/identity/testdata" 8 "github.com/s7techlab/cckit/router" 9 testcc "github.com/s7techlab/cckit/testing" 10 expectcc "github.com/s7techlab/cckit/testing/expect" 11 12 . "github.com/onsi/ginkgo" 13 . "github.com/onsi/gomega" 14 ) 15 16 var ( 17 Owner = testdata.Certificates[0].MustIdentity(`SOME_MSP`) 18 Someone = testdata.Certificates[1].MustIdentity(`SOME_MSP`) 19 ) 20 21 func TestOwner(t *testing.T) { 22 RegisterFailHandler(Fail) 23 RunSpecs(t, "Owner suite") 24 } 25 26 func NewOwnableFromCreator() *router.Chaincode { 27 return router.NewChaincode(router. 28 New(`ownableFromCreator`). 29 Init(InvokeSetFromCreator). 30 Invoke(QueryMethod, Query)) 31 } 32 33 // NewOwnableFromArgs - owner credentials can be passed at the time of initialization 34 func NewOwnableFromArgs() *router.Chaincode { 35 return router.NewChaincode(router. 36 New(`ownableFromArgs`). 37 Init(InvokeSetFromArgs). 38 Invoke(QueryMethod, Query)) 39 } 40 41 var _ = Describe(`Ownable`, func() { 42 43 //Create chaincode mock 44 cc1 := testcc.NewMockStub(`ownableFromCreator`, NewOwnableFromCreator()) 45 cc2 := testcc.NewMockStub(`ownableFromArgs`, NewOwnableFromArgs()) 46 Describe("Owner from creator", func() { 47 48 It("Allow to set owner during chaincode init", func() { 49 //invoke chaincode method from authority actor 50 ownerEntry := expectcc.PayloadIs(cc1.From(Owner).Init(), &identity.Entry{}).(identity.Entry) 51 Expect(ownerEntry.GetSubject()).To(Equal(Owner.GetSubject())) 52 }) 53 54 It("Owner not changed during chaincode upgrade", func() { 55 // cc upgrade 56 ownerAfterSecondInit := expectcc.PayloadIs(cc1.From(Someone).Init(), &identity.Entry{}).(identity.Entry) 57 Expect(ownerAfterSecondInit.Subject).To(Equal(Owner.GetSubject())) 58 }) 59 60 It("Owner can be queried", func() { 61 ownerIdentity := expectcc.PayloadIs( 62 cc1.From(Someone).Invoke(QueryMethod), &identity.Entry{}).(identity.Entry) 63 Expect(ownerIdentity.GetSubject()).To(Equal(Owner.GetSubject())) 64 Expect(ownerIdentity.GetMSPIdentifier()).To(Equal(Owner.MspID)) 65 Expect(ownerIdentity.GetPublicKey()).To(Equal(Owner.Cert.PublicKey)) 66 }) 67 }) 68 69 Describe("Owner from args", func() { 70 71 It("Allow to set owner during chaincode init", func() { 72 //invoke chaincode method from someone, but pass owner mspId and cert to init 73 ownerEntry := expectcc.PayloadIs( 74 cc2.From(Someone).Init(Owner.MspID, Owner.GetPEM()), &identity.Entry{}).(identity.Entry) 75 Expect(ownerEntry.GetSubject()).To(Equal(Owner.GetSubject())) 76 }) 77 78 It("Owner not changed during chaincode upgrade", func() { 79 // cc upgrade 80 ownerAfterSecondInit := expectcc.PayloadIs(cc2.From(Someone).Init(), &identity.Entry{}).(identity.Entry) 81 Expect(ownerAfterSecondInit.Subject).To(Equal(Owner.GetSubject())) 82 }) 83 It("Disallow set owner twice", func() { 84 //invoke chaincode method from someone, but pass owner mspId and cert to init 85 expectcc.ResponseError(cc2.From(Someone).Init(Owner.MspID, Owner.GetPEM())) 86 }) 87 88 It("Owner can be queried", func() { 89 ownerIdentity := expectcc.PayloadIs( 90 cc2.From(Someone).Invoke(QueryMethod), &identity.Entry{}).(identity.Entry) 91 Expect(ownerIdentity.GetSubject()).To(Equal(Owner.GetSubject())) 92 Expect(ownerIdentity.GetMSPIdentifier()).To(Equal(Owner.MspID)) 93 Expect(ownerIdentity.GetPublicKey()).To(Equal(Owner.Cert.PublicKey)) 94 }) 95 96 }) 97 })