github.com/osdi23p228/fabric@v0.0.0-20221218062954-77808885f5db/common/ledger/blkstorage/blockfile_scan_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package blkstorage 8 9 import ( 10 "os" 11 "testing" 12 13 "github.com/hyperledger/fabric-protos-go/common" 14 "github.com/osdi23p228/fabric/common/ledger/testutil" 15 "github.com/osdi23p228/fabric/common/ledger/util" 16 "github.com/stretchr/testify/require" 17 ) 18 19 func TestBlockFileScanSmallTxOnly(t *testing.T) { 20 env := newTestEnv(t, NewConf(testPath(), 0)) 21 defer env.Cleanup() 22 ledgerid := "testLedger" 23 blkfileMgrWrapper := newTestBlockfileWrapper(env, ledgerid) 24 bg, gb := testutil.NewBlockGenerator(t, ledgerid, false) 25 blocks := []*common.Block{gb} 26 blocks = append(blocks, bg.NextTestBlock(0, 0)) 27 blocks = append(blocks, bg.NextTestBlock(0, 0)) 28 blocks = append(blocks, bg.NextTestBlock(0, 0)) 29 blkfileMgrWrapper.addBlocks(blocks) 30 blkfileMgrWrapper.close() 31 32 filePath := deriveBlockfilePath(env.provider.conf.getLedgerBlockDir(ledgerid), 0) 33 _, fileSize, err := util.FileExists(filePath) 34 require.NoError(t, err) 35 36 lastBlockBytes, endOffsetLastBlock, numBlocks, err := scanForLastCompleteBlock(env.provider.conf.getLedgerBlockDir(ledgerid), 0, 0) 37 require.NoError(t, err) 38 require.Equal(t, len(blocks), numBlocks) 39 require.Equal(t, fileSize, endOffsetLastBlock) 40 41 expectedLastBlockBytes, _, err := serializeBlock(blocks[len(blocks)-1]) 42 require.NoError(t, err) 43 require.Equal(t, expectedLastBlockBytes, lastBlockBytes) 44 } 45 46 func TestBlockFileScanSmallTxLastTxIncomplete(t *testing.T) { 47 env := newTestEnv(t, NewConf(testPath(), 0)) 48 defer env.Cleanup() 49 ledgerid := "testLedger" 50 blkfileMgrWrapper := newTestBlockfileWrapper(env, ledgerid) 51 bg, gb := testutil.NewBlockGenerator(t, ledgerid, false) 52 blocks := []*common.Block{gb} 53 blocks = append(blocks, bg.NextTestBlock(0, 0)) 54 blocks = append(blocks, bg.NextTestBlock(0, 0)) 55 blocks = append(blocks, bg.NextTestBlock(0, 0)) 56 blkfileMgrWrapper.addBlocks(blocks) 57 blkfileMgrWrapper.close() 58 59 filePath := deriveBlockfilePath(env.provider.conf.getLedgerBlockDir(ledgerid), 0) 60 _, fileSize, err := util.FileExists(filePath) 61 require.NoError(t, err) 62 63 file, err := os.OpenFile(filePath, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0660) 64 require.NoError(t, err) 65 defer file.Close() 66 err = file.Truncate(fileSize - 1) 67 require.NoError(t, err) 68 69 lastBlockBytes, _, numBlocks, err := scanForLastCompleteBlock(env.provider.conf.getLedgerBlockDir(ledgerid), 0, 0) 70 require.NoError(t, err) 71 require.Equal(t, len(blocks)-1, numBlocks) 72 73 expectedLastBlockBytes, _, err := serializeBlock(blocks[len(blocks)-2]) 74 require.NoError(t, err) 75 require.Equal(t, expectedLastBlockBytes, lastBlockBytes) 76 }