]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test: add unittest case for ObjectCleanRegion
authorlishuhao <lishuhao@unitedstack.com>
Sun, 14 Apr 2019 00:43:35 +0000 (08:43 +0800)
committerletterwuyu <lishuhao@unitedstack.com>
Mon, 6 May 2019 07:30:35 +0000 (15:30 +0800)
Signed-off-by: Ning Yao <yaoning@unitedstack.com>
Signed-off-by: lishuhao <lishuhao@unitedstack.com>
src/test/osd/types.cc

index 550d97c3b74600ba8d57c895ee02fa444b0a7c09..0c9aae135f2b4598b8c8b94fd37d1eafac5a4b93 100644 (file)
@@ -901,6 +901,75 @@ TEST(pg_t, merge)
   ASSERT_FALSE(parent.is_merge_target(9, 8));
 }
 
+TEST(ObjectCleanRegions, mark_data_region_dirty)
+{
+  ObjectCleanRegions clean_regions;
+  uint64_t offset_1, len_1, offset_2, len_2;
+  offset_1 = 4096;
+  len_1 = 8192;
+  offset_2 = 40960;
+  len_2 = 4096;
+
+  interval_set<uint64_t> expect_dirty_region;
+  EXPECT_EQ(expect_dirty_region, clean_regions.get_dirty_regions());
+  expect_dirty_region.insert(offset_1, len_1);
+  expect_dirty_region.insert(offset_2, len_2);
+
+  clean_regions.mark_data_region_dirty(offset_1, len_1);
+  clean_regions.mark_data_region_dirty(offset_2, len_2);
+  EXPECT_EQ(expect_dirty_region, clean_regions.get_dirty_regions());
+}
+
+TEST(ObjectCleanRegions, mark_omap_dirty)
+{
+  ObjectCleanRegions clean_regions;
+
+  EXPECT_FALSE(clean_regions.omap_is_dirty());
+  clean_regions.mark_omap_dirty();
+  EXPECT_TRUE(clean_regions.omap_is_dirty());
+}
+
+TEST(ObjectCleanRegions, merge)
+{
+  ObjectCleanRegions cr1(2), cr2(4);
+  interval_set<uint64_t> cr1_expect;
+  interval_set<uint64_t> cr2_expect;
+  ASSERT_EQ(cr1_expect, cr1.get_dirty_regions());
+  ASSERT_EQ(cr2_expect, cr2.get_dirty_regions());
+
+  cr1.mark_data_region_dirty(4096, 4096);
+  cr1_expect.insert(4096, 4096);
+  ASSERT_EQ(cr1_expect, cr1.get_dirty_regions());
+  cr1.mark_data_region_dirty(12288, 8192);
+  cr1_expect.insert(12288, 8192);
+  ASSERT_TRUE(cr1_expect.subset_of(cr1.get_dirty_regions()));
+  cr1.mark_data_region_dirty(32768, 10240);
+  cr1_expect.insert(32768, 10240);
+  cr1_expect.erase(4096, 4096);
+  ASSERT_TRUE(cr1_expect.subset_of(cr1.get_dirty_regions()));
+
+  cr2.mark_data_region_dirty(20480, 12288);
+  cr2_expect.insert(20480, 12288);
+  ASSERT_EQ(cr2_expect, cr2.get_dirty_regions());
+  cr2.mark_data_region_dirty(102400, 4096);
+  cr2_expect.insert(102400, 4096);
+  cr2.mark_data_region_dirty(204800, 8192);
+  cr2_expect.insert(204800, 8192);
+  cr2.mark_data_region_dirty(409600, 4096);
+  cr2_expect.insert(409600, 4096);
+  ASSERT_TRUE(cr2_expect.subset_of(cr2.get_dirty_regions()));
+
+  ASSERT_FALSE(cr2.omap_is_dirty());
+  cr2.mark_omap_dirty();
+  ASSERT_FALSE(cr1.omap_is_dirty());
+  ASSERT_TRUE(cr2.omap_is_dirty());
+
+  cr1.merge(cr2);
+  cr1_expect.insert(204800, 8192);
+  ASSERT_TRUE(cr1_expect.subset_of(cr1.get_dirty_regions()));
+  ASSERT_TRUE(cr1.omap_is_dirty());
+}
+
 TEST(pg_missing_t, constructor)
 {
   pg_missing_t missing;