You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by mp...@apache.org on 2016/02/10 02:37:35 UTC

mesos git commit: Added test: dynamic reservations with same role, different principals.

Repository: mesos
Updated Branches:
  refs/heads/master 42970e2a8 -> b8eb2d86f


Added test: dynamic reservations with same role, different principals.

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


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

Branch: refs/heads/master
Commit: b8eb2d86fe8bbdeca94dbf3a1ef5bd374b676fa5
Parents: 42970e2
Author: Neil Conway <ne...@gmail.com>
Authored: Tue Feb 9 17:02:56 2016 -0800
Committer: Michael Park <mp...@apache.org>
Committed: Tue Feb 9 17:02:56 2016 -0800

----------------------------------------------------------------------
 src/tests/reservation_endpoints_tests.cpp | 79 ++++++++++++++++++++++++++
 1 file changed, 79 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/b8eb2d86/src/tests/reservation_endpoints_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/reservation_endpoints_tests.cpp b/src/tests/reservation_endpoints_tests.cpp
index 35c0935..b560af0 100644
--- a/src/tests/reservation_endpoints_tests.cpp
+++ b/src/tests/reservation_endpoints_tests.cpp
@@ -1244,6 +1244,85 @@ TEST_F(ReservationEndpointsTest, ReserveAndUnreserveNoAuthentication)
   Shutdown();
 }
 
+
+// This test checks that two resource reservations for the same role
+// at the same agent that use different principals are not "merged"
+// into a single reserved resource.
+TEST_F(ReservationEndpointsTest, DifferentPrincipalsSameRole)
+{
+  TestAllocator<> allocator;
+
+  EXPECT_CALL(allocator, initialize(_, _, _, _));
+
+  Try<PID<Master>> master = StartMaster(&allocator);
+  ASSERT_SOME(master);
+
+  Future<SlaveID> slaveId;
+  EXPECT_CALL(allocator, addSlave(_, _, _, _, _))
+    .WillOnce(DoAll(InvokeAddSlave(&allocator),
+                    FutureArg<0>(&slaveId)));
+
+  slave::Flags slaveFlags = CreateSlaveFlags();
+  slaveFlags.resources = "cpus:2;mem:1024";
+
+  Try<PID<Slave>> slave = StartSlave(slaveFlags);
+  ASSERT_SOME(slave);
+
+  FrameworkInfo frameworkInfo = createFrameworkInfo();
+
+  Resources unreserved = Resources::parse("cpus:1;mem:512").get();
+  Resources dynamicallyReserved1 = unreserved.flatten(
+      frameworkInfo.role(),
+      createReservationInfo(DEFAULT_CREDENTIAL.principal()));
+
+  Resources dynamicallyReserved2 = unreserved.flatten(
+      frameworkInfo.role(),
+      createReservationInfo(DEFAULT_CREDENTIAL_2.principal()));
+
+  Future<Response> response = process::http::post(
+      master.get(),
+      "reserve",
+      createBasicAuthHeaders(DEFAULT_CREDENTIAL),
+      createRequestBody(slaveId.get(), dynamicallyReserved1));
+
+  AWAIT_EXPECT_RESPONSE_STATUS_EQ(OK().status, response);
+
+  response = process::http::post(
+      master.get(),
+      "reserve",
+      createBasicAuthHeaders(DEFAULT_CREDENTIAL_2),
+      createRequestBody(slaveId.get(), dynamicallyReserved2));
+
+  AWAIT_EXPECT_RESPONSE_STATUS_EQ(OK().status, response);
+
+  MockScheduler sched;
+  MesosSchedulerDriver driver(
+      &sched, frameworkInfo, master.get(), DEFAULT_CREDENTIAL);
+
+  Future<vector<Offer>> offers;
+
+  EXPECT_CALL(sched, registered(&driver, _, _));
+
+  EXPECT_CALL(sched, resourceOffers(&driver, _))
+    .WillOnce(FutureArg<1>(&offers));
+
+  driver.start();
+
+  AWAIT_READY(offers);
+
+  ASSERT_EQ(1u, offers.get().size());
+  Offer offer = offers.get()[0];
+  Resources resources = Resources(offer.resources());
+
+  EXPECT_TRUE(resources.contains(dynamicallyReserved1));
+  EXPECT_TRUE(resources.contains(dynamicallyReserved2));
+
+  driver.stop();
+  driver.join();
+
+  Shutdown();
+}
+
 } // namespace tests {
 } // namespace internal {
 } // namespace mesos {