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  }