fix: check if piece is wanted upon receiving block (#7866)

* fix: check if piece is wanted upon receiving block

* test: block_last_loc
This commit is contained in:
Yat Ho
2025-12-09 05:43:56 +08:00
committed by GitHub
parent 33d6804a76
commit 095bad6568
5 changed files with 59 additions and 6 deletions

View File

@@ -136,6 +136,41 @@ TEST_F(BlockInfoTest, blockLoc)
EXPECT_EQ(0U, loc.piece_offset);
}
TEST_F(BlockInfoTest, blockLastLoc)
{
static auto constexpr ExpectedBlockSize = uint64_t{ 1024U } * 16U;
static auto constexpr ExpectedBlocksPerPiece = uint64_t{ 4U };
static auto constexpr PieceSize = ExpectedBlockSize * ExpectedBlocksPerPiece;
static auto constexpr PieceCount = uint64_t{ 5U };
static auto constexpr TotalSize = (PieceSize * (PieceCount - 1U)) + 1U;
auto const info = tr_block_info{ TotalSize, PieceSize };
// begin
auto loc = info.block_last_loc(0);
EXPECT_EQ(ExpectedBlockSize - 1U, loc.byte);
EXPECT_EQ(0U, loc.block);
EXPECT_EQ(ExpectedBlockSize - 1U, loc.block_offset);
EXPECT_EQ(0U, loc.piece);
EXPECT_EQ(ExpectedBlockSize - 1U, loc.piece_offset);
// third block is halfway through the first piece
loc = info.block_last_loc(2);
EXPECT_EQ((ExpectedBlockSize * 3U) - 1U, loc.byte);
EXPECT_EQ(2U, loc.block);
EXPECT_EQ(ExpectedBlockSize - 1U, loc.block_offset);
EXPECT_EQ(0U, loc.piece);
EXPECT_EQ((ExpectedBlockSize * 3U) - 1U, loc.piece_offset);
// second piece aligns with fifth block
loc = info.block_last_loc(4);
EXPECT_EQ(PieceSize + ExpectedBlockSize - 1U, loc.byte);
EXPECT_EQ(4U, loc.block);
EXPECT_EQ(ExpectedBlockSize - 1U, loc.block_offset);
EXPECT_EQ(1U, loc.piece);
EXPECT_EQ(ExpectedBlockSize - 1U, loc.piece_offset);
}
TEST_F(BlockInfoTest, pieceLoc)
{
static auto constexpr ExpectedBlockSize = uint64_t{ 1024U } * 16U;