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 3d8fcaba6428d7865f5de230ab7ab59377c585cf Author: Andrei Sekretenko <[email protected]> AuthorDate: Wed Jul 3 17:00:45 2019 -0400 Added a test for adding a role in a suppressed state. Review: https://reviews.apache.org/r/70965/ --- src/tests/master/update_framework_tests.cpp | 62 ++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/src/tests/master/update_framework_tests.cpp b/src/tests/master/update_framework_tests.cpp index 6ee7b20..9e3cbe0 100644 --- a/src/tests/master/update_framework_tests.cpp +++ b/src/tests/master/update_framework_tests.cpp @@ -72,6 +72,8 @@ using process::Promise; using recordio::Decoder; +using google::protobuf::RepeatedPtrField; + using std::string; using std::vector; @@ -190,7 +192,8 @@ class UpdateFrameworkTest : public MesosTest {}; static Future<APIResult> callUpdateFramework( Mesos* mesos, - const FrameworkInfo& info) + const FrameworkInfo& info, + const vector<string>& suppressedRoles = {}) { CHECK(info.has_id()); @@ -198,6 +201,8 @@ static Future<APIResult> callUpdateFramework( call.set_type(Call::UPDATE_FRAMEWORK); *call.mutable_framework_id() = info.id(); *call.mutable_update_framework()->mutable_framework_info() = info; + *call.mutable_update_framework()->mutable_suppressed_roles() = + RepeatedPtrField<string>(suppressedRoles.begin(), suppressedRoles.end()); return mesos->call(call); } @@ -602,6 +607,61 @@ TEST_F(UpdateFrameworkTest, RescindOnRemovingRoles) } +// This test ensures that it is possible to add +// a suppressed role via UPDATE_FRAMEWORK. +TEST_F(UpdateFrameworkTest, AddSuppressedRole) +{ + mesos::internal::master::Flags masterFlags = CreateMasterFlags(); + Try<Owned<cluster::Master>> master = StartMaster(masterFlags); + ASSERT_SOME(master); + + Owned<MasterDetector> detector = master->get()->createDetector(); + + mesos::internal::slave::Flags slaveFlags = CreateSlaveFlags(); + Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags); + ASSERT_SOME(slave); + + auto scheduler = std::make_shared<MockHTTPScheduler>(); + + // Initially, the framework subscribes with no roles. + FrameworkInfo initialFrameworkInfo = DEFAULT_FRAMEWORK_INFO; + initialFrameworkInfo.clear_roles(); + + Future<Nothing> connected; + EXPECT_CALL(*scheduler, connected(_)) + .WillOnce(SendSubscribe(initialFrameworkInfo)); + + EXPECT_CALL(*scheduler, heartbeat(_)) + .WillRepeatedly(Return()); // Ignore heartbeats. + + Future<Event::Subscribed> subscribed; + + EXPECT_CALL(*scheduler, subscribed(_, _)) + .WillOnce(FutureArg<1>(&subscribed)); + + // Expect that the framework gets no offers before update. + EXPECT_CALL(*scheduler, offers(_, _)) + .Times(AtMost(0)); + + TestMesos mesos(master->get()->pid, ContentType::PROTOBUF, scheduler); + + AWAIT_READY(subscribed); + + // Add a suppressed role. + FrameworkInfo update = initialFrameworkInfo; + *update.mutable_id() = subscribed->framework_id(); + update.add_roles("new_role"); + + AWAIT_READY(callUpdateFramework(&mesos, update, {"new_role"})); + + // Trigger allocation to ensure that offers are not generated. + Clock::pause(); + Clock::settle(); + Clock::advance(masterFlags.allocation_interval); + Clock::settle(); +} + + } // namespace scheduler { } // namespace v1 {
