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