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