]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test: add encode decode test for pg_pool_t 52022/head
authorNitzan Mordechai <nmordech@redhat.com>
Tue, 13 Jun 2023 09:39:38 +0000 (09:39 +0000)
committerNitzan Mordechai <nmordech@redhat.com>
Tue, 6 Aug 2024 16:44:52 +0000 (16:44 +0000)
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 <nmordech@redhat.com>
src/test/osd/types.cc

index 2dc870411bb62476902812853972f6a86904f547..8cd5b7fa3837a96489c006e6b4d504d96460976c 100644 (file)
 
 using namespace std;
 
+void compare_pg_pool_t(const pg_pool_t l, const pg_pool_t r)
+{
+  ASSERT_EQ(l.type, r.type);
+  ASSERT_EQ(l.size, r.size);
+  ASSERT_EQ(l.crush_rule, r.crush_rule);
+  ASSERT_EQ(l.object_hash, r.object_hash);
+  ASSERT_EQ(l.last_change, r.last_change);
+  ASSERT_EQ(l.snap_seq, r.snap_seq);
+  ASSERT_EQ(l.snap_epoch, r.snap_epoch);
+  //ASSERT_EQ(l.snaps, r.snaps);
+  ASSERT_EQ(l.removed_snaps, r.removed_snaps);
+  ASSERT_EQ(l.auid, r.auid);
+  ASSERT_EQ(l.flags, r.flags);
+  ASSERT_EQ(l.min_size, r.min_size);
+  ASSERT_EQ(l.quota_max_bytes, r.quota_max_bytes);
+  ASSERT_EQ(l.quota_max_objects, r.quota_max_objects);
+  ASSERT_EQ(l.tiers, r.tiers);
+  ASSERT_EQ(l.tier_of, r.tier_of);
+  ASSERT_EQ(l.read_tier, r.read_tier);
+  ASSERT_EQ(l.write_tier, r.write_tier);
+  ASSERT_EQ(l.properties, r.properties);
+  //ASSERT_EQ(l.hit_set_params, r.hit_set_params);
+  //ASSERT_EQ(l.hit_set_period, r.hit_set_period);
+  //ASSERT_EQ(l.hit_set_count, r.hit_set_count);
+  ASSERT_EQ(l.stripe_width, r.stripe_width);
+  ASSERT_EQ(l.target_max_bytes, r.target_max_bytes);
+  ASSERT_EQ(l.target_max_objects, r.target_max_objects);
+  ASSERT_EQ(l.cache_target_dirty_ratio_micro, r.cache_target_dirty_ratio_micro);
+  ASSERT_EQ(l.cache_target_full_ratio_micro, r.cache_target_full_ratio_micro);
+  ASSERT_EQ(l.cache_min_flush_age, r.cache_min_flush_age);
+  ASSERT_EQ(l.cache_min_evict_age, r.cache_min_evict_age);
+  ASSERT_EQ(l.erasure_code_profile, r.erasure_code_profile);
+  ASSERT_EQ(l.last_force_op_resend_preluminous, r.last_force_op_resend_preluminous);
+  ASSERT_EQ(l.min_read_recency_for_promote, r.min_read_recency_for_promote);
+  ASSERT_EQ(l.expected_num_objects, r.expected_num_objects);
+  ASSERT_EQ(l.cache_target_dirty_high_ratio_micro, r.cache_target_dirty_high_ratio_micro);
+  ASSERT_EQ(l.min_write_recency_for_promote, r.min_write_recency_for_promote);
+  ASSERT_EQ(l.use_gmt_hitset, r.use_gmt_hitset);
+  ASSERT_EQ(l.fast_read, r.fast_read);
+  ASSERT_EQ(l.hit_set_grade_decay_rate, r.hit_set_grade_decay_rate);
+  ASSERT_EQ(l.hit_set_search_last_n, r.hit_set_search_last_n);
+  //ASSERT_EQ(l.opts, r.opts);
+  ASSERT_EQ(l.last_force_op_resend_prenautilus, r.last_force_op_resend_prenautilus);
+  ASSERT_EQ(l.application_metadata, r.application_metadata);
+  ASSERT_EQ(l.create_time, r.create_time);
+  ASSERT_EQ(l.get_pg_num_target(), r.get_pg_num_target());
+  ASSERT_EQ(l.get_pgp_num_target(), r.get_pgp_num_target());
+  ASSERT_EQ(l.get_pg_num_pending(), r.get_pg_num_pending());
+  ASSERT_EQ(l.last_force_op_resend, r.last_force_op_resend);
+  ASSERT_EQ(l.pg_autoscale_mode, r.pg_autoscale_mode);
+  ASSERT_EQ(l.last_pg_merge_meta.source_pgid, r.last_pg_merge_meta.source_pgid);
+  ASSERT_EQ(l.peering_crush_bucket_count, r.peering_crush_bucket_count);
+  ASSERT_EQ(l.peering_crush_bucket_target, r.peering_crush_bucket_target);
+  ASSERT_EQ(l.peering_crush_bucket_barrier, r.peering_crush_bucket_barrier);
+  ASSERT_EQ(l.peering_crush_mandatory_member, r.peering_crush_mandatory_member);
+  ASSERT_EQ(l.peering_crush_bucket_count , r.peering_crush_bucket_count);
+  ASSERT_EQ(l.peering_crush_bucket_target , r.peering_crush_bucket_target);
+  ASSERT_EQ(l.peering_crush_bucket_barrier , r.peering_crush_bucket_barrier);
+  ASSERT_EQ(l.peering_crush_mandatory_member , r.peering_crush_mandatory_member);
+}
+
+TEST(pg_pool_t, encodeDecode)
+{
+  uint64_t features = CEPH_FEATURE_CRUSH_TUNABLES5 |
+                          CEPH_FEATURE_INCARNATION_2 |
+                          CEPH_FEATURE_PGPOOL3 |
+                          CEPH_FEATURE_OSDENC |
+                          CEPH_FEATURE_OSD_POOLRESEND |
+                          CEPH_FEATURE_NEW_OSDOP_ENCODING |
+                          CEPH_FEATUREMASK_SERVER_LUMINOUS |
+                          CEPH_FEATUREMASK_SERVER_MIMIC |
+                          CEPH_FEATUREMASK_SERVER_NAUTILUS;
+  {
+    pg_pool_t p;
+    std::list<pg_pool_t*> pools;
+
+    p.generate_test_instances(pools);
+    for(auto p1 : pools){
+      bufferlist bl;
+      p1->encode(bl, features);
+      bl.hexdump(std::cout);
+      auto pbl = bl.cbegin();
+      pg_pool_t p2;
+      p2.decode(pbl);
+      compare_pg_pool_t(*p1, p2);
+    }
+  }
+
+  {
+    // test reef
+    pg_pool_t p;
+    std::list<pg_pool_t*> pools;
+    p.generate_test_instances(pools);
+    for(auto p1 : pools){
+      bufferlist bl;
+      p1->encode(bl, features|CEPH_FEATUREMASK_SERVER_REEF);
+      bl.hexdump(std::cout);
+      auto pbl = bl.cbegin();
+      pg_pool_t p2;
+      p2.decode(pbl);
+      compare_pg_pool_t(*p1, p2);
+    }
+  }
+}
+
 TEST(hobject, prefixes0)
 {
   uint32_t mask = 0xE947FA20;