Skip to content

Commit

Permalink
[FAB-3406] Improve unit-test for statedb/stateleveldb
Browse files Browse the repository at this point in the history
Increase the test coverage from 83% to 92%.

Change-Id: Ia9ac8b10dc92efa51a6a87eda3c07fa629120c15
Signed-off-by: senthil <cendhu@gmail.com>
  • Loading branch information
cendhu committed Apr 28, 2017
1 parent ecc29dd commit 71a8897
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 0 deletions.
29 changes: 29 additions & 0 deletions core/ledger/kvledger/txmgmt/statedb/commontests/test_common.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,35 @@ import (
"github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version"
)

// TestGetStateMultipleKeys tests read for given multiple keys
func TestGetStateMultipleKeys(t *testing.T, dbProvider statedb.VersionedDBProvider) {
db, err := dbProvider.GetDBHandle("testgetmultiplekeys")
testutil.AssertNoError(t, err, "")

// Test that savepoint is nil for a new state db
sp, err := db.GetLatestSavePoint()
testutil.AssertNoError(t, err, "Error upon GetLatestSavePoint()")
testutil.AssertNil(t, sp)

batch := statedb.NewUpdateBatch()
expectedValues := make([]*statedb.VersionedValue, 2)
vv1 := statedb.VersionedValue{Value: []byte("value1"), Version: version.NewHeight(1, 1)}
expectedValues[0] = &vv1
vv2 := statedb.VersionedValue{Value: []byte("value2"), Version: version.NewHeight(1, 2)}
expectedValues[1] = &vv2
vv3 := statedb.VersionedValue{Value: []byte("value3"), Version: version.NewHeight(1, 3)}
vv4 := statedb.VersionedValue{Value: []byte{}, Version: version.NewHeight(1, 4)}
batch.Put("ns1", "key1", vv1.Value, vv1.Version)
batch.Put("ns1", "key2", vv2.Value, vv2.Version)
batch.Put("ns2", "key3", vv3.Value, vv3.Version)
batch.Put("ns2", "key4", vv4.Value, vv4.Version)
savePoint := version.NewHeight(2, 5)
db.ApplyUpdates(batch, savePoint)

actualValues, _ := db.GetStateMultipleKeys("ns1", []string{"key1", "key2"})
testutil.AssertEquals(t, actualValues, expectedValues)
}

// TestBasicRW tests basic read-write
func TestBasicRW(t *testing.T, dbProvider statedb.VersionedDBProvider) {
db, err := dbProvider.GetDBHandle("testbasicrw")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,3 +80,32 @@ func testCompositeKey(t *testing.T, dbName string, ns string, key string) {
testutil.AssertEquals(t, ns1, ns)
testutil.AssertEquals(t, key1, key)
}

// TestQueryOnLevelDB tests queries on levelDB.
func TestQueryOnLevelDB(t *testing.T) {
env := NewTestVDBEnv(t)
defer env.Cleanup()
db, err := env.DBProvider.GetDBHandle("testquery")
testutil.AssertNoError(t, err, "")
db.Open()
defer db.Close()
batch := statedb.NewUpdateBatch()
jsonValue1 := "{\"asset_name\": \"marble1\",\"color\": \"blue\",\"size\": 1,\"owner\": \"tom\"}"
batch.Put("ns1", "key1", []byte(jsonValue1), version.NewHeight(1, 1))

savePoint := version.NewHeight(2, 22)
db.ApplyUpdates(batch, savePoint)

// query for owner=jerry, use namespace "ns1"
// As queries are not supported in levelDB, call to ExecuteQuery()
// should return a error message
itr, err := db.ExecuteQuery("ns1", "{\"selector\":{\"owner\":\"jerry\"}}")
testutil.AssertError(t, err, "ExecuteQuery not supported for leveldb")
testutil.AssertNil(t, itr)
}

func TestGetStateMultipleKeys(t *testing.T) {
env := NewTestVDBEnv(t)
defer env.Cleanup()
commontests.TestGetStateMultipleKeys(t, env.DBProvider)
}

0 comments on commit 71a8897

Please sign in to comment.