You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by gy...@apache.org on 2017/02/11 02:34:46 UTC

mesos git commit: Added a test to ensure multi-role framework receiving offers.

Repository: mesos
Updated Branches:
  refs/heads/master a7b67fa82 -> 0efba116d


Added a test to ensure multi-role framework receiving offers.

This test ensures that multi-role framework should receive offers for
each of its roles.

Review: https://reviews.apache.org/r/56370/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/0efba116
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/0efba116
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/0efba116

Branch: refs/heads/master
Commit: 0efba116daf30258524d423fc65c07dd6db15431
Parents: a7b67fa
Author: Jay Guo <gu...@gmail.com>
Authored: Sat Feb 11 10:23:46 2017 +0800
Committer: Guangya Liu <gy...@gmail.com>
Committed: Sat Feb 11 10:34:28 2017 +0800

----------------------------------------------------------------------
 src/tests/master_tests.cpp | 66 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/0efba116/src/tests/master_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_tests.cpp b/src/tests/master_tests.cpp
index 3b4123b..9a7a953 100644
--- a/src/tests/master_tests.cpp
+++ b/src/tests/master_tests.cpp
@@ -6325,6 +6325,72 @@ TEST_F(MasterTest, AgentRestartNoReregisterRateLimit)
   driver.join();
 }
 
+
+// This test ensures that a multi-role framework can receive offers
+// for different roles it subscribes with. We start two slaves and
+// launch one multi-role framework with two roles. The framework should
+// receive two offers, one for each slave, allocated to different roles.
+TEST_F(MasterTest, MultiRoleFrameworkReceivesOffers)
+{
+  Try<Owned<cluster::Master>> master = StartMaster();
+  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);
+  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");
+  framework.add_capabilities()->set_type(
+      FrameworkInfo::Capability::MULTI_ROLE);
+
+  MockScheduler sched;
+  MesosSchedulerDriver driver(
+      &sched, framework, master.get()->pid, DEFAULT_CREDENTIAL);
+
+  Future<Nothing> registered;
+  EXPECT_CALL(sched, registered(&driver, _, _))
+    .WillOnce(FutureSatisfy(&registered));
+
+  // 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();
+
+  AWAIT_READY(registered);
+
+  AWAIT_READY(offers1);
+  EXPECT_NE(0u, offers1->size());
+  EXPECT_TRUE(offers1.get()[0].has_allocation_info());
+  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(
+      offers1.get()[0].allocation_info().role(),
+      offers2.get()[0].allocation_info().role());
+
+  driver.stop();
+  driver.join();
+}
+
 } // namespace tests {
 } // namespace internal {
 } // namespace mesos {