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  })