You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2011/06/05 10:52:56 UTC

svn commit: r1132164 - /incubator/mesos/trunk/src/tests/test_errors.cpp

Author: benh
Date: Sun Jun  5 08:52:56 2011
New Revision: 1132164

URL: http://svn.apache.org/viewvc?rev=1132164&view=rev
Log:
Moved the error test cases to their own file.

Added:
    incubator/mesos/trunk/src/tests/test_errors.cpp

Added: incubator/mesos/trunk/src/tests/test_errors.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/tests/test_errors.cpp?rev=1132164&view=auto
==============================================================================
--- incubator/mesos/trunk/src/tests/test_errors.cpp (added)
+++ incubator/mesos/trunk/src/tests/test_errors.cpp Sun Jun  5 08:52:56 2011
@@ -0,0 +1,201 @@
+#include <gmock/gmock.h>
+
+#include <mesos_exec.hpp>
+#include <mesos_sched.hpp>
+
+#include <boost/lexical_cast.hpp>
+
+#include "common/date_utils.hpp"
+
+#include "local/local.hpp"
+
+#include "master/master.hpp"
+
+#include "slave/isolation_module.hpp"
+#include "slave/process_based_isolation_module.hpp"
+#include "slave/slave.hpp"
+
+using namespace mesos;
+using namespace mesos::internal;
+
+using boost::lexical_cast;
+
+using mesos::internal::master::Master;
+using mesos::internal::slave::Slave;
+using mesos::internal::slave::Framework;
+
+using std::string;
+using std::map;
+using std::vector;
+
+
+/**
+ * These tests aren't using gmock right now, but at some point we
+ * might move them in that direction.
+ */
+class FixedResponseScheduler : public Scheduler
+{
+public:
+  vector<TaskDescription> response;
+  string errorMessage;
+  
+  FixedResponseScheduler(vector<TaskDescription> _response)
+    : response(_response) {}
+
+  virtual ~FixedResponseScheduler() {}
+
+  virtual ExecutorInfo getExecutorInfo(SchedulerDriver*) {
+    return ExecutorInfo("noexecutor", "");
+  }
+
+  virtual void resourceOffer(SchedulerDriver* d,
+                             OfferID id,
+                             const vector<SlaveOffer>& offers) {
+    LOG(INFO) << "FixedResponseScheduler got a slot offer";
+    d->replyToOffer(id, response, map<string, string>());
+  }
+  
+  virtual void error(SchedulerDriver* d,
+                     int code,
+                     const string& message) {
+    errorMessage = message;
+    d->stop();
+  }
+};
+
+
+TEST(MasterTest, DuplicateTaskIdsInResponse)
+{
+  ASSERT_TRUE(GTEST_IS_THREADSAFE);
+  DateUtils::setMockDate("200102030405");
+  PID master = local::launch(1, 3, 3 * Gigabyte, false, false);
+  vector<TaskDescription> tasks;
+  map<string, string> params;
+  params["cpus"] = "1";
+  params["mem"] = lexical_cast<string>(1 * Gigabyte);
+  tasks.push_back(TaskDescription(1, "200102030405-0-0", "", params, ""));
+  tasks.push_back(TaskDescription(2, "200102030405-0-0", "", params, ""));
+  tasks.push_back(TaskDescription(1, "200102030405-0-0", "", params, ""));
+  FixedResponseScheduler sched(tasks);
+  MesosSchedulerDriver driver(&sched, master);
+  driver.run();
+  EXPECT_EQ("Duplicate task ID: 1", sched.errorMessage);
+  local::shutdown();
+  DateUtils::clearMockDate();
+}
+
+
+TEST(MasterTest, TooMuchMemoryInTask)
+{
+  ASSERT_TRUE(GTEST_IS_THREADSAFE);
+  DateUtils::setMockDate("200102030405");
+  PID master = local::launch(1, 3, 3 * Gigabyte, false, false);
+  vector<TaskDescription> tasks;
+  map<string, string> params;
+  params["cpus"] = "1";
+  params["mem"] = lexical_cast<string>(4 * Gigabyte);
+  tasks.push_back(TaskDescription(1, "200102030405-0-0", "", params, ""));
+  FixedResponseScheduler sched(tasks);
+  MesosSchedulerDriver driver(&sched, master);
+  driver.run();
+  EXPECT_EQ("Too many resources accepted", sched.errorMessage);
+  local::shutdown();
+  DateUtils::clearMockDate();
+}
+
+
+TEST(MasterTest, TooMuchCpuInTask)
+{
+  ASSERT_TRUE(GTEST_IS_THREADSAFE);
+  DateUtils::setMockDate("200102030405");
+  PID master = local::launch(1, 3, 3 * Gigabyte, false, false);
+  vector<TaskDescription> tasks;
+  map<string, string> params;
+  params["cpus"] = "4";
+  params["mem"] = lexical_cast<string>(1 * Gigabyte);
+  tasks.push_back(TaskDescription(1, "200102030405-0-0", "", params, ""));
+  FixedResponseScheduler sched(tasks);
+  MesosSchedulerDriver driver(&sched, master);
+  driver.run();
+  EXPECT_EQ("Too many resources accepted", sched.errorMessage);
+  local::shutdown();
+  DateUtils::clearMockDate();
+}
+
+
+TEST(MasterTest, TooLittleCpuInTask)
+{
+  ASSERT_TRUE(GTEST_IS_THREADSAFE);
+  DateUtils::setMockDate("200102030405");
+  PID master = local::launch(1, 3, 3 * Gigabyte, false, false);
+  vector<TaskDescription> tasks;
+  map<string, string> params;
+  params["cpus"] = "0";
+  params["mem"] = lexical_cast<string>(1 * Gigabyte);
+  tasks.push_back(TaskDescription(1, "200102030405-0-0", "", params, ""));
+  FixedResponseScheduler sched(tasks);
+  MesosSchedulerDriver driver(&sched, master);
+  driver.run();
+  EXPECT_EQ("Invalid task size: <0 CPUs, 1024 MEM>", sched.errorMessage);
+  local::shutdown();
+  DateUtils::clearMockDate();
+}
+
+
+TEST(MasterTest, TooLittleMemoryInTask)
+{
+  ASSERT_TRUE(GTEST_IS_THREADSAFE);
+  DateUtils::setMockDate("200102030405");
+  PID master = local::launch(1, 3, 3 * Gigabyte, false, false);
+  vector<TaskDescription> tasks;
+  map<string, string> params;
+  params["cpus"] = "1";
+  params["mem"] = "1";
+  tasks.push_back(TaskDescription(1, "200102030405-0-0", "", params, ""));
+  FixedResponseScheduler sched(tasks);
+  MesosSchedulerDriver driver(&sched, master);
+  driver.run();
+  EXPECT_EQ("Invalid task size: <1 CPUs, 1 MEM>", sched.errorMessage);
+  local::shutdown();
+  DateUtils::clearMockDate();
+}
+
+
+TEST(MasterTest, TooMuchMemoryAcrossTasks)
+{
+  ASSERT_TRUE(GTEST_IS_THREADSAFE);
+  DateUtils::setMockDate("200102030405");
+  PID master = local::launch(1, 3, 3 * Gigabyte, false, false);
+  vector<TaskDescription> tasks;
+  map<string, string> params;
+  params["cpus"] = "1";
+  params["mem"] = lexical_cast<string>(2 * Gigabyte);
+  tasks.push_back(TaskDescription(1, "200102030405-0-0", "", params, ""));
+  tasks.push_back(TaskDescription(2, "200102030405-0-0", "", params, ""));
+  FixedResponseScheduler sched(tasks);
+  MesosSchedulerDriver driver(&sched, master);
+  driver.run();
+  EXPECT_EQ("Too many resources accepted", sched.errorMessage);
+  local::shutdown();
+  DateUtils::clearMockDate();
+}
+
+
+TEST(MasterTest, TooMuchCpuAcrossTasks)
+{
+  ASSERT_TRUE(GTEST_IS_THREADSAFE);
+  DateUtils::setMockDate("200102030405");
+  PID master = local::launch(1, 3, 3 * Gigabyte, false, false);
+  vector<TaskDescription> tasks;
+  map<string, string> params;
+  params["cpus"] = "2";
+  params["mem"] = lexical_cast<string>(1 * Gigabyte);
+  tasks.push_back(TaskDescription(1, "200102030405-0-0", "", params, ""));
+  tasks.push_back(TaskDescription(2, "200102030405-0-0", "", params, ""));
+  FixedResponseScheduler sched(tasks);
+  MesosSchedulerDriver driver(&sched, master);
+  driver.run();
+  EXPECT_EQ("Too many resources accepted", sched.errorMessage);
+  local::shutdown();
+  DateUtils::clearMockDate();
+}