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  }