From: Gui Hecheng Date: Tue, 21 Feb 2017 07:35:37 +0000 (+0800) Subject: test/librbd: handle writesame op in test_mock_Replay X-Git-Tag: v12.0.1~250^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6bd1d7ec343ac3dea8fbe78d64addaaedd6e4023;p=ceph.git test/librbd: handle writesame op in test_mock_Replay Based on pr: https://github.com/ceph/ceph/pull/10019. Signed-off-by: Gui Hecheng Signed-off-by: Mingxin Liu --- diff --git a/src/test/librbd/journal/test_mock_Replay.cc b/src/test/librbd/journal/test_mock_Replay.cc index 4a3d7199c827..9cbd6632e94a 100644 --- a/src/test/librbd/journal/test_mock_Replay.cc +++ b/src/test/librbd/journal/test_mock_Replay.cc @@ -50,6 +50,15 @@ struct ImageRequest { s_instance->aio_flush(c); } + MOCK_METHOD5(aio_writesame, void(AioCompletion *c, uint64_t off, uint64_t len, + const bufferlist &bl, int op_flags)); + static void aio_writesame(MockReplayImageCtx *ictx, AioCompletion *c, + uint64_t off, uint64_t len, bufferlist &&bl, + int op_flags) { + assert(s_instance != nullptr); + s_instance->aio_writesame(c, off, len, bl, op_flags); + } + ImageRequest() { s_instance = this; } @@ -142,6 +151,14 @@ public: .WillOnce(SaveArg<0>(aio_comp)); } + void expect_aio_writesame(MockIoImageRequest &mock_io_image_request, + io::AioCompletion **aio_comp, uint64_t off, + uint64_t len, const char *data) { + EXPECT_CALL(mock_io_image_request, + aio_writesame(_, off, len, BufferlistEqual(data), _)) + .WillOnce(SaveArg<0>(aio_comp)); + } + void expect_flatten(MockReplayImageCtx &mock_image_ctx, Context **on_finish) { EXPECT_CALL(*mock_image_ctx.operations, execute_flatten(_, _)) .WillOnce(DoAll(SaveArg<1>(on_finish), @@ -387,6 +404,34 @@ TEST_F(TestMockJournalReplay, AioFlush) { ASSERT_EQ(0, on_ready.wait()); } +TEST_F(TestMockJournalReplay, AioWriteSame) { + REQUIRE_FEATURE(RBD_FEATURE_JOURNALING); + + librbd::ImageCtx *ictx; + ASSERT_EQ(0, open_image(m_image_name, &ictx)); + + MockReplayImageCtx mock_image_ctx(*ictx); + MockJournalReplay mock_journal_replay(mock_image_ctx); + MockIoImageRequest mock_io_image_request; + expect_op_work_queue(mock_image_ctx); + + InSequence seq; + io::AioCompletion *aio_comp; + C_SaferCond on_ready; + C_SaferCond on_safe; + expect_aio_writesame(mock_io_image_request, &aio_comp, 123, 456, "333"); + when_process(mock_journal_replay, + EventEntry{AioWriteSameEvent(123, 456, to_bl("333"))}, + &on_ready, &on_safe); + + when_complete(mock_image_ctx, aio_comp, 0); + ASSERT_EQ(0, on_ready.wait()); + + expect_aio_flush(mock_image_ctx, mock_io_image_request, 0); + ASSERT_EQ(0, when_shut_down(mock_journal_replay, false)); + ASSERT_EQ(0, on_safe.wait()); +} + TEST_F(TestMockJournalReplay, IOError) { REQUIRE_FEATURE(RBD_FEATURE_JOURNALING);