| 39 | }; |
| 40 | |
| 41 | TEST_F(TestObjectMap, RefreshInvalidatesWhenCorrupt) { |
| 42 | REQUIRE_FEATURE(RBD_FEATURE_OBJECT_MAP); |
| 43 | |
| 44 | librbd::ImageCtx *ictx; |
| 45 | ASSERT_EQ(0, open_image(m_image_name, &ictx)); |
| 46 | bool flags_set; |
| 47 | ASSERT_EQ(0, ictx->test_flags(CEPH_NOSNAP, RBD_FLAG_OBJECT_MAP_INVALID, |
| 48 | &flags_set)); |
| 49 | ASSERT_FALSE(flags_set); |
| 50 | |
| 51 | C_SaferCond lock_ctx; |
| 52 | { |
| 53 | std::unique_lock owner_locker{ictx->owner_lock}; |
| 54 | ictx->exclusive_lock->try_acquire_lock(&lock_ctx); |
| 55 | } |
| 56 | ASSERT_EQ(0, lock_ctx.wait()); |
| 57 | |
| 58 | std::string oid = librbd::ObjectMap<>::object_map_name(ictx->id, CEPH_NOSNAP); |
| 59 | bufferlist bl; |
| 60 | bl.append("corrupt"); |
| 61 | ASSERT_EQ(0, ictx->md_ctx.write_full(oid, bl)); |
| 62 | |
| 63 | ASSERT_EQ(0, when_open_object_map(ictx)); |
| 64 | ASSERT_EQ(0, ictx->test_flags(CEPH_NOSNAP, RBD_FLAG_OBJECT_MAP_INVALID, |
| 65 | &flags_set)); |
| 66 | ASSERT_TRUE(flags_set); |
| 67 | } |
| 68 | |
| 69 | TEST_F(TestObjectMap, RefreshInvalidatesWhenTooSmall) { |
| 70 | REQUIRE_FEATURE(RBD_FEATURE_OBJECT_MAP); |
nothing calls this directly
no test coverage detected