github.com/sykesm/fabric@v1.1.0-preview.0.20200129034918-2aa12b1a0181/integration/lifecycle/install_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package lifecycle 8 9 import ( 10 "io/ioutil" 11 "os" 12 "path/filepath" 13 "syscall" 14 15 . "github.com/onsi/ginkgo" 16 . "github.com/onsi/gomega" 17 18 docker "github.com/fsouza/go-dockerclient" 19 "github.com/hyperledger/fabric/integration/nwo" 20 "github.com/hyperledger/fabric/integration/nwo/commands" 21 "github.com/hyperledger/fabric/integration/nwo/fabricconfig" 22 "github.com/onsi/gomega/gbytes" 23 "github.com/onsi/gomega/gexec" 24 "github.com/tedsuo/ifrit" 25 ) 26 27 var _ = Describe("chaincode install", func() { 28 var ( 29 client *docker.Client 30 testDir string 31 32 network *nwo.Network 33 process ifrit.Process 34 ) 35 36 BeforeEach(func() { 37 var err error 38 testDir, err = ioutil.TempDir("", "lifecycle") 39 Expect(err).NotTo(HaveOccurred()) 40 41 client, err = docker.NewClientFromEnv() 42 Expect(err).NotTo(HaveOccurred()) 43 44 cwd, err := os.Getwd() 45 Expect(err).NotTo(HaveOccurred()) 46 47 network = nwo.New(nwo.BasicSolo(), testDir, client, StartPort(), components) 48 network.ExternalBuilders = append(network.ExternalBuilders, fabricconfig.ExternalBuilder{ 49 Path: filepath.Join(cwd, "..", "externalbuilders", "golang"), 50 Name: "external-golang", 51 EnvironmentWhitelist: []string{"GOPATH", "GOCACHE", "GOPROXY", "HOME", "PATH"}, 52 }) 53 network.GenerateConfigTree() 54 network.Bootstrap() 55 56 networkRunner := network.NetworkGroupRunner() 57 process = ifrit.Invoke(networkRunner) 58 Eventually(process.Ready(), network.EventuallyTimeout).Should(BeClosed()) 59 }) 60 61 AfterEach(func() { 62 process.Signal(syscall.SIGTERM) 63 Eventually(process.Wait(), network.EventuallyTimeout).Should(Receive()) 64 network.Cleanup() 65 os.RemoveAll(testDir) 66 }) 67 68 Describe("external builder failures", func() { 69 var ( 70 orderer *nwo.Orderer 71 org1Peer *nwo.Peer 72 org2Peer *nwo.Peer 73 chaincode nwo.Chaincode 74 ) 75 76 BeforeEach(func() { 77 packageTempDir, err := ioutil.TempDir(network.RootDir, "chaincode-package") 78 Expect(err).NotTo(HaveOccurred()) 79 80 orderer = network.Orderer("orderer") 81 org1Peer = network.Peer("Org1", "peer0") 82 org2Peer = network.Peer("Org2", "peer0") 83 network.CreateAndJoinChannels(orderer) 84 85 chaincode = nwo.Chaincode{ 86 Name: "failure-external", 87 Version: "0.0", 88 Lang: "golang", 89 Path: "github.com/hyperledger/fabric/integration/chaincode/simple/cmd", 90 Ctor: `{"Args":["init","a","100","b","200"]}`, 91 Policy: `OR ('Org1MSP.member','Org2MSP.member')`, 92 SignaturePolicy: `OR ('Org1MSP.member','Org2MSP.member')`, 93 Sequence: "1", 94 InitRequired: false, 95 Label: "failure-external", 96 PackageFile: filepath.Join(packageTempDir, "chaincode-package"), 97 } 98 }) 99 100 It("legacy does not fallback to internal platforms", func() { 101 By("packaging the chaincode using the legacy lifecycle") 102 nwo.PackageChaincodeLegacy(network, chaincode, org1Peer) 103 104 By("installing the chaincode using the legacy lifecycle") 105 sess, err := network.PeerAdminSession(org1Peer, commands.ChaincodeInstallLegacy{ 106 Name: chaincode.Name, 107 Version: chaincode.Version, 108 Path: chaincode.Path, 109 Lang: chaincode.Lang, 110 PackageFile: chaincode.PackageFile, 111 ClientAuth: network.ClientAuthRequired, 112 }) 113 Expect(err).NotTo(HaveOccurred()) 114 Eventually(sess, network.EventuallyTimeout).Should(gexec.Exit(1)) 115 116 Expect(sess.Err).To(gbytes.Say(`\Qexternal builder 'external-golang' failed: exit status 1\E`)) 117 }) 118 119 It("_lifecycle does not fallback to internal platforms when an external builder fails", func() { 120 By("enabling V2_0 application capabilities") 121 nwo.EnableCapabilities(network, "testchannel", "Application", "V2_0", orderer, org1Peer, org2Peer) 122 123 By("packaging the chaincode") 124 nwo.PackageChaincode(network, chaincode, org1Peer) 125 126 By("installing the chaincode using _lifecycle") 127 sess, err := network.PeerAdminSession(org1Peer, commands.ChaincodeInstall{ 128 PackageFile: chaincode.PackageFile, 129 ClientAuth: network.ClientAuthRequired, 130 }) 131 Expect(err).NotTo(HaveOccurred()) 132 Eventually(sess, network.EventuallyTimeout).Should(gexec.Exit(1)) 133 134 Expect(sess.Err).To(gbytes.Say(`\Qexternal builder 'external-golang' failed: exit status 1\E`)) 135 }) 136 }) 137 })