github.com/tenywen/fabric@v1.0.0-beta.0.20170620030522-a5b1ed380643/core/ledger/kvledger/history/historydb/historyleveldb/pkg_test.go (about) 1 /* 2 Copyright IBM Corp. 2016 All Rights Reserved. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package historyleveldb 18 19 import ( 20 "io/ioutil" 21 "os" 22 "testing" 23 24 "github.com/hyperledger/fabric/common/ledger/blkstorage" 25 "github.com/hyperledger/fabric/common/ledger/blkstorage/fsblkstorage" 26 "github.com/hyperledger/fabric/common/ledger/testutil" 27 "github.com/hyperledger/fabric/core/ledger/kvledger/history/historydb" 28 "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/stateleveldb" 29 "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/txmgr" 30 "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr" 31 "github.com/hyperledger/fabric/core/ledger/ledgerconfig" 32 "github.com/spf13/viper" 33 ) 34 35 /////// levelDBLockBasedHistoryEnv ////// 36 37 type levelDBLockBasedHistoryEnv struct { 38 t testing.TB 39 testBlockStorageEnv *testBlockStoreEnv 40 testDBEnv *stateleveldb.TestVDBEnv 41 txmgr txmgr.TxMgr 42 testHistoryDBProvider historydb.HistoryDBProvider 43 testHistoryDB historydb.HistoryDB 44 } 45 46 func NewTestHistoryEnv(t *testing.T) *levelDBLockBasedHistoryEnv { 47 48 viper.Set("ledger.history.enableHistoryDatabase", "true") 49 50 blockStorageTestEnv := newBlockStorageTestEnv(t) 51 52 testDBEnv := stateleveldb.NewTestVDBEnv(t) 53 testDB, err := testDBEnv.DBProvider.GetDBHandle("TestDB") 54 testutil.AssertNoError(t, err, "") 55 56 txMgr := lockbasedtxmgr.NewLockBasedTxMgr(testDB) 57 58 testHistoryDBProvider := NewHistoryDBProvider() 59 testHistoryDB, err := testHistoryDBProvider.GetDBHandle("TestHistoryDB") 60 testutil.AssertNoError(t, err, "") 61 62 return &levelDBLockBasedHistoryEnv{t, blockStorageTestEnv, testDBEnv, txMgr, testHistoryDBProvider, testHistoryDB} 63 } 64 65 func (env *levelDBLockBasedHistoryEnv) cleanup() { 66 defer env.txmgr.Shutdown() 67 defer env.testDBEnv.Cleanup() 68 defer env.testBlockStorageEnv.cleanup() 69 70 // clean up history 71 env.testHistoryDBProvider.Close() 72 removeDBPath(env.t, "Cleanup") 73 } 74 75 func removeDBPath(t testing.TB, caller string) { 76 dbPath := ledgerconfig.GetHistoryLevelDBPath() 77 if err := os.RemoveAll(dbPath); err != nil { 78 t.Fatalf("Err: %s", err) 79 t.FailNow() 80 } 81 logger.Debugf("Removed folder [%s] for history test environment for %s", dbPath, caller) 82 } 83 84 /////// testBlockStoreEnv////// 85 86 type testBlockStoreEnv struct { 87 t testing.TB 88 provider *fsblkstorage.FsBlockstoreProvider 89 blockStorageDir string 90 } 91 92 func newBlockStorageTestEnv(t testing.TB) *testBlockStoreEnv { 93 94 testPath, err := ioutil.TempDir("", "historyleveldb-") 95 if err != nil { 96 panic(err) 97 } 98 conf := fsblkstorage.NewConf(testPath, 0) 99 100 attrsToIndex := []blkstorage.IndexableAttr{ 101 blkstorage.IndexableAttrBlockHash, 102 blkstorage.IndexableAttrBlockNum, 103 blkstorage.IndexableAttrTxID, 104 blkstorage.IndexableAttrBlockNumTranNum, 105 } 106 indexConfig := &blkstorage.IndexConfig{AttrsToIndex: attrsToIndex} 107 108 blockStorageProvider := fsblkstorage.NewProvider(conf, indexConfig).(*fsblkstorage.FsBlockstoreProvider) 109 110 return &testBlockStoreEnv{t, blockStorageProvider, testPath} 111 } 112 113 func (env *testBlockStoreEnv) cleanup() { 114 env.provider.Close() 115 env.removeFSPath() 116 } 117 118 func (env *testBlockStoreEnv) removeFSPath() { 119 fsPath := env.blockStorageDir 120 os.RemoveAll(fsPath) 121 }