Repository: mesos
Updated Branches:
  refs/heads/master 0e8631667 -> c3964fb17


Expose offer allocation info within the master /state endpoint.

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


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

Branch: refs/heads/master
Commit: 1235e29bdbd75b1c12ab6c0878e617bc625d9793
Parents: 0e86316
Author: Benjamin Mahler <[email protected]>
Authored: Thu Feb 23 17:16:05 2017 -0800
Committer: Benjamin Mahler <[email protected]>
Committed: Wed Mar 1 14:08:22 2017 -0800

----------------------------------------------------------------------
 src/master/http.cpp        |  1 +
 src/tests/master_tests.cpp | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/1235e29b/src/master/http.cpp
----------------------------------------------------------------------
diff --git a/src/master/http.cpp b/src/master/http.cpp
index 6e5178e..37b96c0 100644
--- a/src/master/http.cpp
+++ b/src/master/http.cpp
@@ -146,6 +146,7 @@ static void json(JSON::ObjectWriter* writer, const Offer& 
offer)
 {
   writer->field("id", offer.id().value());
   writer->field("framework_id", offer.framework_id().value());
+  writer->field("allocation_info", JSON::Protobuf(offer.allocation_info()));
   writer->field("slave_id", offer.slave_id().value());
   writer->field("resources", Resources(offer.resources()));
 }

http://git-wip-us.apache.org/repos/asf/mesos/blob/1235e29b/src/tests/master_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_tests.cpp b/src/tests/master_tests.cpp
index db5197e..b9dfe9e 100644
--- a/src/tests/master_tests.cpp
+++ b/src/tests/master_tests.cpp
@@ -4032,9 +4032,23 @@ TEST_F(MasterTest, StateEndpoint)
 // currently; add more to this test.
 TEST_F(MasterTest, StateEndpointFrameworkInfo)
 {
+  Clock::pause();
+
   Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
+  Future<SlaveRegisteredMessage> slaveRegisteredMessage =
+    FUTURE_PROTOBUF(SlaveRegisteredMessage(), _, _);
+
+  slave::Flags agentFlags = CreateSlaveFlags();
+  Owned<MasterDetector> detector = master.get()->createDetector();
+  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), agentFlags);
+  ASSERT_SOME(slave);
+
+  Clock::advance(agentFlags.registration_backoff_factor);
+  Clock::advance(agentFlags.authentication_backoff_factor);
+  AWAIT_READY(slaveRegisteredMessage);
+
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
   frameworkInfo.set_webui_url("http://localhost:8080/";);
 
@@ -4057,9 +4071,14 @@ TEST_F(MasterTest, StateEndpointFrameworkInfo)
   EXPECT_CALL(sched, registered(&driver, _, _))
     .WillOnce(FutureSatisfy(&registered));
 
+  Future<Nothing> resourceOffers;
+  EXPECT_CALL(sched, resourceOffers(&driver, _))
+    .WillOnce(FutureSatisfy(&resourceOffers));
+
   driver.start();
 
   AWAIT_READY(registered);
+  AWAIT_READY(resourceOffers);
 
   Future<Response> response = process::http::get(
       master.get()->pid,
@@ -4105,6 +4124,19 @@ TEST_F(MasterTest, StateEndpointFrameworkInfo)
 
   EXPECT_EQ(capabilities, actual);
 
+  EXPECT_EQ(1u, framework.values.count("offers"));
+  EXPECT_TRUE(framework.values.at("offers").is<JSON::Array>());
+  EXPECT_EQ(1u, framework.values.at("offers").as<JSON::Array>().values.size());
+
+  JSON::Object offer = framework.values.at("offers")
+    .as<JSON::Array>().values[0].as<JSON::Object>();
+
+  JSON::Object allocationInfo;
+  allocationInfo.values["role"] = frameworkInfo.role();
+
+  EXPECT_EQ(1u, offer.values.count("allocation_info"));
+  EXPECT_EQ(allocationInfo, offer.values.at("allocation_info"));
+
   driver.stop();
   driver.join();
 }

Reply via email to