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;