github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/integration/nwo/network_test.go (about) 1 /* 2 Copyright hechain. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package nwo_test 8 9 import ( 10 "fmt" 11 "io/ioutil" 12 "os" 13 "path/filepath" 14 "syscall" 15 16 docker "github.com/fsouza/go-dockerclient" 17 "github.com/hechain20/hechain/integration/nwo" 18 "github.com/hechain20/hechain/integration/nwo/commands" 19 20 . "github.com/onsi/ginkgo" 21 . "github.com/onsi/gomega" 22 "github.com/onsi/gomega/gbytes" 23 "github.com/onsi/gomega/gexec" 24 "github.com/tedsuo/ifrit" 25 ) 26 27 var _ = Describe("Network", func() { 28 var ( 29 client *docker.Client 30 tempDir string 31 ) 32 33 BeforeEach(func() { 34 var err error 35 tempDir, err = ioutil.TempDir("", "nwo") 36 Expect(err).NotTo(HaveOccurred()) 37 38 client, err = docker.NewClientFromEnv() 39 Expect(err).NotTo(HaveOccurred()) 40 }) 41 42 AfterEach(func() { 43 os.RemoveAll(tempDir) 44 }) 45 46 Describe("solo network", func() { 47 var network *nwo.Network 48 var process ifrit.Process 49 50 BeforeEach(func() { 51 network = nwo.New(nwo.BasicSolo(), tempDir, client, StartPort(), components) 52 53 // Generate config and bootstrap the network 54 network.GenerateConfigTree() 55 network.Bootstrap() 56 57 // Start all of the fabric processes 58 networkRunner := network.NetworkGroupRunner() 59 process = ifrit.Invoke(networkRunner) 60 Eventually(process.Ready(), network.EventuallyTimeout).Should(BeClosed()) 61 }) 62 63 AfterEach(func() { 64 // Shutdown processes and cleanup 65 process.Signal(syscall.SIGTERM) 66 Eventually(process.Wait(), network.EventuallyTimeout).Should(Receive()) 67 network.Cleanup() 68 }) 69 70 It("deploys and executes chaincode (simple) using the legacy lifecycle", func() { 71 orderer := network.Orderer("orderer") 72 peer := network.Peer("Org1", "peer0") 73 74 legacyChaincode := nwo.Chaincode{ 75 Name: "mycc", 76 Version: "0.0", 77 Path: "github.com/hechain20/hechain/integration/chaincode/simple/cmd", 78 Ctor: `{"Args":["init","a","100","b","200"]}`, 79 Policy: `AND ('Org1MSP.member','Org2MSP.member')`, 80 } 81 82 network.CreateAndJoinChannels(orderer) 83 nwo.DeployChaincodeLegacy(network, "testchannel", orderer, legacyChaincode) 84 RunQueryInvokeQuery(network, orderer, peer, 100) 85 }) 86 87 It("deploys and executes chaincode (simple) using _lifecycle", func() { 88 orderer := network.Orderer("orderer") 89 peer := network.Peer("Org1", "peer0") 90 91 chaincode := nwo.Chaincode{ 92 Name: "mycc", 93 Version: "0.0", 94 Path: "github.com/hechain20/hechain/integration/chaincode/simple/cmd", 95 Lang: "golang", 96 PackageFile: filepath.Join(tempDir, "simplecc.tar.gz"), 97 Ctor: `{"Args":["init","a","100","b","200"]}`, 98 SignaturePolicy: `AND ('Org1MSP.member','Org2MSP.member')`, 99 Sequence: "1", 100 InitRequired: true, 101 Label: "my_simple_chaincode", 102 } 103 104 network.CreateAndJoinChannels(orderer) 105 106 network.UpdateChannelAnchors(orderer, "testchannel") 107 network.VerifyMembership(network.PeersWithChannel("testchannel"), "testchannel") 108 109 nwo.EnableCapabilities( 110 network, 111 "testchannel", 112 "Application", "V2_0", 113 orderer, 114 network.PeersWithChannel("testchannel")..., 115 ) 116 nwo.DeployChaincode(network, "testchannel", orderer, chaincode) 117 118 RunQueryInvokeQuery(network, orderer, peer, 100) 119 }) 120 }) 121 }) 122 123 func RunQueryInvokeQuery(n *nwo.Network, orderer *nwo.Orderer, peer *nwo.Peer, initialQueryResult int) { 124 By("querying the chaincode") 125 sess, err := n.PeerUserSession(peer, "User1", commands.ChaincodeQuery{ 126 ChannelID: "testchannel", 127 Name: "mycc", 128 Ctor: `{"Args":["query","a"]}`, 129 }) 130 Expect(err).NotTo(HaveOccurred()) 131 Eventually(sess, n.EventuallyTimeout).Should(gexec.Exit(0)) 132 Expect(sess).To(gbytes.Say(fmt.Sprint(initialQueryResult))) 133 134 sess, err = n.PeerUserSession(peer, "User1", commands.ChaincodeInvoke{ 135 ChannelID: "testchannel", 136 Orderer: n.OrdererAddress(orderer, nwo.ListenPort), 137 Name: "mycc", 138 Ctor: `{"Args":["invoke","a","b","10"]}`, 139 PeerAddresses: []string{ 140 n.PeerAddress(n.Peer("Org1", "peer0"), nwo.ListenPort), 141 n.PeerAddress(n.Peer("Org2", "peer0"), nwo.ListenPort), 142 }, 143 WaitForEvent: true, 144 }) 145 Expect(err).NotTo(HaveOccurred()) 146 Eventually(sess, n.EventuallyTimeout).Should(gexec.Exit(0)) 147 Expect(sess.Err).To(gbytes.Say("Chaincode invoke successful. result: status:200")) 148 149 sess, err = n.PeerUserSession(peer, "User1", commands.ChaincodeQuery{ 150 ChannelID: "testchannel", 151 Name: "mycc", 152 Ctor: `{"Args":["query","a"]}`, 153 }) 154 Expect(err).NotTo(HaveOccurred()) 155 Eventually(sess, n.EventuallyTimeout).Should(gexec.Exit(0)) 156 Expect(sess).To(gbytes.Say(fmt.Sprint(initialQueryResult - 10))) 157 }