You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ji...@apache.org on 2015/06/11 20:36:23 UTC
[4/6] mesos git commit: Added a SlaveTest to caputure the case when
containerizer usage fails.
Added a SlaveTest to caputure the case when containerizer usage fails.
Review: https://reviews.apache.org/r/35305
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/a97434bd
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/a97434bd
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/a97434bd
Branch: refs/heads/master
Commit: a97434bde5dd1722c0fe2985c370b67f3eb5b049
Parents: b3a006e
Author: Jie Yu <yu...@gmail.com>
Authored: Wed Jun 10 11:17:53 2015 -0700
Committer: Jie Yu <yu...@gmail.com>
Committed: Thu Jun 11 11:31:06 2015 -0700
----------------------------------------------------------------------
src/tests/slave_tests.cpp | 75 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 75 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/a97434bd/src/tests/slave_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/slave_tests.cpp b/src/tests/slave_tests.cpp
index acae497..70fc42d 100644
--- a/src/tests/slave_tests.cpp
+++ b/src/tests/slave_tests.cpp
@@ -1760,6 +1760,81 @@ TEST_F(SlaveTest, ReregisterWithStatusUpdateTaskState)
}
+// This test verifies that the slave should properly handle the case
+// where the containerizer usage call fails when getting the usage
+// information.
+TEST_F(SlaveTest, ContainerizerUsageFailure)
+{
+ Try<PID<Master>> master = StartMaster();
+ ASSERT_SOME(master);
+
+ MockExecutor exec(DEFAULT_EXECUTOR_ID);
+ TestContainerizer containerizer(&exec);
+ StandaloneMasterDetector detector(master.get());
+
+ MockSlave slave(CreateSlaveFlags(), &detector, &containerizer);
+ spawn(slave);
+
+ MockScheduler sched;
+ MesosSchedulerDriver driver(
+ &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+
+ EXPECT_CALL(sched, registered(_, _, _));
+ EXPECT_CALL(exec, registered(_, _, _, _));
+
+ Future<vector<Offer>> offers;
+
+ EXPECT_CALL(sched, resourceOffers(&driver, _))
+ .WillOnce(FutureArg<1>(&offers))
+ .WillRepeatedly(Return()); // Ignore subsequent offers.
+
+ driver.start();
+
+ AWAIT_READY(offers);
+ EXPECT_NE(0u, offers.get().size());
+
+ const Offer& offer = offers.get()[0];
+
+ TaskInfo task = createTask(
+ offer.slave_id(),
+ Resources::parse("cpus:0.1;mem:32").get(),
+ "sleep 1000",
+ exec.id);
+
+ EXPECT_CALL(exec, launchTask(_, _))
+ .WillOnce(SendStatusUpdateFromTask(TASK_RUNNING));
+
+ Future<TaskStatus> status;
+ EXPECT_CALL(sched, statusUpdate(&driver, _))
+ .WillOnce(FutureArg<1>(&status));
+
+ driver.launchTasks(offer.id(), {task});
+
+ AWAIT_READY(status);
+ EXPECT_EQ(TASK_RUNNING, status.get().state());
+
+ // Set up the containerizer so the next usage() will fail.
+ EXPECT_CALL(containerizer, usage(_))
+ .WillOnce(Return(Failure("Injected failure")));
+
+ // We expect that the slave will still returns ResourceUsage but no
+ // statistics will be found.
+ Future<ResourceUsage> usage = slave.usage();
+
+ AWAIT_READY(usage);
+ ASSERT_EQ(1u, usage.get().executors_size());
+ EXPECT_FALSE(usage.get().executors(0).has_statistics());
+
+ driver.stop();
+ driver.join();
+
+ terminate(slave);
+ wait(slave);
+
+ Shutdown();
+}
+
+
// This test verifies that label values can be set for tasks and that
// they are exposed over the slave state endpoint.
TEST_F(SlaveTest, TaskLabels)