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  }