github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/integration/kafka/e2e_test.go (about) 1 /* 2 Copyright hechain All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package kafka 8 9 import ( 10 "io/ioutil" 11 "os" 12 "path/filepath" 13 "syscall" 14 15 docker "github.com/fsouza/go-dockerclient" 16 "github.com/hechain20/hechain/integration/nwo" 17 "github.com/hechain20/hechain/integration/nwo/commands" 18 . "github.com/onsi/ginkgo" 19 . "github.com/onsi/gomega" 20 "github.com/onsi/gomega/gbytes" 21 "github.com/onsi/gomega/gexec" 22 "github.com/tedsuo/ifrit" 23 ) 24 25 var _ = Describe("basic kafka network with 2 orgs", func() { 26 var ( 27 testDir string 28 client *docker.Client 29 network *nwo.Network 30 process ifrit.Process 31 ) 32 33 BeforeEach(func() { 34 var err error 35 testDir, err = ioutil.TempDir("", "kafka-e2e") 36 Expect(err).NotTo(HaveOccurred()) 37 38 client, err = docker.NewClientFromEnv() 39 Expect(err).NotTo(HaveOccurred()) 40 41 network = nwo.New(nwo.BasicKafka(), testDir, client, StartPort(), components) 42 network.GenerateConfigTree() 43 network.Bootstrap() 44 45 networkRunner := network.NetworkGroupRunner() 46 process = ifrit.Invoke(networkRunner) 47 Eventually(process.Ready(), network.EventuallyTimeout).Should(BeClosed()) 48 }) 49 50 AfterEach(func() { 51 if process != nil { 52 process.Signal(syscall.SIGTERM) 53 Eventually(process.Wait(), network.EventuallyTimeout).Should(Receive()) 54 } 55 if network != nil { 56 network.Cleanup() 57 } 58 os.RemoveAll(testDir) 59 }) 60 61 It("executes a basic kafka network with 2 orgs", func() { 62 chaincodePath, err := filepath.Abs("../chaincode/module") 63 Expect(err).NotTo(HaveOccurred()) 64 65 // use these two variants of the same chaincode to ensure we test 66 // the golang docker build for both module and gopath chaincode 67 chaincode := nwo.Chaincode{ 68 Name: "mycc", 69 Version: "0.0", 70 Path: chaincodePath, 71 Lang: "golang", 72 PackageFile: filepath.Join(testDir, "modulecc.tar.gz"), 73 Ctor: `{"Args":["init","a","100","b","200"]}`, 74 SignaturePolicy: `AND ('Org1MSP.member','Org2MSP.member')`, 75 Sequence: "1", 76 InitRequired: true, 77 Label: "my_module_chaincode", 78 } 79 80 network.CreateAndJoinChannel(network.Orderer("orderer"), "testchannel") 81 nwo.EnableCapabilities( 82 network, 83 "testchannel", 84 "Application", "V2_0", 85 network.Orderer("orderer"), 86 network.Peer("Org1", "peer0"), 87 network.Peer("Org2", "peer0"), 88 ) 89 nwo.DeployChaincode( 90 network, 91 "testchannel", 92 network.Orderer("orderer"), 93 chaincode, 94 network.Peer("Org1", "peer0"), 95 network.Peer("Org2", "peer0"), 96 ) 97 RunQueryInvokeQuery( 98 network, 99 "testchannel", 100 network.Orderer("orderer"), 101 network.Peer("Org1", "peer0"), 102 network.Peer("Org2", "peer0"), 103 ) 104 }) 105 }) 106 107 func RunQueryInvokeQuery(n *nwo.Network, channel string, orderer *nwo.Orderer, peers ...*nwo.Peer) { 108 By("querying the chaincode") 109 sess, err := n.PeerUserSession(peers[0], "User1", commands.ChaincodeQuery{ 110 ChannelID: channel, 111 Name: "mycc", 112 Ctor: `{"Args":["query","a"]}`, 113 }) 114 Expect(err).NotTo(HaveOccurred()) 115 Eventually(sess, n.EventuallyTimeout).Should(gexec.Exit(0)) 116 Expect(sess).To(gbytes.Say("100")) 117 118 var peerAddrs []string 119 for _, p := range peers { 120 peerAddrs = append(peerAddrs, n.PeerAddress(p, nwo.ListenPort)) 121 } 122 sess, err = n.PeerUserSession(peers[0], "User1", commands.ChaincodeInvoke{ 123 ChannelID: channel, 124 Orderer: n.OrdererAddress(orderer, nwo.ListenPort), 125 Name: "mycc", 126 Ctor: `{"Args":["invoke","a","b","10"]}`, 127 PeerAddresses: peerAddrs, 128 WaitForEvent: true, 129 }) 130 Expect(err).NotTo(HaveOccurred()) 131 Eventually(sess, n.EventuallyTimeout).Should(gexec.Exit(0)) 132 Expect(sess.Err).To(gbytes.Say("Chaincode invoke successful. result: status:200")) 133 134 sess, err = n.PeerUserSession(peers[0], "User1", commands.ChaincodeQuery{ 135 ChannelID: channel, 136 Name: "mycc", 137 Ctor: `{"Args":["query","a"]}`, 138 }) 139 Expect(err).NotTo(HaveOccurred()) 140 Eventually(sess, n.EventuallyTimeout).Should(gexec.Exit(0)) 141 Expect(sess).To(gbytes.Say("90")) 142 }