Skip to content

Commit a4fb7b1

Browse files
committed
test: add encode decode test for pg_pool_t
Adding some unit test for pg_pool_t to make sure encode\decode\encode doesn't failed to produce the same pg_pool_t struct Fixes: https://tracker.ceph.com/issues/59291 Signed-off-by: Nitzan Mordechai <[email protected]>
1 parent a23c2ac commit a4fb7b1

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed

src/test/osd/types.cc

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,111 @@
2727

2828
using namespace std;
2929

30+
void compare_pg_pool_t(const pg_pool_t l, const pg_pool_t r)
31+
{
32+
ASSERT_EQ(l.type, r.type);
33+
ASSERT_EQ(l.size, r.size);
34+
ASSERT_EQ(l.crush_rule, r.crush_rule);
35+
ASSERT_EQ(l.object_hash, r.object_hash);
36+
ASSERT_EQ(l.last_change, r.last_change);
37+
ASSERT_EQ(l.snap_seq, r.snap_seq);
38+
ASSERT_EQ(l.snap_epoch, r.snap_epoch);
39+
//ASSERT_EQ(l.snaps, r.snaps);
40+
ASSERT_EQ(l.removed_snaps, r.removed_snaps);
41+
ASSERT_EQ(l.auid, r.auid);
42+
ASSERT_EQ(l.flags, r.flags);
43+
ASSERT_EQ(l.min_size, r.min_size);
44+
ASSERT_EQ(l.quota_max_bytes, r.quota_max_bytes);
45+
ASSERT_EQ(l.quota_max_objects, r.quota_max_objects);
46+
ASSERT_EQ(l.tiers, r.tiers);
47+
ASSERT_EQ(l.tier_of, r.tier_of);
48+
ASSERT_EQ(l.read_tier, r.read_tier);
49+
ASSERT_EQ(l.write_tier, r.write_tier);
50+
ASSERT_EQ(l.properties, r.properties);
51+
//ASSERT_EQ(l.hit_set_params, r.hit_set_params);
52+
//ASSERT_EQ(l.hit_set_period, r.hit_set_period);
53+
//ASSERT_EQ(l.hit_set_count, r.hit_set_count);
54+
ASSERT_EQ(l.stripe_width, r.stripe_width);
55+
ASSERT_EQ(l.target_max_bytes, r.target_max_bytes);
56+
ASSERT_EQ(l.target_max_objects, r.target_max_objects);
57+
ASSERT_EQ(l.cache_target_dirty_ratio_micro, r.cache_target_dirty_ratio_micro);
58+
ASSERT_EQ(l.cache_target_full_ratio_micro, r.cache_target_full_ratio_micro);
59+
ASSERT_EQ(l.cache_min_flush_age, r.cache_min_flush_age);
60+
ASSERT_EQ(l.cache_min_evict_age, r.cache_min_evict_age);
61+
ASSERT_EQ(l.erasure_code_profile, r.erasure_code_profile);
62+
ASSERT_EQ(l.last_force_op_resend_preluminous, r.last_force_op_resend_preluminous);
63+
ASSERT_EQ(l.min_read_recency_for_promote, r.min_read_recency_for_promote);
64+
ASSERT_EQ(l.expected_num_objects, r.expected_num_objects);
65+
ASSERT_EQ(l.cache_target_dirty_high_ratio_micro, r.cache_target_dirty_high_ratio_micro);
66+
ASSERT_EQ(l.min_write_recency_for_promote, r.min_write_recency_for_promote);
67+
ASSERT_EQ(l.use_gmt_hitset, r.use_gmt_hitset);
68+
ASSERT_EQ(l.fast_read, r.fast_read);
69+
ASSERT_EQ(l.hit_set_grade_decay_rate, r.hit_set_grade_decay_rate);
70+
ASSERT_EQ(l.hit_set_search_last_n, r.hit_set_search_last_n);
71+
//ASSERT_EQ(l.opts, r.opts);
72+
ASSERT_EQ(l.last_force_op_resend_prenautilus, r.last_force_op_resend_prenautilus);
73+
ASSERT_EQ(l.application_metadata, r.application_metadata);
74+
ASSERT_EQ(l.create_time, r.create_time);
75+
ASSERT_EQ(l.get_pg_num_target(), r.get_pg_num_target());
76+
ASSERT_EQ(l.get_pgp_num_target(), r.get_pgp_num_target());
77+
ASSERT_EQ(l.get_pg_num_pending(), r.get_pg_num_pending());
78+
ASSERT_EQ(l.last_force_op_resend, r.last_force_op_resend);
79+
ASSERT_EQ(l.pg_autoscale_mode, r.pg_autoscale_mode);
80+
ASSERT_EQ(l.last_pg_merge_meta.source_pgid, r.last_pg_merge_meta.source_pgid);
81+
ASSERT_EQ(l.peering_crush_bucket_count, r.peering_crush_bucket_count);
82+
ASSERT_EQ(l.peering_crush_bucket_target, r.peering_crush_bucket_target);
83+
ASSERT_EQ(l.peering_crush_bucket_barrier, r.peering_crush_bucket_barrier);
84+
ASSERT_EQ(l.peering_crush_mandatory_member, r.peering_crush_mandatory_member);
85+
ASSERT_EQ(l.peering_crush_bucket_count , r.peering_crush_bucket_count);
86+
ASSERT_EQ(l.peering_crush_bucket_target , r.peering_crush_bucket_target);
87+
ASSERT_EQ(l.peering_crush_bucket_barrier , r.peering_crush_bucket_barrier);
88+
ASSERT_EQ(l.peering_crush_mandatory_member , r.peering_crush_mandatory_member);
89+
}
90+
91+
TEST(pg_pool_t, encodeDecode)
92+
{
93+
uint64_t features = CEPH_FEATURE_CRUSH_TUNABLES5 |
94+
CEPH_FEATURE_INCARNATION_2 |
95+
CEPH_FEATURE_PGPOOL3 |
96+
CEPH_FEATURE_OSDENC |
97+
CEPH_FEATURE_OSD_POOLRESEND |
98+
CEPH_FEATURE_NEW_OSDOP_ENCODING |
99+
CEPH_FEATUREMASK_SERVER_LUMINOUS |
100+
CEPH_FEATUREMASK_SERVER_MIMIC |
101+
CEPH_FEATUREMASK_SERVER_NAUTILUS;
102+
{
103+
pg_pool_t p;
104+
std::list<pg_pool_t*> pools;
105+
106+
p.generate_test_instances(pools);
107+
for(auto p1 : pools){
108+
bufferlist bl;
109+
p1->encode(bl, features);
110+
bl.hexdump(std::cout);
111+
auto pbl = bl.cbegin();
112+
pg_pool_t p2;
113+
p2.decode(pbl);
114+
compare_pg_pool_t(*p1, p2);
115+
}
116+
}
117+
118+
{
119+
// test reef
120+
pg_pool_t p;
121+
std::list<pg_pool_t*> pools;
122+
p.generate_test_instances(pools);
123+
for(auto p1 : pools){
124+
bufferlist bl;
125+
p1->encode(bl, features|CEPH_FEATUREMASK_SERVER_REEF);
126+
bl.hexdump(std::cout);
127+
auto pbl = bl.cbegin();
128+
pg_pool_t p2;
129+
p2.decode(pbl);
130+
compare_pg_pool_t(*p1, p2);
131+
}
132+
}
133+
}
134+
30135
TEST(hobject, prefixes0)
31136
{
32137
uint32_t mask = 0xE947FA20;

0 commit comments

Comments
 (0)