github.com/ewagmig/fabric@v2.1.1+incompatible/core/ledger/kvledger/txmgmt/statedb/stateleveldb/stateleveldb_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package stateleveldb 8 9 import ( 10 "testing" 11 12 "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb" 13 "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/commontests" 14 "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" 15 "github.com/stretchr/testify/assert" 16 ) 17 18 func TestBasicRW(t *testing.T) { 19 env := NewTestVDBEnv(t) 20 defer env.Cleanup() 21 commontests.TestBasicRW(t, env.DBProvider) 22 } 23 24 func TestMultiDBBasicRW(t *testing.T) { 25 env := NewTestVDBEnv(t) 26 defer env.Cleanup() 27 commontests.TestMultiDBBasicRW(t, env.DBProvider) 28 } 29 30 func TestDeletes(t *testing.T) { 31 env := NewTestVDBEnv(t) 32 defer env.Cleanup() 33 commontests.TestDeletes(t, env.DBProvider) 34 } 35 36 func TestIterator(t *testing.T) { 37 env := NewTestVDBEnv(t) 38 defer env.Cleanup() 39 commontests.TestIterator(t, env.DBProvider) 40 } 41 42 func TestDataKeyEncoding(t *testing.T) { 43 testDataKeyEncoding(t, "ledger1", "ns", "key") 44 testDataKeyEncoding(t, "ledger2", "ns", "") 45 } 46 47 func testDataKeyEncoding(t *testing.T, dbName string, ns string, key string) { 48 dataKey := encodeDataKey(ns, key) 49 t.Logf("dataKey=%#v", dataKey) 50 ns1, key1 := decodeDataKey(dataKey) 51 assert.Equal(t, ns, ns1) 52 assert.Equal(t, key, key1) 53 } 54 55 // TestQueryOnLevelDB tests queries on levelDB. 56 func TestQueryOnLevelDB(t *testing.T) { 57 env := NewTestVDBEnv(t) 58 defer env.Cleanup() 59 db, err := env.DBProvider.GetDBHandle("testquery") 60 assert.NoError(t, err) 61 db.Open() 62 defer db.Close() 63 batch := statedb.NewUpdateBatch() 64 jsonValue1 := `{"asset_name": "marble1","color": "blue","size": 1,"owner": "tom"}` 65 batch.Put("ns1", "key1", []byte(jsonValue1), version.NewHeight(1, 1)) 66 67 savePoint := version.NewHeight(2, 22) 68 db.ApplyUpdates(batch, savePoint) 69 70 // query for owner=jerry, use namespace "ns1" 71 // As queries are not supported in levelDB, call to ExecuteQuery() 72 // should return a error message 73 itr, err := db.ExecuteQuery("ns1", `{"selector":{"owner":"jerry"}}`) 74 assert.Error(t, err, "ExecuteQuery not supported for leveldb") 75 assert.Nil(t, itr) 76 } 77 78 func TestGetStateMultipleKeys(t *testing.T) { 79 env := NewTestVDBEnv(t) 80 defer env.Cleanup() 81 commontests.TestGetStateMultipleKeys(t, env.DBProvider) 82 } 83 84 func TestGetVersion(t *testing.T) { 85 env := NewTestVDBEnv(t) 86 defer env.Cleanup() 87 commontests.TestGetVersion(t, env.DBProvider) 88 } 89 90 func TestUtilityFunctions(t *testing.T) { 91 env := NewTestVDBEnv(t) 92 defer env.Cleanup() 93 94 db, err := env.DBProvider.GetDBHandle("testutilityfunctions") 95 assert.NoError(t, err) 96 97 // BytesKeySupported should be true for goleveldb 98 byteKeySupported := db.BytesKeySupported() 99 assert.True(t, byteKeySupported) 100 101 // ValidateKeyValue should return nil for a valid key and value 102 assert.NoError(t, db.ValidateKeyValue("testKey", []byte("testValue")), "leveldb should accept all key-values") 103 } 104 105 func TestValueAndMetadataWrites(t *testing.T) { 106 env := NewTestVDBEnv(t) 107 defer env.Cleanup() 108 commontests.TestValueAndMetadataWrites(t, env.DBProvider) 109 } 110 111 func TestPaginatedRangeQuery(t *testing.T) { 112 env := NewTestVDBEnv(t) 113 defer env.Cleanup() 114 commontests.TestPaginatedRangeQuery(t, env.DBProvider) 115 } 116 117 func TestRangeQuerySpecialCharacters(t *testing.T) { 118 env := NewTestVDBEnv(t) 119 defer env.Cleanup() 120 commontests.TestRangeQuerySpecialCharacters(t, env.DBProvider) 121 } 122 123 func TestApplyUpdatesWithNilHeight(t *testing.T) { 124 env := NewTestVDBEnv(t) 125 defer env.Cleanup() 126 commontests.TestApplyUpdatesWithNilHeight(t, env.DBProvider) 127 }