github.com/osdi23p228/fabric@v0.0.0-20221218062954-77808885f5db/core/ledger/kvledger/history/pkg_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package history 8 9 import ( 10 "crypto/sha256" 11 "io/ioutil" 12 "os" 13 "testing" 14 15 "github.com/osdi23p228/fabric/common/ledger/blkstorage" 16 "github.com/osdi23p228/fabric/common/metrics/disabled" 17 "github.com/osdi23p228/fabric/core/ledger/kvledger/bookkeeping" 18 "github.com/osdi23p228/fabric/core/ledger/kvledger/txmgmt/privacyenabledstate" 19 "github.com/osdi23p228/fabric/core/ledger/kvledger/txmgmt/txmgr" 20 "github.com/osdi23p228/fabric/core/ledger/mock" 21 "github.com/stretchr/testify/assert" 22 ) 23 24 var ( 25 testHashFunc = func(data []byte) ([]byte, error) { 26 h := sha256.New() 27 if _, err := h.Write(data); err != nil { 28 return nil, err 29 } 30 return h.Sum(nil), nil 31 } 32 ) 33 34 type levelDBLockBasedHistoryEnv struct { 35 t testing.TB 36 testBlockStorageEnv *testBlockStoreEnv 37 testDBEnv privacyenabledstate.TestEnv 38 testBookkeepingEnv *bookkeeping.TestEnv 39 txmgr *txmgr.LockBasedTxMgr 40 testHistoryDBProvider *DBProvider 41 testHistoryDB *DB 42 testHistoryDBPath string 43 } 44 45 func newTestHistoryEnv(t *testing.T) *levelDBLockBasedHistoryEnv { 46 testLedgerID := "TestLedger" 47 48 blockStorageTestEnv := newBlockStorageTestEnv(t) 49 50 testDBEnv := &privacyenabledstate.LevelDBTestEnv{} 51 testDBEnv.Init(t) 52 testDB := testDBEnv.GetDBHandle(testLedgerID) 53 testBookkeepingEnv := bookkeeping.NewTestEnv(t) 54 55 testHistoryDBPath, err := ioutil.TempDir("", "historyldb") 56 if err != nil { 57 t.Fatalf("Failed to create history database directory: %s", err) 58 } 59 60 txmgrInitializer := &txmgr.Initializer{ 61 LedgerID: testLedgerID, 62 DB: testDB, 63 StateListeners: nil, 64 BtlPolicy: nil, 65 BookkeepingProvider: testBookkeepingEnv.TestProvider, 66 CCInfoProvider: &mock.DeployedChaincodeInfoProvider{}, 67 CustomTxProcessors: nil, 68 HashFunc: testHashFunc, 69 } 70 txMgr, err := txmgr.NewLockBasedTxMgr(txmgrInitializer) 71 72 assert.NoError(t, err) 73 testHistoryDBProvider, err := NewDBProvider(testHistoryDBPath) 74 assert.NoError(t, err) 75 testHistoryDB, err := testHistoryDBProvider.GetDBHandle("TestHistoryDB") 76 assert.NoError(t, err) 77 78 return &levelDBLockBasedHistoryEnv{ 79 t, 80 blockStorageTestEnv, 81 testDBEnv, 82 testBookkeepingEnv, 83 txMgr, 84 testHistoryDBProvider, 85 testHistoryDB, 86 testHistoryDBPath, 87 } 88 } 89 90 func (env *levelDBLockBasedHistoryEnv) cleanup() { 91 env.txmgr.Shutdown() 92 env.testDBEnv.Cleanup() 93 env.testBlockStorageEnv.cleanup() 94 env.testBookkeepingEnv.Cleanup() 95 // clean up history 96 env.testHistoryDBProvider.Close() 97 os.RemoveAll(env.testHistoryDBPath) 98 } 99 100 /////// testBlockStoreEnv////// 101 102 type testBlockStoreEnv struct { 103 t testing.TB 104 provider *blkstorage.BlockStoreProvider 105 blockStorageDir string 106 } 107 108 func newBlockStorageTestEnv(t testing.TB) *testBlockStoreEnv { 109 110 testPath, err := ioutil.TempDir("", "historyleveldb-") 111 if err != nil { 112 panic(err) 113 } 114 conf := blkstorage.NewConf(testPath, 0) 115 116 attrsToIndex := []blkstorage.IndexableAttr{ 117 blkstorage.IndexableAttrBlockHash, 118 blkstorage.IndexableAttrBlockNum, 119 blkstorage.IndexableAttrTxID, 120 blkstorage.IndexableAttrBlockNumTranNum, 121 } 122 indexConfig := &blkstorage.IndexConfig{AttrsToIndex: attrsToIndex} 123 124 p, err := blkstorage.NewProvider(conf, indexConfig, &disabled.Provider{}) 125 assert.NoError(t, err) 126 return &testBlockStoreEnv{t, p, testPath} 127 } 128 129 func (env *testBlockStoreEnv) cleanup() { 130 env.provider.Close() 131 env.removeFSPath() 132 } 133 134 func (env *testBlockStoreEnv) removeFSPath() { 135 fsPath := env.blockStorageDir 136 os.RemoveAll(fsPath) 137 }