func (testWrapper *blockchainTestWrapper) populateBlockChainWithSampleData() (blocks []*protos.Block, hashes [][]byte, err error) { var allBlocks []*protos.Block var allHashes [][]byte // -----------------------------<Genesis block>------------------------------- // Add the first (genesis block) block1 := protos.NewBlock(nil, nil) allBlocks = append(allBlocks, block1) allHashes = append(allHashes, []byte("stateHash1")) testWrapper.addNewBlock(block1, []byte("stateHash1")) // -----------------------------</Genesis block>------------------------------ // -----------------------------<Block 2>------------------------------------- // Deploy a chaincode transaction2a, err := protos.NewTransaction(protos.ChaincodeID{Path: "Contracts"}, testutil.GenerateUUID(testWrapper.t), "NewContract", []string{"name: MyContract1, code: var x; function setX(json) {x = json.x}}"}) if err != nil { return nil, nil, err } // Now we add the transaction to the block 2 and add the block to the chain transactions2a := []*protos.Transaction{transaction2a} block2 := protos.NewBlock(transactions2a, nil) allBlocks = append(allBlocks, block2) allHashes = append(allHashes, []byte("stateHash2")) testWrapper.addNewBlock(block2, []byte("stateHash2")) // -----------------------------</Block 2>------------------------------------ // -----------------------------<Block 3>------------------------------------- // Create a transaction' transaction3a, err := protos.NewTransaction(protos.ChaincodeID{Path: "MyContract"}, testutil.GenerateUUID(testWrapper.t), "setX", []string{"{x: \"hello\"}"}) if err != nil { return nil, nil, err } // Create the third block and add it to the chain transactions3a := []*protos.Transaction{transaction3a} block3 := protos.NewBlock(transactions3a, nil) allBlocks = append(allBlocks, block3) allHashes = append(allHashes, []byte("stateHash3")) testWrapper.addNewBlock(block3, []byte("stateHash3")) // -----------------------------</Block 3>------------------------------------ return allBlocks, allHashes, nil }
func TestBlockChain_SingleBlock(t *testing.T) { testDBWrapper.CreateFreshDB(t) blockchainTestWrapper := newTestBlockchainWrapper(t) blockchain := blockchainTestWrapper.blockchain // Create the Chaincode specification chaincodeSpec := &protos.ChaincodeSpec{Type: protos.ChaincodeSpec_GOLANG, ChaincodeID: &protos.ChaincodeID{Path: "Contracts"}, CtorMsg: &protos.ChaincodeInput{Function: "Initialize", Args: []string{"param1"}}} chaincodeDeploymentSepc := &protos.ChaincodeDeploymentSpec{ChaincodeSpec: chaincodeSpec} uuid := testutil.GenerateUUID(t) newChaincodeTx, err := protos.NewChaincodeDeployTransaction(chaincodeDeploymentSepc, uuid) testutil.AssertNoError(t, err, "Failed to create new chaincode Deployment Transaction") t.Logf("New chaincode tx: %v", newChaincodeTx) block1 := protos.NewBlock([]*protos.Transaction{newChaincodeTx}) blockNumber := blockchainTestWrapper.addNewBlock(block1, []byte("stateHash1")) t.Logf("New chain: %v", blockchain) testutil.AssertEquals(t, blockNumber, uint64(0)) testutil.AssertEquals(t, blockchain.getSize(), uint64(1)) testutil.AssertEquals(t, blockchainTestWrapper.fetchBlockchainSizeFromDB(), uint64(1)) }