func (env *levelDBLockBasedEnv) init(t *testing.T) { testDBPath := "/tmp/fabric/core/ledger/kvledger/txmgmt/lockbasedtxmgmt" testDBEnv := stateleveldb.NewTestVDBEnv(t, testDBPath) txMgr := lockbasedtxmgr.NewLockBasedTxMgr(testDBEnv.DB) env.testDBEnv = testDBEnv env.txmgr = txMgr }
func TestValidator(t *testing.T) { testDBEnv := stateleveldb.NewTestVDBEnv(t, testDBPath) defer testDBEnv.Cleanup() db := testDBEnv.DB //populate db with initial data batch := statedb.NewUpdateBatch() batch.Put("ns1", "key1", []byte("value1"), version.NewHeight(1, 1)) batch.Put("ns1", "key2", []byte("value2"), version.NewHeight(1, 2)) batch.Put("ns1", "key3", []byte("value3"), version.NewHeight(1, 3)) batch.Put("ns1", "key4", []byte("value4"), version.NewHeight(1, 4)) batch.Put("ns1", "key5", []byte("value5"), version.NewHeight(1, 5)) db.ApplyUpdates(batch, version.NewHeight(1, 5)) validator := NewValidator(db) //rwset1 should be valid rwset1 := rwset.NewRWSet() rwset1.AddToReadSet("ns1", "key1", version.NewHeight(1, 1)) rwset1.AddToReadSet("ns2", "key2", nil) checkValidation(t, validator, []*rwset.RWSet{rwset1}, []int{}) //rwset2 should not be valid rwset2 := rwset.NewRWSet() rwset2.AddToReadSet("ns1", "key1", version.NewHeight(1, 2)) checkValidation(t, validator, []*rwset.RWSet{rwset2}, []int{0}) //rwset3 should not be valid rwset3 := rwset.NewRWSet() rwset3.AddToReadSet("ns1", "key1", nil) checkValidation(t, validator, []*rwset.RWSet{rwset3}, []int{0}) // rwset4 and rwset5 within same block - rwset4 should be valid and makes rwset5 as invalid rwset4 := rwset.NewRWSet() rwset4.AddToReadSet("ns1", "key1", version.NewHeight(1, 1)) rwset4.AddToWriteSet("ns1", "key1", []byte("value1_new")) rwset5 := rwset.NewRWSet() rwset5.AddToReadSet("ns1", "key1", version.NewHeight(1, 1)) checkValidation(t, validator, []*rwset.RWSet{rwset4, rwset5}, []int{1}) }