Skip to content

Commit

Permalink
pvtstatepurgemgmt pkg -- consistently use testify/require (#1448)
Browse files Browse the repository at this point in the history
Signed-off-by: senthil <[email protected]>
  • Loading branch information
cendhu authored Jun 24, 2020
1 parent fe7fd6c commit def99d1
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 108 deletions.
121 changes: 60 additions & 61 deletions core/ledger/kvledger/txmgmt/privacyenabledstate/db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import (
"github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/stateleveldb"
"github.com/hyperledger/fabric/core/ledger/mock"
"github.com/hyperledger/fabric/core/ledger/util"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

Expand Down Expand Up @@ -115,41 +114,41 @@ func testDB(t *testing.T, env TestEnv) {
}

vv, err := db.GetState("ns1", "key1")
assert.NoError(t, err)
assert.Equal(t, &statedb.VersionedValue{Value: []byte("value1"), Version: version.NewHeight(1, 1)}, vv)
require.NoError(t, err)
require.Equal(t, &statedb.VersionedValue{Value: []byte("value1"), Version: version.NewHeight(1, 1)}, vv)

vv, err = db.GetPrivateData("ns1", "coll1", "key1")
assert.NoError(t, err)
assert.Equal(t, &statedb.VersionedValue{Value: []byte("pvt_value1"), Version: version.NewHeight(1, 4)}, vv)
require.NoError(t, err)
require.Equal(t, &statedb.VersionedValue{Value: []byte("pvt_value1"), Version: version.NewHeight(1, 4)}, vv)

vv, err = db.GetPrivateDataHash("ns1", "coll1", "key1")
assert.NoError(t, err)
assert.Equal(t, &statedb.VersionedValue{Value: util.ComputeStringHash("pvt_value1"), Version: version.NewHeight(1, 4)}, vv)
require.NoError(t, err)
require.Equal(t, &statedb.VersionedValue{Value: util.ComputeStringHash("pvt_value1"), Version: version.NewHeight(1, 4)}, vv)

vv, err = db.GetValueHash("ns1", "coll1", util.ComputeStringHash("key1"))
assert.NoError(t, err)
assert.Equal(t, &statedb.VersionedValue{Value: util.ComputeStringHash("pvt_value1"), Version: version.NewHeight(1, 4)}, vv)
require.NoError(t, err)
require.Equal(t, &statedb.VersionedValue{Value: util.ComputeStringHash("pvt_value1"), Version: version.NewHeight(1, 4)}, vv)

committedVersion, err := db.GetKeyHashVersion("ns1", "coll1", util.ComputeStringHash("key1"))
assert.NoError(t, err)
assert.Equal(t, version.NewHeight(1, 4), committedVersion)
require.NoError(t, err)
require.Equal(t, version.NewHeight(1, 4), committedVersion)

updates = NewUpdateBatch()
updates.PubUpdates.Delete("ns1", "key1", version.NewHeight(2, 7))
deletePvtUpdates(t, updates, "ns1", "coll1", "key1", version.NewHeight(2, 7))
db.ApplyPrivacyAwareUpdates(updates, version.NewHeight(2, 7))

vv, err = db.GetState("ns1", "key1")
assert.NoError(t, err)
assert.Nil(t, vv)
require.NoError(t, err)
require.Nil(t, vv)

vv, err = db.GetPrivateData("ns1", "coll1", "key1")
assert.NoError(t, err)
assert.Nil(t, vv)
require.NoError(t, err)
require.Nil(t, vv)

vv, err = db.GetValueHash("ns1", "coll1", util.ComputeStringHash("key1"))
assert.NoError(t, err)
assert.Nil(t, vv)
require.NoError(t, err)
require.Nil(t, vv)
}

func TestGetStateMultipleKeys(t *testing.T) {
Expand Down Expand Up @@ -177,17 +176,17 @@ func testGetStateMultipleKeys(t *testing.T, env TestEnv) {
db.ApplyPrivacyAwareUpdates(updates, version.NewHeight(2, 6))

versionedVals, err := db.GetStateMultipleKeys("ns1", []string{"key1", "key3"})
assert.NoError(t, err)
assert.Equal(t,
require.NoError(t, err)
require.Equal(t,
[]*statedb.VersionedValue{
{Value: []byte("value1"), Version: version.NewHeight(1, 1)},
{Value: []byte("value3"), Version: version.NewHeight(1, 3)},
},
versionedVals)

pvtVersionedVals, err := db.GetPrivateDataMultipleKeys("ns1", "coll1", []string{"key1", "key3"})
assert.NoError(t, err)
assert.Equal(t,
require.NoError(t, err)
require.Equal(t,
[]*statedb.VersionedValue{
{Value: []byte("pvt_value1"), Version: version.NewHeight(1, 4)},
{Value: []byte("pvt_value3"), Version: version.NewHeight(1, 6)},
Expand Down Expand Up @@ -294,42 +293,42 @@ func testQueryOnCouchDB(t *testing.T, env TestEnv) {

// query for owner=jerry, use namespace "ns1"
itr, err := db.ExecuteQuery("ns1", `{"selector":{"owner":"jerry"}}`)
assert.NoError(t, err)
require.NoError(t, err)
testQueryItr(t, itr, []string{testKey(1)}, []string{"jerry"})

// query for owner=jerry, use namespace "ns2"
itr, err = db.ExecuteQuery("ns2", `{"selector":{"owner":"jerry"}}`)
assert.NoError(t, err)
require.NoError(t, err)
testQueryItr(t, itr, []string{testKey(1)}, []string{"jerry"})

// query for pvt data owner=jerry, use namespace "ns1"
itr, err = db.ExecuteQueryOnPrivateData("ns1", "coll1", `{"selector":{"owner":"jerry"}}`)
assert.NoError(t, err)
require.NoError(t, err)
testQueryItr(t, itr, []string{testKey(1)}, []string{"jerry"})

// query for pvt data owner=jerry, use namespace "ns2"
itr, err = db.ExecuteQueryOnPrivateData("ns2", "coll1", `{"selector":{"owner":"jerry"}}`)
assert.NoError(t, err)
require.NoError(t, err)
testQueryItr(t, itr, []string{testKey(1)}, []string{"jerry"})

// query using bad query string
_, err = db.ExecuteQueryOnPrivateData("ns1", "coll1", "this is an invalid query string")
assert.Error(t, err, "Should have received an error for invalid query string")
require.Error(t, err, "Should have received an error for invalid query string")

// query returns 0 records
itr, err = db.ExecuteQueryOnPrivateData("ns1", "coll1", `{"selector":{"owner":"not_a_valid_name"}}`)
assert.NoError(t, err)
require.NoError(t, err)
testQueryItr(t, itr, []string{}, []string{})

// query with embedded implicit "AND" and explicit "OR", namespace "ns1"
itr, err = db.ExecuteQueryOnPrivateData("ns1", "coll1", `{"selector":{"color":"green","$or":[{"owner":"fred"},{"owner":"mary"}]}}`)
assert.NoError(t, err)
require.NoError(t, err)
testQueryItr(t, itr, []string{testKey(8), testKey(9)}, []string{"green"}, []string{"green"})

// query with integer with digit-count equals 7 and response received is also received
// with same digit-count and there is no float transformation
itr, err = db.ExecuteQueryOnPrivateData("ns2", "coll1", `{"selector":{"$and":[{"size":{"$eq": 1000007}}]}}`)
assert.NoError(t, err)
require.NoError(t, err)
testQueryItr(t, itr, []string{testKey(10)}, []string{"joe", "1000007"})
}

Expand Down Expand Up @@ -366,12 +365,12 @@ func testLongDBNameOnCouchDB(t *testing.T, env TestEnv) {
db.ApplyPrivacyAwareUpdates(updates, version.NewHeight(2, 6))

vv, err := db.GetState(ns, "key1")
assert.NoError(t, err)
assert.Equal(t, &statedb.VersionedValue{Value: []byte("value1"), Version: version.NewHeight(1, 1)}, vv)
require.NoError(t, err)
require.Equal(t, &statedb.VersionedValue{Value: []byte("value1"), Version: version.NewHeight(1, 1)}, vv)

vv, err = db.GetPrivateData(ns, coll, "key1")
assert.NoError(t, err)
assert.Equal(t, &statedb.VersionedValue{Value: []byte("pvt_value"), Version: version.NewHeight(1, 2)}, vv)
require.NoError(t, err)
require.Equal(t, &statedb.VersionedValue{Value: []byte("pvt_value"), Version: version.NewHeight(1, 2)}, vv)
}

func testItr(t *testing.T, itr statedb.ResultsIterator, expectedKeys []string) {
Expand All @@ -380,11 +379,11 @@ func testItr(t *testing.T, itr statedb.ResultsIterator, expectedKeys []string) {
queryResult, _ := itr.Next()
vkv := queryResult.(*statedb.VersionedKV)
key := vkv.Key
assert.Equal(t, expectedKey, key)
require.Equal(t, expectedKey, key)
}
last, err := itr.Next()
assert.NoError(t, err)
assert.Nil(t, last)
require.NoError(t, err)
require.Nil(t, last)
}

func testQueryItr(t *testing.T, itr statedb.ResultsIterator, expectedKeys []string, expectedValStrs ...[]string) {
Expand All @@ -394,14 +393,14 @@ func testQueryItr(t *testing.T, itr statedb.ResultsIterator, expectedKeys []stri
vkv := queryResult.(*statedb.VersionedKV)
key := vkv.Key
valStr := string(vkv.Value)
assert.Equal(t, expectedKey, key)
require.Equal(t, expectedKey, key)
for _, expectedValStr := range expectedValStrs[i] {
assert.Contains(t, valStr, expectedValStr)
require.Contains(t, valStr, expectedValStr)
}
}
last, err := itr.Next()
assert.NoError(t, err)
assert.Nil(t, last)
require.NoError(t, err)
require.Nil(t, last)
}

func testKey(i int) string {
Expand Down Expand Up @@ -455,26 +454,26 @@ func testHandleChainCodeDeploy(t *testing.T, env TestEnv) {

// Test the retrieveIndexArtifacts method
fileEntries, err := ccprovider.ExtractFileEntries(dbArtifactsTarBytes, "couchdb")
assert.NoError(t, err)
require.NoError(t, err)

// There should be 3 entries
assert.Len(t, fileEntries, 3)
require.Len(t, fileEntries, 3)

// There should be 2 entries for main
assert.Len(t, fileEntries["META-INF/statedb/couchdb/indexes"], 2)
require.Len(t, fileEntries["META-INF/statedb/couchdb/indexes"], 2)

// There should be 1 entry for collectionMarbles
assert.Len(t, fileEntries["META-INF/statedb/couchdb/collections/collectionMarbles/indexes"], 1)
require.Len(t, fileEntries["META-INF/statedb/couchdb/collections/collectionMarbles/indexes"], 1)

// Verify the content of the array item
expectedJSON := []byte(`{"index":{"fields":["docType","owner"]},"ddoc":"indexCollectionMarbles", "name":"indexCollectionMarbles","type":"json"}`)
actualJSON := fileEntries["META-INF/statedb/couchdb/collections/collectionMarbles/indexes"][0].FileContent
assert.Equal(t, expectedJSON, actualJSON)
require.Equal(t, expectedJSON, actualJSON)

// The collection config is added to the chaincodeDef but missing collectionMarblesPrivateDetails.
// Hence, the index on collectionMarblesPrivateDetails cannot be created
err = db.HandleChaincodeDeploy(chaincodeDef, dbArtifactsTarBytes)
assert.NoError(t, err)
require.NoError(t, err)

coll2 := createCollectionConfig("collectionMarblesPrivateDetails")
ccp = &peer.CollectionConfigPackage{Config: []*peer.CollectionConfig{coll1, coll2}}
Expand All @@ -485,7 +484,7 @@ func testHandleChainCodeDeploy(t *testing.T, env TestEnv) {
// Hence, the existing indexes must be updated and the new index must be created for
// collectionMarblesPrivateDetails
err = db.HandleChaincodeDeploy(chaincodeDef, dbArtifactsTarBytes)
assert.NoError(t, err)
require.NoError(t, err)

chaincodeDef = &cceventmgmt.ChaincodeDefinition{Name: "ns1", Hash: nil, Version: "", CollectionConfigs: nil}

Expand All @@ -494,19 +493,19 @@ func testHandleChainCodeDeploy(t *testing.T, env TestEnv) {
// any collection config for this chaincode. Hence, index creation/update on all collections
// should fail
err = db.HandleChaincodeDeploy(chaincodeDef, dbArtifactsTarBytes)
assert.NoError(t, err)
require.NoError(t, err)

//Test HandleChaincodeDefinition with a nil tar file
err = db.HandleChaincodeDeploy(chaincodeDef, nil)
assert.NoError(t, err)
require.NoError(t, err)

//Test HandleChaincodeDefinition with a bad tar file
err = db.HandleChaincodeDeploy(chaincodeDef, []byte(`This is a really bad tar file`))
assert.NoError(t, err, "Error should not have been thrown for a bad tar file")
require.NoError(t, err, "Error should not have been thrown for a bad tar file")

//Test HandleChaincodeDefinition with a nil chaincodeDef
err = db.HandleChaincodeDeploy(nil, dbArtifactsTarBytes)
assert.Error(t, err, "Error should have been thrown for a nil chaincodeDefinition")
require.Error(t, err, "Error should have been thrown for a nil chaincodeDefinition")

// Create a tar file for test with 2 index definitions - one of them being errorneous
badSyntaxFileContent := `{"index":{"fields": This is a bad json}`
Expand All @@ -519,13 +518,13 @@ func testHandleChainCodeDeploy(t *testing.T, env TestEnv) {

// Test the retrieveIndexArtifacts method
fileEntries, err = ccprovider.ExtractFileEntries(dbArtifactsTarBytes, "couchdb")
assert.NoError(t, err)
require.NoError(t, err)

// There should be 1 entry
assert.Len(t, fileEntries, 1)
require.Len(t, fileEntries, 1)

err = db.HandleChaincodeDeploy(chaincodeDef, dbArtifactsTarBytes)
assert.NoError(t, err)
require.NoError(t, err)

}

Expand Down Expand Up @@ -553,18 +552,18 @@ func testMetadataRetrieval(t *testing.T, env TestEnv) {
db.ApplyPrivacyAwareUpdates(updates, version.NewHeight(2, 6))

vm, _ := db.GetStateMetadata("ns1", "key1")
assert.Equal(t, vm, []byte("metadata1"))
require.Equal(t, vm, []byte("metadata1"))
vm, _ = db.GetStateMetadata("ns1", "key2")
assert.Nil(t, vm)
require.Nil(t, vm)
vm, _ = db.GetStateMetadata("ns2", "key3")
assert.Nil(t, vm)
require.Nil(t, vm)

vm, _ = db.GetPrivateDataMetadataByHash("ns1", "coll1", util.ComputeStringHash("key1"))
assert.Equal(t, vm, []byte("metadata1"))
require.Equal(t, vm, []byte("metadata1"))
vm, _ = db.GetPrivateDataMetadataByHash("ns1", "coll1", util.ComputeStringHash("key2"))
assert.Nil(t, vm)
require.Nil(t, vm)
vm, _ = db.GetPrivateDataMetadataByHash("ns2", "coll1", util.ComputeStringHash("key3"))
assert.Nil(t, vm)
require.Nil(t, vm)
}

func putPvtUpdates(t *testing.T, updates *UpdateBatch, ns, coll, key string, value []byte, ver *version.Height) {
Expand All @@ -585,7 +584,7 @@ func deletePvtUpdates(t *testing.T, updates *UpdateBatch, ns, coll, key string,
func generateLedgerID(t *testing.T) string {
bytes := make([]byte, 8)
_, err := io.ReadFull(rand.Reader, bytes)
assert.NoError(t, err)
require.NoError(t, err)
return fmt.Sprintf("x%s", hex.EncodeToString(bytes))
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (
"github.com/hyperledger/fabric/core/ledger/internal/version"
"github.com/hyperledger/fabric/core/ledger/kvledger/bookkeeping"
"github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/mock"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func TestMetadataHintCorrectness(t *testing.T) {
Expand All @@ -21,7 +21,7 @@ func TestMetadataHintCorrectness(t *testing.T) {
bookkeeper := bookkeepingTestEnv.TestProvider.GetDBHandle("ledger1", bookkeeping.MetadataPresenceIndicator)

metadataHint := newMetadataHint(bookkeeper)
assert.False(t, metadataHint.metadataEverUsedFor("ns1"))
require.False(t, metadataHint.metadataEverUsedFor("ns1"))

updates := NewUpdateBatch()
updates.PubUpdates.PutValAndMetadata("ns1", "key", []byte("value"), []byte("metadata"), version.NewHeight(1, 1))
Expand All @@ -33,22 +33,22 @@ func TestMetadataHintCorrectness(t *testing.T) {
metadataHint.setMetadataUsedFlag(updates)

t.Run("MetadataAddedInCurrentSession", func(t *testing.T) {
assert.True(t, metadataHint.metadataEverUsedFor("ns1"))
assert.True(t, metadataHint.metadataEverUsedFor("ns2"))
assert.True(t, metadataHint.metadataEverUsedFor("ns1_pvt"))
assert.True(t, metadataHint.metadataEverUsedFor("ns2_pvt"))
assert.False(t, metadataHint.metadataEverUsedFor("ns3"))
assert.False(t, metadataHint.metadataEverUsedFor("ns4"))
require.True(t, metadataHint.metadataEverUsedFor("ns1"))
require.True(t, metadataHint.metadataEverUsedFor("ns2"))
require.True(t, metadataHint.metadataEverUsedFor("ns1_pvt"))
require.True(t, metadataHint.metadataEverUsedFor("ns2_pvt"))
require.False(t, metadataHint.metadataEverUsedFor("ns3"))
require.False(t, metadataHint.metadataEverUsedFor("ns4"))
})

t.Run("MetadataFromPersistence", func(t *testing.T) {
metadataHintFromPersistence := newMetadataHint(bookkeeper)
assert.True(t, metadataHintFromPersistence.metadataEverUsedFor("ns1"))
assert.True(t, metadataHintFromPersistence.metadataEverUsedFor("ns2"))
assert.True(t, metadataHintFromPersistence.metadataEverUsedFor("ns1_pvt"))
assert.True(t, metadataHintFromPersistence.metadataEverUsedFor("ns2_pvt"))
assert.False(t, metadataHintFromPersistence.metadataEverUsedFor("ns3"))
assert.False(t, metadataHintFromPersistence.metadataEverUsedFor("ns4"))
require.True(t, metadataHintFromPersistence.metadataEverUsedFor("ns1"))
require.True(t, metadataHintFromPersistence.metadataEverUsedFor("ns2"))
require.True(t, metadataHintFromPersistence.metadataEverUsedFor("ns1_pvt"))
require.True(t, metadataHintFromPersistence.metadataEverUsedFor("ns2_pvt"))
require.False(t, metadataHintFromPersistence.metadataEverUsedFor("ns3"))
require.False(t, metadataHintFromPersistence.metadataEverUsedFor("ns4"))
})
}

Expand All @@ -59,22 +59,22 @@ func TestMetadataHintOptimizationSkippingGoingToDB(t *testing.T) {

mockVersionedDB := &mock.VersionedDB{}
db, err := NewDB(mockVersionedDB, "testledger", newMetadataHint(bookkeeper))
assert.NoError(t, err)
require.NoError(t, err)
updates := NewUpdateBatch()
updates.PubUpdates.PutValAndMetadata("ns1", "key", []byte("value"), []byte("metadata"), version.NewHeight(1, 1))
updates.PubUpdates.PutValAndMetadata("ns2", "key", []byte("value"), nil, version.NewHeight(1, 2))
db.ApplyPrivacyAwareUpdates(updates, version.NewHeight(1, 3))

db.GetStateMetadata("ns1", "randomkey")
assert.Equal(t, 1, mockVersionedDB.GetStateCallCount())
require.Equal(t, 1, mockVersionedDB.GetStateCallCount())
db.GetPrivateDataMetadataByHash("ns1", "randomColl", []byte("randomKeyhash"))
assert.Equal(t, 2, mockVersionedDB.GetStateCallCount())
require.Equal(t, 2, mockVersionedDB.GetStateCallCount())

db.GetStateMetadata("ns2", "randomkey")
db.GetPrivateDataMetadataByHash("ns2", "randomColl", []byte("randomKeyhash"))
assert.Equal(t, 2, mockVersionedDB.GetStateCallCount())
require.Equal(t, 2, mockVersionedDB.GetStateCallCount())

db.GetStateMetadata("randomeNs", "randomkey")
db.GetPrivateDataMetadataByHash("randomeNs", "randomColl", []byte("randomKeyhash"))
assert.Equal(t, 2, mockVersionedDB.GetStateCallCount())
require.Equal(t, 2, mockVersionedDB.GetStateCallCount())
}
Loading

0 comments on commit def99d1

Please sign in to comment.