77 lines
2.5 KiB
Go
77 lines
2.5 KiB
Go
/*
|
|
Copyright IBM Corp. All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package blkstorage
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/hyperledger/fabric-protos-go/common"
|
|
"github.com/hyperledger/fabric/common/ledger/testutil"
|
|
"github.com/hyperledger/fabric/internal/fileutil"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestBlockFileScanSmallTxOnly(t *testing.T) {
|
|
env := newTestEnv(t, NewConf(t.TempDir(), 0))
|
|
defer env.Cleanup()
|
|
ledgerid := "testLedger"
|
|
blkfileMgrWrapper := newTestBlockfileWrapper(env, ledgerid)
|
|
bg, gb := testutil.NewBlockGenerator(t, ledgerid, false)
|
|
blocks := []*common.Block{gb}
|
|
blocks = append(blocks, bg.NextTestBlock(0, 0))
|
|
blocks = append(blocks, bg.NextTestBlock(0, 0))
|
|
blocks = append(blocks, bg.NextTestBlock(0, 0))
|
|
blkfileMgrWrapper.addBlocks(blocks)
|
|
blkfileMgrWrapper.close()
|
|
|
|
filePath := deriveBlockfilePath(env.provider.conf.getLedgerBlockDir(ledgerid), 0)
|
|
_, fileSize, err := fileutil.FileExists(filePath)
|
|
require.NoError(t, err)
|
|
|
|
lastBlockBytes, endOffsetLastBlock, numBlocks, err := scanForLastCompleteBlock(env.provider.conf.getLedgerBlockDir(ledgerid), 0, 0)
|
|
require.NoError(t, err)
|
|
require.Equal(t, len(blocks), numBlocks)
|
|
require.Equal(t, fileSize, endOffsetLastBlock)
|
|
|
|
expectedLastBlockBytes, _, err := serializeBlock(blocks[len(blocks)-1])
|
|
require.NoError(t, err)
|
|
require.Equal(t, expectedLastBlockBytes, lastBlockBytes)
|
|
}
|
|
|
|
func TestBlockFileScanSmallTxLastTxIncomplete(t *testing.T) {
|
|
env := newTestEnv(t, NewConf(t.TempDir(), 0))
|
|
defer env.Cleanup()
|
|
ledgerid := "testLedger"
|
|
blkfileMgrWrapper := newTestBlockfileWrapper(env, ledgerid)
|
|
bg, gb := testutil.NewBlockGenerator(t, ledgerid, false)
|
|
blocks := []*common.Block{gb}
|
|
blocks = append(blocks, bg.NextTestBlock(0, 0))
|
|
blocks = append(blocks, bg.NextTestBlock(0, 0))
|
|
blocks = append(blocks, bg.NextTestBlock(0, 0))
|
|
blkfileMgrWrapper.addBlocks(blocks)
|
|
blkfileMgrWrapper.close()
|
|
|
|
filePath := deriveBlockfilePath(env.provider.conf.getLedgerBlockDir(ledgerid), 0)
|
|
_, fileSize, err := fileutil.FileExists(filePath)
|
|
require.NoError(t, err)
|
|
|
|
file, err := os.OpenFile(filePath, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0o660)
|
|
require.NoError(t, err)
|
|
defer file.Close()
|
|
err = file.Truncate(fileSize - 1)
|
|
require.NoError(t, err)
|
|
|
|
lastBlockBytes, _, numBlocks, err := scanForLastCompleteBlock(env.provider.conf.getLedgerBlockDir(ledgerid), 0, 0)
|
|
require.NoError(t, err)
|
|
require.Equal(t, len(blocks)-1, numBlocks)
|
|
|
|
expectedLastBlockBytes, _, err := serializeBlock(blocks[len(blocks)-2])
|
|
require.NoError(t, err)
|
|
require.Equal(t, expectedLastBlockBytes, lastBlockBytes)
|
|
}
|