Repository: mesos Updated Branches: refs/heads/master 44d6ceb2c -> 5c9529777
Added test to verify fix for MESOS-2771. Review: https://reviews.apache.org/r/34737 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/5c952977 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/5c952977 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/5c952977 Branch: refs/heads/master Commit: 5c9529777ee84fab428cafb07601e47204afb193 Parents: 44d6ceb Author: Niklas Nielsen <[email protected]> Authored: Thu May 28 12:50:32 2015 -0700 Committer: Niklas Q. Nielsen <[email protected]> Committed: Thu May 28 12:51:01 2015 -0700 ---------------------------------------------------------------------- src/tests/mesos.hpp | 6 ++++++ src/tests/monitor_tests.cpp | 46 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/5c952977/src/tests/mesos.hpp ---------------------------------------------------------------------- diff --git a/src/tests/mesos.hpp b/src/tests/mesos.hpp index b8f7a2f..ac986a0 100644 --- a/src/tests/mesos.hpp +++ b/src/tests/mesos.hpp @@ -330,6 +330,12 @@ protected: DEFAULT_EXECUTOR_INFO.executor_id() +#define DEFAULT_CONTAINER_ID \ + ({ ContainerID containerId; \ + containerId.set_value("container"); \ + containerId; }) + + #define CREATE_COMMAND_INFO(command) \ ({ CommandInfo commandInfo; \ commandInfo.set_value(command); \ http://git-wip-us.apache.org/repos/asf/mesos/blob/5c952977/src/tests/monitor_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/monitor_tests.cpp b/src/tests/monitor_tests.cpp index ca3b7f4..6de8b1f 100644 --- a/src/tests/monitor_tests.cpp +++ b/src/tests/monitor_tests.cpp @@ -37,6 +37,7 @@ #include "slave/monitor.hpp" #include "tests/containerizer.hpp" +#include "tests/mesos.hpp" using process::Clock; using process::Future; @@ -188,6 +189,51 @@ TEST(MonitorTest, Statistics) AWAIT_EXPECT_RESPONSE_BODY_EQ("[]", response); } + +// Test for correct handling of the statistics.json endpoint when +// monitoring of a container is stopped. +TEST(MonitorTest, UsageFailure) +{ + TestContainerizer containerizer; + + // Test containerizer is set up to: + // 1) Synchronize test with Containerizer::usage() + // 2) After that, stop monitoring the container. + Future<Nothing> usage; + process::Promise<ResourceStatistics> failPromise; + EXPECT_CALL(containerizer, usage(DEFAULT_CONTAINER_ID)) + .WillOnce(DoAll(FutureSatisfy(&usage), + Return(failPromise.future()))); + + slave::ResourceMonitor monitor(&containerizer); + + AWAIT_READY(monitor.start(DEFAULT_CONTAINER_ID, DEFAULT_EXECUTOR_INFO)); + + // Induce a call to usage(). + process::UPID upid("monitor", process::address()); + Future<Response> response = process::http::get(upid, "statistics.json"); + + // Usage was called, but Future<ResourceStatistics> is still + // unsatisfied and monitor is blocked. + AWAIT_READY(usage); + + // Stop monitoring the container. + AWAIT_READY(monitor.stop(DEFAULT_CONTAINER_ID)); + + // Fail the future to the collected container statistic. + failPromise.set(process::Failure("Injected failure")); + + // Verify an empty response. + AWAIT_READY(response); + + AWAIT_EXPECT_RESPONSE_STATUS_EQ(OK().status, response); + AWAIT_EXPECT_RESPONSE_HEADER_EQ( + "application/json", + "Content-Type", + response); + AWAIT_EXPECT_RESPONSE_BODY_EQ("[]", response); +} + } // namespace tests { } // namespace internal { } // namespace mesos {
