Added test for `reconnect` functionality. This change adds a trivial test for testing the `reconnect` method on the scheduler library.
Review: https://reviews.apache.org/r/45409/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/bae4f13f Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/bae4f13f Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/bae4f13f Branch: refs/heads/master Commit: bae4f13f7ad9f35202866b398b7bdd278f6d3fea Parents: 140c82a Author: Anand Mazumdar <mazumdar.an...@gmail.com> Authored: Wed Mar 30 12:00:31 2016 -0700 Committer: Vinod Kone <vinodk...@gmail.com> Committed: Wed Mar 30 12:00:31 2016 -0700 ---------------------------------------------------------------------- src/tests/scheduler_tests.cpp | 64 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/bae4f13f/src/tests/scheduler_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/scheduler_tests.cpp b/src/tests/scheduler_tests.cpp index 917058f..0c66f65 100644 --- a/src/tests/scheduler_tests.cpp +++ b/src/tests/scheduler_tests.cpp @@ -1478,6 +1478,70 @@ TEST_P(SchedulerTest, Request) } +// This test verifies that the scheduler is able to force a reconnection with +// the master. +TEST_P(SchedulerTest, SchedulerReconnect) +{ + master::Flags flags = CreateMasterFlags(); + flags.authenticate_frameworks = false; + + Try<Owned<cluster::Master>> master = StartMaster(flags); + ASSERT_SOME(master); + + auto scheduler = std::make_shared<MockV1HTTPScheduler>(); + auto detector = std::make_shared<StandaloneMasterDetector>(master.get()->pid); + + Future<Nothing> connected; + EXPECT_CALL(*scheduler, connected(_)) + .WillOnce(FutureSatisfy(&connected)); + + ContentType contentType = GetParam(); + + scheduler::TestV1Mesos mesos( + master.get()->pid, contentType, scheduler, detector); + + AWAIT_READY(connected); + + Future<Nothing> disconnected; + EXPECT_CALL(*scheduler, disconnected(_)) + .WillOnce(FutureSatisfy(&disconnected)); + + EXPECT_CALL(*scheduler, connected(_)) + .WillOnce(FutureSatisfy(&connected)); + + // Force a reconnection with the master. This should result in a + // `disconnected` callback followed by a `connected` callback. + mesos.reconnect(); + + AWAIT_READY(disconnected); + + // The scheduler should be able to immediately reconnect with the master. + AWAIT_READY(connected); + + EXPECT_CALL(*scheduler, disconnected(_)) + .WillOnce(FutureSatisfy(&disconnected)); + + // Simulate a spurious master failure event at the scheduler. + detector->appoint(None()); + + AWAIT_READY(disconnected); + + EXPECT_CALL(*scheduler, disconnected(_)) + .Times(0); + + EXPECT_CALL(*scheduler, connected(_)) + .Times(0); + + mesos.reconnect(); + + // Flush any possible remaining events. The mocked scheduler will fail if the + // reconnection attempt resulted in any additional callbacks after the + // scheduler has disconnected. + Clock::pause(); + Clock::settle(); +} + + // TODO(benh): Write test for sending Call::Acknowledgement through // master to slave when Event::Update was generated locally.