Repository: mesos Updated Branches: refs/heads/master 3e6b4734a -> 0e8631667
Fixed flakiness in three MULTI_ROLE related tests. Fixed flakiness in following tests: MasterTest.MultiRoleSchedulerUpgrade UpgradeTest.ReregisterOldAgentWithMultiRoleMaster MasterTest.MultiRoleFrameworkReceivesOffers Review: https://reviews.apache.org/r/57191/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/0e863166 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/0e863166 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/0e863166 Branch: refs/heads/master Commit: 0e863166707f903a642f8f835937d267c493f2f5 Parents: 3e6b473 Author: Jay Guo <[email protected]> Authored: Wed Mar 1 13:27:33 2017 -0800 Committer: Benjamin Mahler <[email protected]> Committed: Wed Mar 1 13:27:33 2017 -0800 ---------------------------------------------------------------------- src/tests/master_tests.cpp | 56 +++++++++++++++++++++++----------------- src/tests/upgrade_tests.cpp | 12 ++++----- 2 files changed, 39 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/0e863166/src/tests/master_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/master_tests.cpp b/src/tests/master_tests.cpp index 357a9a4..db5197e 100644 --- a/src/tests/master_tests.cpp +++ b/src/tests/master_tests.cpp @@ -6527,23 +6527,18 @@ TEST_F(MasterTest, AgentRestartNoReregisterRateLimit) // receive two offers, one for each slave, allocated to different roles. TEST_F(MasterTest, MultiRoleFrameworkReceivesOffers) { - Try<Owned<cluster::Master>> master = StartMaster(); + Clock::pause(); + + master::Flags masterFlags = CreateMasterFlags(); + Try<Owned<cluster::Master>> master = StartMaster(masterFlags); ASSERT_SOME(master); Owned<MasterDetector> detector = master.get()->createDetector(); - MockExecutor exec(DEFAULT_EXECUTOR_ID); - TestContainerizer containerizer(&exec); - - slave::Flags flags = CreateSlaveFlags(); - Try<Owned<cluster::Slave>> slave1 = - StartSlave(detector.get(), &containerizer, flags); + // Start first agent. + Try<Owned<cluster::Slave>> slave1 = StartSlave(detector.get()); ASSERT_SOME(slave1); - Try<Owned<cluster::Slave>> slave2 = - StartSlave(detector.get(), &containerizer, flags); - ASSERT_SOME(slave2); - FrameworkInfo framework = DEFAULT_FRAMEWORK_INFO; framework.add_roles("role1"); framework.add_roles("role2"); @@ -6558,27 +6553,41 @@ TEST_F(MasterTest, MultiRoleFrameworkReceivesOffers) EXPECT_CALL(sched, registered(&driver, _, _)) .WillOnce(FutureSatisfy(®istered)); - // Scheduler should receive two offers, one for each role. - Future<vector<Offer>> offers1; - Future<vector<Offer>> offers2; - EXPECT_CALL(sched, resourceOffers(&driver, _)) - .WillOnce(FutureArg<1>(&offers1)) - .WillOnce(FutureArg<1>(&offers2)) - .WillRepeatedly(Return()); // Ignore subsequent offers. - driver.start(); + Clock::settle(); + AWAIT_READY(registered); + Future<vector<Offer>> offers1; + EXPECT_CALL(sched, resourceOffers(&driver, _)) + .WillOnce(FutureArg<1>(&offers1)); + + Clock::advance(masterFlags.allocation_interval); + Clock::settle(); + AWAIT_READY(offers1); EXPECT_NE(0u, offers1->size()); EXPECT_TRUE(offers1.get()[0].has_allocation_info()); + + // Start second agent. + Try<Owned<cluster::Slave>> slave2 = StartSlave(detector.get()); + ASSERT_SOME(slave2); + + Future<vector<Offer>> offers2; + EXPECT_CALL(sched, resourceOffers(&driver, _)) + .WillOnce(FutureArg<1>(&offers2)); + + Clock::advance(masterFlags.allocation_interval); + Clock::settle(); + AWAIT_READY(offers2); EXPECT_NE(0u, offers2->size()); EXPECT_TRUE(offers2.get()[0].has_allocation_info()); - // 1st and 2nd offers should have different roles. - EXPECT_NE( + // We cannot deterministically expect roles for each offer, however we + // could assert that 1st and 2nd offers should have different roles. + ASSERT_NE( offers1.get()[0].allocation_info().role(), offers2.get()[0].allocation_info().role()); @@ -6663,8 +6672,6 @@ TEST_F(MasterTest, MultiRoleSchedulerUpgrade) // Scheduler1 should get an error due to failover. EXPECT_CALL(sched1, error(&driver1, "Framework failed over")); - EXPECT_CALL(exec, shutdown(_)); - driver2.start(); AWAIT_READY(registered2); @@ -6682,6 +6689,9 @@ TEST_F(MasterTest, MultiRoleSchedulerUpgrade) AWAIT_READY(status2); EXPECT_EQ(TASK_RUNNING, status2->state()); + EXPECT_CALL(exec, shutdown(_)) + .Times(AtMost(1)); + driver2.stop(); driver2.join(); } http://git-wip-us.apache.org/repos/asf/mesos/blob/0e863166/src/tests/upgrade_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/upgrade_tests.cpp b/src/tests/upgrade_tests.cpp index 99f56a0..6cdd6d9 100644 --- a/src/tests/upgrade_tests.cpp +++ b/src/tests/upgrade_tests.cpp @@ -142,6 +142,9 @@ TEST_F(UpgradeTest, ReregisterOldAgentWithMultiRoleMaster) EXPECT_CALL(exec, launchTask(_, _)) .WillOnce(SendStatusUpdateFromTask(TASK_RUNNING)); + EXPECT_CALL(exec, shutdown(_)) + .Times(AtMost(1)); + AWAIT_READY(status); EXPECT_EQ(TASK_RUNNING, status.get().state()); @@ -149,17 +152,14 @@ TEST_F(UpgradeTest, ReregisterOldAgentWithMultiRoleMaster) master = StartMaster(masterFlags); ASSERT_SOME(master); - // Simulate a new master detected event on the agent, - // so that the agent will do a re-registration. - detector.appoint(master.get()->pid); - // Cause the scheduler to re-register with the master. Future<Nothing> disconnected; EXPECT_CALL(sched, disconnected(&driver)) .WillOnce(FutureSatisfy(&disconnected)); - EXPECT_CALL(exec, shutdown(_)) - .Times(AtMost(1)); + // Simulate a new master detected event on the agent, + // so that the agent will do a re-registration. + detector.appoint(master.get()->pid); Clock::settle(); AWAIT_READY(disconnected);
