From 16cc7efaacbf8dc2a3aedd041bcc6b7a1865707b Mon Sep 17 00:00:00 2001 From: Josh Durgin Date: Sat, 15 Jul 2017 22:28:59 -0400 Subject: [PATCH] test: add a couple lost+delete unit tests Signed-off-by: Josh Durgin --- src/test/osd/TestPGLog.cc | 23 +++++++++++++++++++++++ src/test/osd/types.cc | 27 +++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/src/test/osd/TestPGLog.cc b/src/test/osd/TestPGLog.cc index 993dba2cbe4..1a527db5de5 100644 --- a/src/test/osd/TestPGLog.cc +++ b/src/test/osd/TestPGLog.cc @@ -70,6 +70,16 @@ public: e.prior_version = pv; return e; } + static pg_log_entry_t mk_ple_ldt( + const hobject_t &hoid, eversion_t v, eversion_t pv) { + pg_log_entry_t e; + e.mark_unrollbackable(); + e.op = pg_log_entry_t::LOST_DELETE; + e.soid = hoid; + e.version = v; + e.prior_version = pv; + return e; + } static pg_log_entry_t mk_ple_mod_rb( const hobject_t &hoid, eversion_t v, eversion_t pv) { pg_log_entry_t e; @@ -1960,6 +1970,19 @@ TEST_F(PGLogTest, merge_log_9) { run_test_case(t); } +TEST_F(PGLogTest, merge_log_10) { + TestCase t; + t.base.push_back(mk_ple_mod_rb(mk_obj(1), mk_evt(10, 100), mk_evt(8, 80))); + + t.auth.push_back(mk_ple_ldt(mk_obj(1), mk_evt(11, 101), mk_evt(10, 100))); + + t.init.add(mk_obj(1), mk_evt(10, 100), mk_evt(8, 80), false); + t.final.add(mk_obj(1), mk_evt(11, 101), mk_evt(8, 80), true); + + t.setup(); + run_test_case(t); +} + TEST_F(PGLogTest, merge_log_prior_version_have) { TestCase t; t.base.push_back(mk_ple_mod_rb(mk_obj(1), mk_evt(10, 100), mk_evt(8, 80))); diff --git a/src/test/osd/types.cc b/src/test/osd/types.cc index 5a1020a441c..2a26c395a70 100644 --- a/src/test/osd/types.cc +++ b/src/test/osd/types.cc @@ -874,9 +874,36 @@ TEST(pg_missing_t, add_next_event) EXPECT_TRUE(e.is_delete()); missing.add_next_event(e); EXPECT_TRUE(missing.is_missing(oid)); + EXPECT_TRUE(missing.get_items().at(oid).is_delete()); EXPECT_EQ(prior_version, missing.get_items().at(oid).have); EXPECT_EQ(version, missing.get_items().at(oid).need); + EXPECT_EQ(oid, missing.get_rmissing().at(e.version.version)); + EXPECT_EQ(1U, missing.num_missing()); + EXPECT_EQ(1U, missing.get_rmissing().size()); + } + + // adding a LOST_DELETE after an existing event + { + pg_missing_t missing; + pg_log_entry_t e = sample_e; + + e.op = pg_log_entry_t::MODIFY; + EXPECT_TRUE(e.is_update()); + EXPECT_TRUE(e.object_is_indexed()); + EXPECT_TRUE(e.reqid_is_indexed()); + EXPECT_FALSE(missing.is_missing(oid)); + missing.add_next_event(e); + EXPECT_TRUE(missing.is_missing(oid)); + EXPECT_FALSE(missing.get_items().at(oid).is_delete()); + + e.op = pg_log_entry_t::LOST_DELETE; + e.version.version++; + EXPECT_TRUE(e.is_delete()); + missing.add_next_event(e); + EXPECT_TRUE(missing.is_missing(oid)); EXPECT_TRUE(missing.get_items().at(oid).is_delete()); + EXPECT_EQ(prior_version, missing.get_items().at(oid).have); + EXPECT_EQ(e.version, missing.get_items().at(oid).need); EXPECT_EQ(oid, missing.get_rmissing().at(e.version.version)); EXPECT_EQ(1U, missing.num_missing()); EXPECT_EQ(1U, missing.get_rmissing().size()); -- 2.39.5