From: Jason Dillaman Date: Wed, 25 Feb 2015 17:02:00 +0000 (-0500) Subject: tests: add unit test to verify async requests time out X-Git-Tag: v0.93~5^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=d611121ad771ffc0220955aa8a75435c4f60d875;p=ceph.git tests: add unit test to verify async requests time out Signed-off-by: Jason Dillaman --- diff --git a/src/test/librbd/test_ImageWatcher.cc b/src/test/librbd/test_ImageWatcher.cc index 4e5e583b39397..ed514946c82a5 100644 --- a/src/test/librbd/test_ImageWatcher.cc +++ b/src/test/librbd/test_ImageWatcher.cc @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -895,3 +896,35 @@ TEST_F(TestImageWatcher, NotifyAsyncCompleteError) { ASSERT_TRUE(thread.timed_join(boost::posix_time::seconds(10))); ASSERT_EQ(-ESHUTDOWN, flatten_task.result); } + +TEST_F(TestImageWatcher, NotifyAsyncRequestTimedOut) { + REQUIRE_FEATURE(RBD_FEATURE_EXCLUSIVE_LOCK); + + librbd::ImageCtx *ictx; + ASSERT_EQ(0, open_image(m_image_name, &ictx)); + + md_config_t *conf = ictx->cct->_conf; + int timed_out_seconds = conf->rbd_request_timed_out_seconds; + conf->set_val("rbd_request_timed_out_seconds", "0"); + BOOST_SCOPE_EXIT( (timed_out_seconds)(conf) ) { + conf->set_val("rbd_request_timed_out_seconds", + stringify(timed_out_seconds).c_str()); + } BOOST_SCOPE_EXIT_END; + ASSERT_EQ(0, conf->rbd_request_timed_out_seconds); + + ASSERT_EQ(0, register_image_watch(*ictx)); + ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE, + "auto " + stringify(m_watch_ctx->get_handle()))); + + m_notify_acks = boost::assign::list_of( + std::make_pair(NOTIFY_OP_FLATTEN, create_response_message(0))); + + ProgressContext progress_context; + FlattenTask flatten_task(ictx, &progress_context); + boost::thread thread(boost::ref(flatten_task)); + + ASSERT_TRUE(wait_for_notifies(*ictx)); + + ASSERT_TRUE(thread.timed_join(boost::posix_time::seconds(10))); + ASSERT_EQ(-ERESTART, flatten_task.result); +}