X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Ftest%2Frbd_mirror%2Ftest_mock_InstanceReplayer.cc;h=6e2d58c0aa0e234e60f2dbf8afebc3a429c16744;hb=c07f9fc5a4f48397831383549fb0482b93480643;hp=f2a1d1b34f1f82ecaea4c82585533d949df00c5d;hpb=9439ae556f035e65c9c107ae13ddd09457dbbecd;p=ceph.git diff --git a/ceph/src/test/rbd_mirror/test_mock_InstanceReplayer.cc b/ceph/src/test/rbd_mirror/test_mock_InstanceReplayer.cc index f2a1d1b34..6e2d58c0a 100644 --- a/ceph/src/test/rbd_mirror/test_mock_InstanceReplayer.cc +++ b/ceph/src/test/rbd_mirror/test_mock_InstanceReplayer.cc @@ -3,10 +3,13 @@ #include "test/librbd/mock/MockImageCtx.h" #include "test/rbd_mirror/test_mock_fixture.h" +#include "tools/rbd_mirror/ImageDeleter.h" #include "tools/rbd_mirror/ImageReplayer.h" #include "tools/rbd_mirror/InstanceWatcher.h" #include "tools/rbd_mirror/InstanceReplayer.h" +#include "tools/rbd_mirror/ServiceDaemon.h" #include "tools/rbd_mirror/Threads.h" +#include "tools/rbd_mirror/image_replayer/Types.h" namespace librbd { @@ -37,6 +40,21 @@ struct Threads { } }; +template <> +struct ImageDeleter { + MOCK_METHOD4(schedule_image_delete, void(RadosRef, int64_t, + const std::string&, bool)); + MOCK_METHOD4(wait_for_scheduled_deletion, + void(int64_t, const std::string&, Context*, bool)); +}; + +template<> +struct ServiceDaemon { + MOCK_METHOD3(add_or_update_attribute, + void(int64_t, const std::string&, + const service_daemon::AttributeValue&)); +}; + template<> struct InstanceWatcher { }; @@ -48,7 +66,7 @@ struct ImageReplayer { static ImageReplayer *create( Threads *threads, - std::shared_ptr image_deleter, + ImageDeleter* image_deleter, InstanceWatcher *instance_watcher, RadosRef local, const std::string &local_mirror_uuid, int64_t local_pool_id, const std::string &global_image_id) { @@ -85,6 +103,8 @@ struct ImageReplayer { MOCK_METHOD0(is_running, bool()); MOCK_METHOD0(is_stopped, bool()); MOCK_METHOD0(is_blacklisted, bool()); + + MOCK_CONST_METHOD0(get_health_state, image_replayer::HealthState()); }; ImageReplayer* ImageReplayer::s_instance = nullptr; @@ -103,22 +123,21 @@ using ::testing::InSequence; using ::testing::Invoke; using ::testing::Return; using ::testing::ReturnRef; +using ::testing::WithArg; class TestMockInstanceReplayer : public TestMockFixture { public: + typedef ImageDeleter MockImageDeleter; typedef ImageReplayer MockImageReplayer; typedef InstanceReplayer MockInstanceReplayer; typedef InstanceWatcher MockInstanceWatcher; + typedef ServiceDaemon MockServiceDaemon; typedef Threads MockThreads; void SetUp() override { TestMockFixture::SetUp(); m_mock_threads = new MockThreads(m_threads); - - m_image_deleter.reset( - new rbd::mirror::ImageDeleter(m_threads->work_queue, m_threads->timer, - &m_threads->timer_lock)); } void TearDown() override { @@ -126,15 +145,26 @@ public: TestMockFixture::TearDown(); } + void expect_wait_for_scheduled_deletion(MockImageDeleter& mock_image_deleter, + const std::string& global_image_id, + int r) { + EXPECT_CALL(mock_image_deleter, + wait_for_scheduled_deletion(_, global_image_id, _, false)) + .WillOnce(WithArg<2>(Invoke([this, r](Context *ctx) { + m_threads->work_queue->queue(ctx, r); + }))); + } + MockThreads *m_mock_threads; - std::shared_ptr m_image_deleter; }; TEST_F(TestMockInstanceReplayer, AcquireReleaseImage) { + MockServiceDaemon mock_service_daemon; + MockImageDeleter mock_image_deleter; MockInstanceWatcher mock_instance_watcher; MockImageReplayer mock_image_replayer; MockInstanceReplayer instance_replayer( - m_mock_threads, m_image_deleter, + m_mock_threads, &mock_service_daemon, &mock_image_deleter, rbd::mirror::RadosRef(new librados::Rados(m_local_io_ctx)), "local_mirror_uuid", m_local_io_ctx.get_id()); @@ -145,6 +175,8 @@ TEST_F(TestMockInstanceReplayer, AcquireReleaseImage) { EXPECT_CALL(mock_image_replayer, is_blacklisted()) .WillRepeatedly(Return(false)); + expect_wait_for_scheduled_deletion(mock_image_deleter, "global_image_id", 0); + InSequence seq; instance_replayer.init();