func TestKVLedgerBlockStorage(t *testing.T) { conf := kvledger.NewConf("/tmp/tests/ledger/", 0) defer os.RemoveAll("/tmp/tests/ledger/") ledger, _ := kvledger.NewKVLedger(conf) defer ledger.Close() committer := NewLedgerCommitter(ledger) height, err := committer.LedgerHeight() assert.Equal(t, uint64(0), height) assert.NoError(t, err) bcInfo, _ := ledger.GetBlockchainInfo() testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{ Height: 0, CurrentBlockHash: nil, PreviousBlockHash: nil}) simulator, _ := ledger.NewTxSimulator() simulator.SetState("ns1", "key1", []byte("value1")) simulator.SetState("ns1", "key2", []byte("value2")) simulator.SetState("ns1", "key3", []byte("value3")) simulator.Done() simRes, _ := simulator.GetTxSimulationResults() block1 := testutil.ConstructBlock(t, [][]byte{simRes}, true) err = committer.CommitBlock(block1) assert.NoError(t, err) height, err = committer.LedgerHeight() assert.Equal(t, uint64(1), height) assert.NoError(t, err) blocks := committer.GetBlocks([]uint64{1}) assert.Equal(t, 1, len(blocks)) assert.NoError(t, err) bcInfo, _ = ledger.GetBlockchainInfo() block1Hash := block1.Header.Hash() testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{ Height: 1, CurrentBlockHash: block1Hash, PreviousBlockHash: []byte{}}) }
func checkValidation(t *testing.T, validator *Validator, rwsets []*rwset.RWSet, invalidTxIndexes []int) { simulationResults := [][]byte{} for _, rwset := range rwsets { sr, err := rwset.GetTxReadWriteSet().Marshal() testutil.AssertNoError(t, err, "") simulationResults = append(simulationResults, sr) } block := testutil.ConstructBlock(t, simulationResults, false) _, err := validator.ValidateAndPrepareBatch(block, true) txsFltr := util.NewFilterBitArrayFromBytes(block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER]) invalidTxNum := 0 for i := 0; i < len(block.Data.Data); i++ { if txsFltr.IsSet(uint(i)) { invalidTxNum++ } } testutil.AssertNoError(t, err, "") testutil.AssertEquals(t, invalidTxNum, len(invalidTxIndexes)) //TODO Add the check for exact txnum that is marked invlid when bitarray is in place }