This is an automated email from the ASF dual-hosted git repository. bmahler pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mesos.git
commit 3b3ee085582b0a1d116627178cb898c4b6d5c64d Author: Andrei Sekretenko <[email protected]> AuthorDate: Mon Jul 1 23:40:11 2019 -0400 Added a test for suppressing roles via V0 updateFramework(). Review: https://reviews.apache.org/r/70895/ --- src/tests/master/update_framework_tests.cpp | 79 +++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/src/tests/master/update_framework_tests.cpp b/src/tests/master/update_framework_tests.cpp index 8487f6c..6ee7b20 100644 --- a/src/tests/master/update_framework_tests.cpp +++ b/src/tests/master/update_framework_tests.cpp @@ -73,6 +73,7 @@ using process::Promise; using recordio::Decoder; using std::string; +using std::vector; using testing::_; using testing::AtMost; @@ -932,6 +933,84 @@ TEST_F(UpdateFrameworkV0Test, RescindOnRemovingRoles) driver.join(); } + +// Test that framework can suppress roles via updateFramework(): +// - start a master, a driver and a slave +// - wait for offer +// - update suppressed roles via updateFramework +// - add a new slave and make sure we get no offers after that. +TEST_F(UpdateFrameworkV0Test, SuppressedRoles) +{ + mesos::internal::master::Flags masterFlags = CreateMasterFlags(); + Try<Owned<cluster::Master>> master = StartMaster(masterFlags); + ASSERT_SOME(master); + + v1::MockMasterAPISubscriber masterAPISubscriber; + AWAIT_READY(masterAPISubscriber.subscribe(master.get()->pid)); + + // Expect FRAMEWORK_UPDATED event after update. + Future<v1::master::Event::FrameworkUpdated> frameworkUpdated; + EXPECT_CALL(masterAPISubscriber, frameworkUpdated(_)) + .WillOnce(FutureArg<0>(&frameworkUpdated)); + + Owned<MasterDetector> detector = master->get()->createDetector(); + + Try<Owned<cluster::Slave>> slave = StartSlave(detector.get()); + ASSERT_SOME(slave); + + MockScheduler sched; + TestingMesosSchedulerDriver driver( + &sched, detector.get(), DEFAULT_FRAMEWORK_INFO); + + Future<FrameworkID> frameworkId; + EXPECT_CALL(sched, registered(&driver, _, _)) + .WillOnce(FutureArg<1>(&frameworkId)); + + // Expect an offer EXACTLY once (after subscribing and before adding + // the second slave). + Future<vector<Offer>> offers; + EXPECT_CALL(sched, resourceOffers(&driver, _)) + .WillOnce(FutureArg<1>(&offers)); + + driver.start(); + + AWAIT_READY(frameworkId); + + AWAIT_READY(offers); + ASSERT_EQ(1u, offers->size()); + + // Suppress all roles via UPDATE_FRAMEWORK. + FrameworkInfo update = DEFAULT_FRAMEWORK_INFO; + *update.mutable_id() = frameworkId.get(); + + vector<string> suppressedRoles( + update.roles().begin(), update.roles().end()); + + driver.updateFramework(update, suppressedRoles); + + AWAIT_READY(frameworkUpdated); + + Future<Nothing> newAgentAdded; + EXPECT_CALL(masterAPISubscriber, agentAdded(_)) + .WillOnce(FutureSatisfy(&newAgentAdded)); + + Try<Owned<cluster::Slave>> newSlave = StartSlave(detector.get()); + ASSERT_SOME(newSlave); + + AWAIT_READY(newAgentAdded); + + // After the agent has been added, no offers should be generated + // within an allocation interval. + Clock::pause(); + Clock::settle(); + Clock::advance(masterFlags.allocation_interval); + Clock::settle(); + + driver.stop(); + driver.join(); +} + + } // namespace tests { } // namespace internal { } // namespace mesos {
