github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/integration/ledger/ledger_generate_test.go (about) 1 //go:build generate 2 // +build generate 3 4 /* 5 Copyright hechain All Rights Reserved. 6 7 SPDX-License-Identifier: Apache-2.0 8 */ 9 10 package ledger 11 12 import ( 13 "fmt" 14 "path/filepath" 15 16 . "github.com/onsi/ginkgo" 17 18 "github.com/hechain20/hechain/integration/nwo" 19 ) 20 21 // This test generate sample ledger data that can be used to verify rebuild ledger function and upgrade function (in a future release). 22 // It is skipped in general. To generate sample ledger data, use build tag 'generate' and run this test in isolation. 23 // It does not delete the network directory so that you can copy the generated data to a different directory for unit tests. 24 // At the end of test, it prints `setup.testDir is <directory>`. Copy the network data under <directory> to 25 // the unit test directory for rebuild tests as needed. 26 // It generates the following blocks: 27 // block 0: genesis 28 // block 1 to 4: network setup 29 // block 5 to 8: marblesp chaincode instantiation 30 // block 9 to 12: marbles chancode instantiation 31 // block 13: marblesp chaincode invocation 32 // block 14 to 17: upgrade marblesp chaincode with a new collection config 33 // block 18: marbles chaincode invocation 34 var _ = Describe("sample ledger generation", func() { 35 var ( 36 setup *setup 37 helper *testHelper 38 chaincodemp nwo.Chaincode 39 chaincodem nwo.Chaincode 40 ) 41 42 BeforeEach(func() { 43 setup = initThreeOrgsSetup() 44 nwo.EnableCapabilities(setup.network, setup.channelID, "Application", "V2_0", setup.orderer, setup.peers...) 45 helper = &testHelper{ 46 networkHelper: &networkHelper{ 47 Network: setup.network, 48 orderer: setup.orderer, 49 peers: setup.peers, 50 testDir: setup.testDir, 51 channelID: setup.channelID, 52 }, 53 } 54 55 chaincodemp = nwo.Chaincode{ 56 Name: "marblesp", 57 Version: "1.0", 58 Path: components.Build("github.com/hechain20/hechain/integration/chaincode/marbles_private/cmd"), 59 Lang: "binary", 60 PackageFile: filepath.Join(setup.testDir, "marbles-pvtdata.tar.gz"), 61 Label: "marbles-private-20", 62 SignaturePolicy: `OR ('Org1MSP.member','Org2MSP.member', 'Org3MSP.member')`, 63 CollectionsConfig: filepath.Join("testdata", "collection_configs", "collections_config1.json"), 64 Sequence: "1", 65 } 66 67 chaincodem = nwo.Chaincode{ 68 Name: "marbles", 69 Version: "0.0", 70 Path: "github.com/hechain20/hechain/integration/chaincode/marbles/cmd", 71 Lang: "golang", 72 PackageFile: filepath.Join(setup.testDir, "marbles.tar.gz"), 73 Label: "marbles", 74 SignaturePolicy: `OR ('Org1MSP.member','Org2MSP.member', 'Org3MSP.member')`, 75 Sequence: "1", 76 } 77 }) 78 79 AfterEach(func() { 80 setup.terminateAllProcess() 81 setup.network.Cleanup() 82 // do not delete testDir and log it so that we can copy the test data to unit tests for verification purpose 83 fmt.Fprintf(GinkgoWriter, "The test dir is %s. Use peers/org2.peer0/filesystem/ledgersData as the sample ledger for kvledger rebuild tests\n", setup.testDir) 84 }) 85 86 It("creates marbles", func() { 87 org2peer0 := setup.network.Peer("org2", "peer0") 88 height := helper.getLedgerHeight(org2peer0) 89 90 By(fmt.Sprintf("deploying marblesp chaincode at block height %d", height)) 91 helper.deployChaincode(chaincodemp) 92 93 height = helper.getLedgerHeight(org2peer0) 94 By(fmt.Sprintf("deploying marbles chaincode at block height %d", height)) 95 helper.deployChaincode(chaincodem) 96 97 height = helper.getLedgerHeight(org2peer0) 98 By(fmt.Sprintf("creating marbles1 with marblesp chaincode at block height %d", height)) 99 helper.addMarble("marblesp", `{"name":"marble1", "color":"blue", "size":35, "owner":"tom", "price":99}`, org2peer0) 100 helper.waitUntilEqualLedgerHeight(height + 1) 101 102 By("verifying marble1 exist in collectionMarbles & collectionMarblePrivateDetails in peer0.org2") 103 helper.assertPresentInCollectionM("marblesp", "marble1", org2peer0) 104 helper.assertPresentInCollectionMPD("marblesp", "marble1", org2peer0) 105 106 By(fmt.Sprintf("upgrading marblesp chaincode at block height %d", helper.getLedgerHeight(org2peer0))) 107 chaincodemp.Version = "1.1" 108 chaincodemp.CollectionsConfig = filepath.Join("testdata", "collection_configs", "collections_config2.json") 109 chaincodemp.Sequence = "2" 110 nwo.DeployChaincode(setup.network, setup.channelID, setup.orderer, chaincodemp) 111 112 mhelper := &marblesTestHelper{ 113 networkHelper: &networkHelper{ 114 Network: setup.network, 115 orderer: setup.orderer, 116 peers: setup.peers, 117 testDir: setup.testDir, 118 channelID: setup.channelID, 119 }, 120 } 121 By(fmt.Sprintf("creating marble100 with marbles chaincode at block height %d", helper.getLedgerHeight(org2peer0))) 122 mhelper.invokeMarblesChaincode("marbles", org2peer0, "initMarble", "marble100", "blue", "35", "tom") 123 By("transferring marble100 owner") 124 mhelper.invokeMarblesChaincode("marbles", org2peer0, "transferMarble", "marble100", "jerry") 125 126 By("verifying marble100 new owner after transfer by color") 127 expectedResult := newMarble("marble100", "blue", 35, "jerry") 128 mhelper.assertMarbleExists("marbles", org2peer0, expectedResult, "marble100") 129 130 By("getting history for marble100") 131 expectedHistoryResult := []*marbleHistoryResult{ 132 {IsDelete: "false", Value: newMarble("marble100", "blue", 35, "jerry")}, 133 {IsDelete: "false", Value: newMarble("marble100", "blue", 35, "tom")}, 134 } 135 mhelper.assertGetHistoryForMarble("marbles", org2peer0, expectedHistoryResult, "marble100") 136 }) 137 })