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  }