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  }