]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- |
2 | // vim: ts=8 sw=2 smarttab | |
3 | #include "gtest/gtest.h" | |
4 | ||
5 | #include "rgw/rgw_compression.h" | |
6 | ||
7 | struct MockGetDataCB : public RGWGetDataCB { | |
8 | int handle_data(bufferlist& bl, off_t bl_ofs, off_t bl_len) override { | |
9 | return 0; | |
10 | } | |
11 | } cb; | |
12 | ||
13 | using range_t = std::pair<off_t, off_t>; | |
14 | ||
15 | // call filter->fixup_range() and return the range as a pair. this makes it easy | |
16 | // to fit on a single line for ASSERT_EQ() | |
17 | range_t fixup_range(RGWGetObj_Decompress *filter, off_t ofs, off_t end) | |
18 | { | |
19 | filter->fixup_range(ofs, end); | |
20 | return {ofs, end}; | |
21 | } | |
22 | ||
23 | ||
24 | TEST(Decompress, FixupRangePartial) | |
25 | { | |
26 | RGWCompressionInfo cs_info; | |
27 | ||
28 | // array of blocks with original len=8, compressed to len=6 | |
29 | auto& blocks = cs_info.blocks; | |
30 | blocks.emplace_back(compression_block{0, 0, 6}); | |
31 | blocks.emplace_back(compression_block{8, 6, 6}); | |
32 | blocks.emplace_back(compression_block{16, 12, 6}); | |
33 | blocks.emplace_back(compression_block{24, 18, 6}); | |
34 | ||
35 | const bool partial = true; | |
36 | RGWGetObj_Decompress decompress(g_ceph_context, &cs_info, partial, &cb); | |
37 | ||
38 | // test translation from logical ranges to compressed ranges | |
31f18b77 FG |
39 | ASSERT_EQ(range_t(0, 5), fixup_range(&decompress, 0, 1)); |
40 | ASSERT_EQ(range_t(0, 5), fixup_range(&decompress, 1, 7)); | |
41 | ASSERT_EQ(range_t(0, 11), fixup_range(&decompress, 7, 8)); | |
42 | ASSERT_EQ(range_t(0, 11), fixup_range(&decompress, 0, 9)); | |
43 | ASSERT_EQ(range_t(0, 11), fixup_range(&decompress, 7, 9)); | |
44 | ASSERT_EQ(range_t(6, 11), fixup_range(&decompress, 8, 9)); | |
45 | ASSERT_EQ(range_t(6, 17), fixup_range(&decompress, 8, 16)); | |
46 | ASSERT_EQ(range_t(6, 17), fixup_range(&decompress, 8, 17)); | |
47 | ASSERT_EQ(range_t(12, 23), fixup_range(&decompress, 16, 24)); | |
48 | ASSERT_EQ(range_t(12, 23), fixup_range(&decompress, 16, 999)); | |
49 | ASSERT_EQ(range_t(18, 23), fixup_range(&decompress, 998, 999)); | |
7c673cae | 50 | } |