]> git.proxmox.com Git - ceph.git/blob - ceph/src/test/rgw/test_rgw_compression.cc
a95ec7fc8cb9dbb7f9f7f23441f715c029b5d4f6
[ceph.git] / ceph / src / test / rgw / test_rgw_compression.cc
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
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));
50 }