github.com/yimialmonte/fabric@v2.1.1+incompatible/core/committer/committer_test.go (about)

     1  /*
     2  Copyright IBM Corp. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package committer
     8  
     9  import (
    10  	"testing"
    11  
    12  	"github.com/hyperledger/fabric-protos-go/common"
    13  	"github.com/hyperledger/fabric-protos-go/peer"
    14  	"github.com/hyperledger/fabric/common/configtx/test"
    15  	"github.com/hyperledger/fabric/common/ledger"
    16  	"github.com/hyperledger/fabric/common/ledger/testutil"
    17  	ledger2 "github.com/hyperledger/fabric/core/ledger"
    18  	"github.com/stretchr/testify/assert"
    19  	"github.com/stretchr/testify/mock"
    20  )
    21  
    22  type mockLedger struct {
    23  	height       uint64
    24  	currentHash  []byte
    25  	previousHash []byte
    26  	mock.Mock
    27  }
    28  
    29  func (m *mockLedger) GetConfigHistoryRetriever() (ledger2.ConfigHistoryRetriever, error) {
    30  	args := m.Called()
    31  	return args.Get(0).(ledger2.ConfigHistoryRetriever), args.Error(1)
    32  }
    33  
    34  func (m *mockLedger) GetBlockchainInfo() (*common.BlockchainInfo, error) {
    35  	info := &common.BlockchainInfo{
    36  		Height:            m.height,
    37  		CurrentBlockHash:  m.currentHash,
    38  		PreviousBlockHash: m.previousHash,
    39  	}
    40  	return info, nil
    41  }
    42  
    43  func (m *mockLedger) DoesPvtDataInfoExist(blkNum uint64) (bool, error) {
    44  	args := m.Called()
    45  	return args.Get(0).(bool), args.Error(1)
    46  }
    47  
    48  func (m *mockLedger) GetBlockByNumber(blockNumber uint64) (*common.Block, error) {
    49  	args := m.Called(blockNumber)
    50  	return args.Get(0).(*common.Block), args.Error(1)
    51  }
    52  
    53  func (m *mockLedger) GetBlocksIterator(startBlockNumber uint64) (ledger.ResultsIterator, error) {
    54  	args := m.Called(startBlockNumber)
    55  	return args.Get(0).(ledger.ResultsIterator), args.Error(1)
    56  }
    57  
    58  func (m *mockLedger) Close() {
    59  
    60  }
    61  
    62  func (m *mockLedger) GetTransactionByID(txID string) (*peer.ProcessedTransaction, error) {
    63  	args := m.Called(txID)
    64  	return args.Get(0).(*peer.ProcessedTransaction), args.Error(1)
    65  }
    66  
    67  func (m *mockLedger) GetBlockByHash(blockHash []byte) (*common.Block, error) {
    68  	args := m.Called(blockHash)
    69  	return args.Get(0).(*common.Block), args.Error(1)
    70  }
    71  
    72  func (m *mockLedger) GetBlockByTxID(txID string) (*common.Block, error) {
    73  	args := m.Called(txID)
    74  	return args.Get(0).(*common.Block), args.Error(1)
    75  }
    76  
    77  func (m *mockLedger) GetTxValidationCodeByTxID(txID string) (peer.TxValidationCode, error) {
    78  	args := m.Called(txID)
    79  	return args.Get(0).(peer.TxValidationCode), args.Error(1)
    80  }
    81  
    82  func (m *mockLedger) NewTxSimulator(txid string) (ledger2.TxSimulator, error) {
    83  	args := m.Called(txid)
    84  	return args.Get(0).(ledger2.TxSimulator), args.Error(1)
    85  }
    86  
    87  func (m *mockLedger) NewQueryExecutor() (ledger2.QueryExecutor, error) {
    88  	args := m.Called()
    89  	return args.Get(0).(ledger2.QueryExecutor), args.Error(1)
    90  }
    91  
    92  func (m *mockLedger) NewHistoryQueryExecutor() (ledger2.HistoryQueryExecutor, error) {
    93  	args := m.Called()
    94  	return args.Get(0).(ledger2.HistoryQueryExecutor), args.Error(1)
    95  }
    96  
    97  func (m *mockLedger) GetPvtDataAndBlockByNum(blockNum uint64, filter ledger2.PvtNsCollFilter) (*ledger2.BlockAndPvtData, error) {
    98  	args := m.Called(blockNum, filter)
    99  	return args.Get(0).(*ledger2.BlockAndPvtData), args.Error(1)
   100  }
   101  
   102  func (m *mockLedger) GetPvtDataByNum(blockNum uint64, filter ledger2.PvtNsCollFilter) ([]*ledger2.TxPvtData, error) {
   103  	args := m.Called(blockNum, filter)
   104  	return args.Get(0).([]*ledger2.TxPvtData), args.Error(1)
   105  }
   106  
   107  func (m *mockLedger) CommitLegacy(blockAndPvtdata *ledger2.BlockAndPvtData, commitOpts *ledger2.CommitOptions) error {
   108  	m.height += 1
   109  	m.previousHash = m.currentHash
   110  	m.currentHash = blockAndPvtdata.Block.Header.DataHash
   111  	args := m.Called(blockAndPvtdata)
   112  	return args.Error(0)
   113  }
   114  
   115  func (m *mockLedger) CommitPvtDataOfOldBlocks(reconciledPvtdata []*ledger2.ReconciledPvtdata) ([]*ledger2.PvtdataHashMismatch, error) {
   116  	panic("implement me")
   117  }
   118  
   119  func (m *mockLedger) GetMissingPvtDataTracker() (ledger2.MissingPvtDataTracker, error) {
   120  	panic("implement me")
   121  }
   122  
   123  func createLedger(channelID string) (*common.Block, *mockLedger) {
   124  	gb, _ := test.MakeGenesisBlock(channelID)
   125  	ledger := &mockLedger{
   126  		height:       1,
   127  		previousHash: []byte{},
   128  		currentHash:  gb.Header.DataHash,
   129  	}
   130  	return gb, ledger
   131  }
   132  
   133  func TestKVLedgerBlockStorage(t *testing.T) {
   134  	t.Parallel()
   135  	gb, ledger := createLedger("TestLedger")
   136  	block1 := testutil.ConstructBlock(t, 1, gb.Header.DataHash, [][]byte{{1, 2, 3, 4}, {5, 6, 7, 8}}, true)
   137  
   138  	ledger.On("CommitLegacy", mock.Anything).Run(func(args mock.Arguments) {
   139  		b := args.Get(0).(*ledger2.BlockAndPvtData)
   140  		assert.Equal(t, uint64(1), b.Block.Header.GetNumber())
   141  		assert.Equal(t, gb.Header.DataHash, b.Block.Header.PreviousHash)
   142  		assert.Equal(t, block1.Header.DataHash, b.Block.Header.DataHash)
   143  	}).Return(nil)
   144  
   145  	ledger.On("GetBlockByNumber", uint64(0)).Return(gb, nil)
   146  
   147  	committer := NewLedgerCommitter(ledger)
   148  	height, err := committer.LedgerHeight()
   149  	assert.Equal(t, uint64(1), height)
   150  	assert.NoError(t, err)
   151  
   152  	err = committer.CommitLegacy(&ledger2.BlockAndPvtData{Block: block1}, &ledger2.CommitOptions{})
   153  	assert.NoError(t, err)
   154  
   155  	height, err = committer.LedgerHeight()
   156  	assert.Equal(t, uint64(2), height)
   157  	assert.NoError(t, err)
   158  
   159  	blocks := committer.GetBlocks([]uint64{0})
   160  	assert.Equal(t, 1, len(blocks))
   161  	assert.NoError(t, err)
   162  }