typedef ::MockSafeTimer SafeTimer;
};
+template <>
+struct FlushTracker<MockTestImageCtx> {
+ FlushTracker(MockTestImageCtx*) {
+ }
+
+ void shut_down() {
+ }
+
+ void flush(Context*) {
+ }
+
+ void start_io(uint64_t) {
+ }
+
+ void finish_io(uint64_t) {
+ }
+
+};
+
} // namespace io
} // namespace librbd
MockSimpleSchedulerObjectDispatch
mock_simple_scheduler_object_dispatch(&mock_image_ctx);
+ io::DispatchResult dispatch_result;
C_SaferCond cond;
Context *on_finish = &cond;
- ASSERT_FALSE(mock_simple_scheduler_object_dispatch.flush(
- FLUSH_SOURCE_USER, {}, nullptr, nullptr, &on_finish, nullptr));
+ ASSERT_TRUE(mock_simple_scheduler_object_dispatch.flush(
+ FLUSH_SOURCE_USER, {}, nullptr, &dispatch_result, &on_finish, nullptr));
+ ASSERT_EQ(io::DISPATCH_RESULT_CONTINUE, dispatch_result);
ASSERT_EQ(on_finish, &cond); // not modified
on_finish->complete(0);
ASSERT_EQ(0, cond.wait());
&object_dispatch_flags, nullptr, &dispatch_result, &on_finish2,
&on_dispatched));
ASSERT_EQ(dispatch_result, io::DISPATCH_RESULT_COMPLETE);
- ASSERT_EQ(on_finish2, &cond2);
+ ASSERT_NE(on_finish2, &cond2);
ASSERT_NE(timer_task, nullptr);
expect_dispatch_delayed_requests(mock_image_ctx, 0);
&object_dispatch_flags, nullptr, &dispatch_result, &on_finish2,
&on_dispatched));
ASSERT_EQ(dispatch_result, io::DISPATCH_RESULT_COMPLETE);
- ASSERT_EQ(on_finish2, &cond2);
+ ASSERT_NE(on_finish2, &cond2);
ASSERT_NE(timer_task, nullptr);
expect_dispatch_delayed_requests(mock_image_ctx, 0);
C_SaferCond cond3;
Context *on_finish3 = &cond3;
- ASSERT_FALSE(mock_simple_scheduler_object_dispatch.flush(
- FLUSH_SOURCE_USER, {}, nullptr, nullptr, &on_finish3, nullptr));
+ ASSERT_TRUE(mock_simple_scheduler_object_dispatch.flush(
+ FLUSH_SOURCE_USER, {}, nullptr, &dispatch_result, &on_finish3, nullptr));
+ ASSERT_EQ(io::DISPATCH_RESULT_CONTINUE, dispatch_result);
ASSERT_EQ(on_finish3, &cond3);
on_finish1->complete(0);
&object_dispatch_flags, nullptr, &dispatch_result, &on_finish2,
&on_dispatched2));
ASSERT_EQ(dispatch_result, io::DISPATCH_RESULT_COMPLETE);
- ASSERT_EQ(on_finish2, &cond2);
+ ASSERT_NE(on_finish2, &cond2);
ASSERT_NE(timer_task, nullptr);
object_off = 0;
&object_dispatch_flags, nullptr, &dispatch_result, &on_finish3,
&on_dispatched3));
ASSERT_EQ(dispatch_result, io::DISPATCH_RESULT_COMPLETE);
- ASSERT_EQ(on_finish3, &cond3);
+ ASSERT_NE(on_finish3, &cond3);
object_off = 10;
data.clear();
&object_dispatch_flags, nullptr, &dispatch_result, &on_finish4,
&on_dispatched4));
ASSERT_EQ(dispatch_result, io::DISPATCH_RESULT_COMPLETE);
- ASSERT_EQ(on_finish4, &cond4);
+ ASSERT_NE(on_finish4, &cond4);
object_off = 30;
data.clear();
&object_dispatch_flags, nullptr, &dispatch_result, &on_finish5,
&on_dispatched5));
ASSERT_EQ(dispatch_result, io::DISPATCH_RESULT_COMPLETE);
- ASSERT_EQ(on_finish5, &cond5);
+ ASSERT_NE(on_finish5, &cond5);
object_off = 50;
data.clear();
&object_dispatch_flags, nullptr, &dispatch_result, &on_finish6,
&on_dispatched6));
ASSERT_EQ(dispatch_result, io::DISPATCH_RESULT_COMPLETE);
- ASSERT_EQ(on_finish6, &cond6);
+ ASSERT_NE(on_finish6, &cond6);
// expect two requests dispatched:
// 0~40 (merged 0~10, 10~10, 20~10, 30~10) and 50~10
&object_dispatch_flags, nullptr, &dispatch_result, &on_finish2,
&on_dispatched2));
ASSERT_EQ(dispatch_result, io::DISPATCH_RESULT_COMPLETE);
- ASSERT_EQ(on_finish2, &cond2);
+ ASSERT_NE(on_finish2, &cond2);
ASSERT_NE(timer_task, nullptr);
expect_dispatch_delayed_requests(mock_image_ctx, 0);
&object_dispatch_flags, nullptr, &dispatch_result, &on_finish2,
&on_dispatched2));
ASSERT_EQ(dispatch_result, io::DISPATCH_RESULT_COMPLETE);
- ASSERT_EQ(on_finish2, &cond2);
+ ASSERT_NE(on_finish2, &cond2);
ASSERT_NE(timer_task, nullptr);
// write (3) 10~10 (delayed)
0, object_off, std::move(data), mock_image_ctx.snapc, 0, {},
&object_dispatch_flags, nullptr, &dispatch_result, &on_finish3,
&on_dispatched3));
- ASSERT_EQ(on_finish3, &cond3);
+ ASSERT_NE(on_finish3, &cond3);
// discard (1) (non-seq io)
// will dispatch the delayed writes (2) and (3) and wrap on_finish
0, object_off, std::move(data), mock_image_ctx.snapc, 0, {},
&object_dispatch_flags, nullptr, &dispatch_result, &on_finish5,
&on_dispatched5));
- ASSERT_EQ(on_finish5, &cond5);
+ ASSERT_NE(on_finish5, &cond5);
ASSERT_NE(timer_task, nullptr);
// discard (2) (non-seq io)
0, object_off, std::move(data), mock_image_ctx.snapc, 0, {},
&object_dispatch_flags, nullptr, &dispatch_result, &on_finish7,
&on_dispatched7));
- ASSERT_EQ(on_finish7, &cond7);
+ ASSERT_NE(on_finish7, &cond7);
ASSERT_NE(timer_task, nullptr);
// write (1) finishes
&object_dispatch_flags, nullptr, &dispatch_result, &on_finish2,
&on_dispatched2));
ASSERT_EQ(dispatch_result, io::DISPATCH_RESULT_COMPLETE);
- ASSERT_EQ(on_finish2, &cond2);
+ ASSERT_NE(on_finish2, &cond2);
ASSERT_NE(timer_task, nullptr);
// send 2 writes to object 1
&object_dispatch_flags, nullptr, &dispatch_result, &on_finish4,
&on_dispatched4));
ASSERT_EQ(dispatch_result, io::DISPATCH_RESULT_COMPLETE);
- ASSERT_EQ(on_finish4, &cond4);
+ ASSERT_NE(on_finish4, &cond4);
// finish write (1) to object 0
expect_dispatch_delayed_requests(mock_image_ctx, 0);
&object_dispatch_flags, nullptr, &dispatch_result, &on_finish2,
&on_dispatched));
ASSERT_EQ(dispatch_result, io::DISPATCH_RESULT_COMPLETE);
- ASSERT_EQ(on_finish2, &cond2);
+ ASSERT_NE(on_finish2, &cond2);
ASSERT_NE(timer_task, nullptr);
expect_dispatch_delayed_requests(mock_image_ctx, 0);