]> git.proxmox.com Git - ceph.git/blob - ceph/src/test/test_striper.cc
import quincy beta 17.1.0
[ceph.git] / ceph / src / test / test_striper.cc
1 #include "gtest/gtest.h"
2 #include "global/global_context.h"
3
4 #include "osdc/Striper.h"
5
6 using namespace std;
7
8 TEST(Striper, Stripe1)
9 {
10 file_layout_t l;
11
12 l.object_size = 262144;
13 l.stripe_unit = 4096;
14 l.stripe_count = 3;
15
16 vector<ObjectExtent> ex;
17 Striper::file_to_extents(g_ceph_context, 1, &l, 5006035, 46419, 5006035, ex);
18
19 cout << "result " << ex << std::endl;
20
21 ASSERT_EQ(3u, ex.size());
22 ASSERT_EQ(98304u, ex[0].truncate_size);
23 ASSERT_EQ(ex[1].offset, ex[1].truncate_size);
24 ASSERT_EQ(94208u, ex[2].truncate_size);
25 }
26
27 TEST(Striper, EmptyPartialResult)
28 {
29 file_layout_t l;
30
31 l.object_size = 4194304;
32 l.stripe_unit = 4194304;
33 l.stripe_count = 1;
34
35 vector<ObjectExtent> ex;
36 Striper::file_to_extents(g_ceph_context, 1, &l, 725549056, 131072, 72554905600, ex);
37 cout << "ex " << ex << std::endl;
38 ASSERT_EQ(2u, ex.size());
39
40 Striper::StripedReadResult r;
41
42 bufferlist bl;
43 r.add_partial_result(g_ceph_context, bl, ex[1].buffer_extents);
44
45 bufferptr bp(65536);
46 bp.zero();
47 bl.append(bp);
48
49 r.add_partial_result(g_ceph_context, bl, ex[0].buffer_extents);
50
51 bufferlist outbl;
52 r.assemble_result(g_ceph_context, outbl, false);
53
54 ASSERT_EQ(65536u, outbl.length());
55 }
56
57 TEST(Striper, GetNumObj)
58 {
59 file_layout_t l;
60
61 l.object_size = 262144;
62 l.stripe_unit = 4096;
63 l.stripe_count = 3;
64 uint64_t size,numobjs;
65 size = 6999;
66 numobjs = Striper::get_num_objects(l, size);
67 ASSERT_EQ(2u, numobjs);
68 size = 793320;
69 numobjs = Striper::get_num_objects(l, size);
70 ASSERT_EQ(5u, numobjs);
71 size = 805608;
72 numobjs = Striper::get_num_objects(l, size);
73 ASSERT_EQ(6u, numobjs);
74 }
75
76 TEST(Striper, GetFileOffset)
77 {
78 file_layout_t l;
79
80 l.object_size = 262144;
81 l.stripe_unit = 4096;
82 l.stripe_count = 3;
83
84 uint64_t object_no = 100;
85 uint64_t object_off = 200000;
86 uint64_t file_offset = Striper::get_file_offset(
87 g_ceph_context, &l, object_no, object_off);
88 ASSERT_EQ(26549568u, file_offset);
89 }