func TestDBStatsOversizedKV(t *testing.T) { dbTestWrapper := db.NewTestDBWrapper() dbTestWrapper.CleanDB(t) defer dbTestWrapper.CloseDB(t) defer deleteTestDBDir() openchainDB := db.GetDBHandle() writeBatch := gorocksdb.NewWriteBatch() writeBatch.PutCF(openchainDB.BlockchainCF, []byte("key1"), []byte("value1")) writeBatch.PutCF(openchainDB.BlockchainCF, []byte("key2"), generateOversizedValue(0)) writeBatch.PutCF(openchainDB.BlockchainCF, []byte("key3"), generateOversizedValue(100)) writeBatch.PutCF(openchainDB.BlockchainCF, []byte("key4"), []byte("value4")) dbTestWrapper.WriteToDB(t, writeBatch) totalKVs, numOverSizedKVs := scan(openchainDB, "blockchainCF", openchainDB.BlockchainCF, testDetailPrinter) if totalKVs != 4 { t.Fatalf("totalKVs is not correct. Expected [%d], found [%d]", 4, totalKVs) } if numOverSizedKVs != 2 { t.Fatalf("numOverSizedKVs is not correct. Expected [%d], found [%d]", 2, numOverSizedKVs) } if numOversizedKeyValues != 2 { t.Fatalf("numOversizedKeyValues is not correct. Expected [%d], found [%d]", 2, numOversizedKeyValues) } }
func InitSpec() *ledger.Ledger { if testDBWrapper == nil { testDBWrapper = db.NewTestDBWrapper() } testDBWrapper.CreateFreshDBGinkgo() ledgerPtr, err := ledger.GetNewLedger() if err != nil { Fail("failed to get a fresh ledger") } return ledgerPtr }
func populateDB(tb testing.TB, kvSize int, totalKeys int, keyPrefix string) { dbWrapper := db.NewTestDBWrapper() dbWrapper.CreateFreshDB(tb) batch := gorocksdb.NewWriteBatch() for i := 0; i < totalKeys; i++ { key := []byte(keyPrefix + strconv.Itoa(i)) value := testutil.ConstructRandomBytes(tb, kvSize-len(key)) batch.Put(key, value) if i%1000 == 0 { dbWrapper.WriteToDB(tb, batch) batch = gorocksdb.NewWriteBatch() } } dbWrapper.CloseDB(tb) }
func BenchmarkDB(b *testing.B) { b.Logf("testParams:%q", testParams) flags := flag.NewFlagSet("testParams", flag.ExitOnError) kvSize := flags.Int("KVSize", 1000, "size of the key-value") toPopulateDB := flags.Bool("PopulateDB", false, "Run in populate DB mode") maxKeySuffix := flags.Int("MaxKeySuffix", 1, "the keys are appended with _1, _2,.. upto MaxKeySuffix") keyPrefix := flags.String("KeyPrefix", "Key_", "The generated workload will have keys such as KeyPrefix_1, KeyPrefix_2, and so on") flags.Parse(testParams) if *toPopulateDB { b.ResetTimer() populateDB(b, *kvSize, *maxKeySuffix, *keyPrefix) return } dbWrapper := db.NewTestDBWrapper() randNumGen := testutil.NewTestRandomNumberGenerator(*maxKeySuffix) b.ResetTimer() for i := 0; i < b.N; i++ { key := []byte(*keyPrefix + strconv.Itoa(randNumGen.Next())) value := dbWrapper.GetFromDB(b, key) b.SetBytes(int64(len(value))) } }
limitations under the License. */ package state import ( "os" "testing" "github.com/hyperledger/fabric/core/db" "github.com/hyperledger/fabric/core/ledger/statemgmt" "github.com/hyperledger/fabric/core/ledger/testutil" "github.com/tecbot/gorocksdb" ) var testDBWrapper = db.NewTestDBWrapper() func TestMain(m *testing.M) { testutil.SetupTestConfig() os.Exit(m.Run()) } func createFreshDBAndConstructState(t *testing.T) (*stateTestWrapper, *State) { testDBWrapper.CreateFreshDB(t) stateTestWrapper := newStateTestWrapper(t) return stateTestWrapper, stateTestWrapper.state } type stateTestWrapper struct { t *testing.T state *State