github.com/pvitto98/fabric@v2.1.1+incompatible/core/chaincode/container_runtime_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package chaincode_test 8 9 import ( 10 "testing" 11 12 pb "github.com/hyperledger/fabric-protos-go/peer" 13 "github.com/hyperledger/fabric/core/chaincode" 14 "github.com/hyperledger/fabric/core/chaincode/mock" 15 "github.com/hyperledger/fabric/core/container" 16 "github.com/hyperledger/fabric/core/container/ccintf" 17 "github.com/pkg/errors" 18 "github.com/stretchr/testify/assert" 19 ) 20 21 func TestContainerRuntimeBuild(t *testing.T) { 22 fakeRouter := &mock.ContainerRouter{} 23 fakeRouter.ChaincodeServerInfoReturns(&ccintf.ChaincodeServerInfo{Address: "ccaddress:12345"}, nil) 24 25 cr := &chaincode.ContainerRuntime{ 26 ContainerRouter: fakeRouter, 27 BuildRegistry: &container.BuildRegistry{}, 28 } 29 30 ccinfo, err := cr.Build("chaincode-name:chaincode-version") 31 assert.NoError(t, err) 32 assert.Equal(t, &ccintf.ChaincodeServerInfo{Address: "ccaddress:12345"}, ccinfo) 33 34 assert.Equal(t, 1, fakeRouter.BuildCallCount()) 35 packageID := fakeRouter.BuildArgsForCall(0) 36 assert.Equal(t, "chaincode-name:chaincode-version", packageID) 37 } 38 39 func TestContainerRuntimeStart(t *testing.T) { 40 fakeRouter := &mock.ContainerRouter{} 41 42 cr := &chaincode.ContainerRuntime{ 43 ContainerRouter: fakeRouter, 44 BuildRegistry: &container.BuildRegistry{}, 45 } 46 47 err := cr.Start("chaincode-name:chaincode-version", &ccintf.PeerConnection{Address: "peer-address"}) 48 assert.NoError(t, err) 49 50 assert.Equal(t, 1, fakeRouter.StartCallCount()) 51 ccid, peerConnection := fakeRouter.StartArgsForCall(0) 52 assert.Equal(t, "chaincode-name:chaincode-version", ccid) 53 assert.Equal(t, "peer-address", peerConnection.Address) 54 assert.Nil(t, peerConnection.TLSConfig) 55 56 // Try starting a second time, to ensure build is not invoked again 57 // as the BuildRegistry already holds it 58 err = cr.Start("chaincode-name:chaincode-version", &ccintf.PeerConnection{Address: "fake-address"}) 59 assert.NoError(t, err) 60 assert.Equal(t, 2, fakeRouter.StartCallCount()) 61 } 62 63 func TestContainerRuntimeStartErrors(t *testing.T) { 64 tests := []struct { 65 chaincodeType string 66 startErr error 67 errValue string 68 }{ 69 {pb.ChaincodeSpec_GOLANG.String(), errors.New("process-failed"), "error starting container: process-failed"}, 70 } 71 72 for _, tc := range tests { 73 fakeRouter := &mock.ContainerRouter{} 74 fakeRouter.StartReturns(tc.startErr) 75 76 cr := &chaincode.ContainerRuntime{ 77 ContainerRouter: fakeRouter, 78 BuildRegistry: &container.BuildRegistry{}, 79 } 80 81 err := cr.Start("ccid", &ccintf.PeerConnection{Address: "fake-address"}) 82 assert.EqualError(t, err, tc.errValue) 83 } 84 } 85 86 func TestContainerRuntimeStop(t *testing.T) { 87 fakeRouter := &mock.ContainerRouter{} 88 89 cr := &chaincode.ContainerRuntime{ 90 ContainerRouter: fakeRouter, 91 } 92 93 err := cr.Stop("chaincode-id-name:chaincode-version") 94 assert.NoError(t, err) 95 96 assert.Equal(t, 1, fakeRouter.StopCallCount()) 97 ccid := fakeRouter.StopArgsForCall(0) 98 assert.Equal(t, "chaincode-id-name:chaincode-version", ccid) 99 } 100 101 func TestContainerRuntimeStopErrors(t *testing.T) { 102 tests := []struct { 103 processErr error 104 errValue string 105 }{ 106 {errors.New("process-failed"), "error stopping container: process-failed"}, 107 } 108 109 for _, tc := range tests { 110 fakeRouter := &mock.ContainerRouter{} 111 fakeRouter.StopReturns(tc.processErr) 112 113 cr := &chaincode.ContainerRuntime{ 114 ContainerRouter: fakeRouter, 115 } 116 117 assert.EqualError(t, cr.Stop("ccid"), tc.errValue) 118 } 119 } 120 121 func TestContainerRuntimeWait(t *testing.T) { 122 fakeRouter := &mock.ContainerRouter{} 123 124 cr := &chaincode.ContainerRuntime{ 125 ContainerRouter: fakeRouter, 126 } 127 128 exitCode, err := cr.Wait("chaincode-id-name:chaincode-version") 129 assert.NoError(t, err) 130 assert.Equal(t, 0, exitCode) 131 assert.Equal(t, 1, fakeRouter.WaitCallCount()) 132 assert.Equal(t, "chaincode-id-name:chaincode-version", fakeRouter.WaitArgsForCall(0)) 133 134 fakeRouter.WaitReturns(3, errors.New("moles-and-trolls")) 135 code, err := cr.Wait("chaincode-id-name:chaincode-version") 136 assert.EqualError(t, err, "moles-and-trolls") 137 assert.Equal(t, code, 3) 138 }