github.com/osdi23p228/fabric@v0.0.0-20221218062954-77808885f5db/core/ledger/kvledger/history/pkg_test.go (about)

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