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 07:39:11 UTC

svn commit: r1131837 - /incubator/mesos/trunk/src/tests/test_master.cpp

Author: benh
Date: Sun Jun  5 05:39:11 2011
New Revision: 1131837

URL: http://svn.apache.org/viewvc?rev=1131837&view=rev
Log:
Added another test that uses the filtering mechanism.

Modified:
    incubator/mesos/trunk/src/tests/test_master.cpp

Modified: incubator/mesos/trunk/src/tests/test_master.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/tests/test_master.cpp?rev=1131837&r1=1131836&r2=1131837&view=diff
==============================================================================
--- incubator/mesos/trunk/src/tests/test_master.cpp (original)
+++ incubator/mesos/trunk/src/tests/test_master.cpp Sun Jun  5 05:39:11 2011
@@ -310,7 +310,7 @@ public:
     Process::post(slave, S2S_SHUTDOWN);
   }
   
-  void slaveLost(SchedulerDriver* d, SlaveID slaveId) {
+  virtual void slaveLost(SchedulerDriver* d, SlaveID slaveId) {
     slaveLostCalled = true;
     d->stop();
   }
@@ -421,6 +421,82 @@ TEST(MasterTest, SchedulerFailover)
 }
 
 
+class OfferRescindedScheduler : public Scheduler
+{
+public:
+  const PID slave;
+  bool offerRescindedCalled;
+  
+  OfferRescindedScheduler(const PID &_slave)
+    : slave(_slave), offerRescindedCalled(false) {}
+
+  virtual ~OfferRescindedScheduler() {}
+
+  virtual ExecutorInfo getExecutorInfo(SchedulerDriver*) {
+    return ExecutorInfo("noexecutor", "");
+  }
+
+  virtual void resourceOffer(SchedulerDriver* d,
+                             OfferID id,
+                             const vector<SlaveOffer>& offers) {
+    LOG(INFO) << "OfferRescindedScheduler got a slot offer";
+    vector<TaskDescription> tasks;
+    ASSERT_TRUE(offers.size() == 1);
+    const SlaveOffer &offer = offers[0];
+    TaskDescription desc(0, offer.slaveId, "", map<string, string>(), "");
+    tasks.push_back(desc);
+    d->replyToOffer(id, tasks, map<string, string>());
+    Process::post(slave, S2S_SHUTDOWN);
+  }
+
+  virtual void offerRescinded(SchedulerDriver* d, OfferID)
+  {
+    offerRescindedCalled = true;
+    d->stop();
+  }
+};
+
+
+class OfferReplyMessageFilter : public MessageFilter
+{
+public:
+  virtual bool filter(struct msg *msg) {
+    return msg->id == F2M_SLOT_OFFER_REPLY;
+  }
+};
+
+
+TEST(MasterTest, OfferRescinded)
+{
+  ASSERT_TRUE(GTEST_IS_THREADSAFE);
+
+  OfferReplyMessageFilter filter;
+  Process::filter(&filter);
+
+  Master m;
+  PID master = Process::spawn(&m);
+
+  Slave s(Resources(2, 1 * Gigabyte), true);
+  PID slave = Process::spawn(&s);
+
+  BasicMasterDetector detector(master, slave, true);
+
+  OfferRescindedScheduler sched(slave);
+  NexusSchedulerDriver driver(&sched, master);
+
+  driver.run();
+
+  EXPECT_TRUE(sched.offerRescindedCalled);
+
+  Process::wait(slave);
+
+  Process::post(master, M2M_SHUTDOWN);
+  Process::wait(master);
+
+  Process::filter(NULL);
+}
+
+
 class SlavePartitionedScheduler : public Scheduler
 {
 public:
@@ -435,7 +511,7 @@ public:
     return ExecutorInfo("noexecutor", "");
   }
 
-  void slaveLost(SchedulerDriver* d, SlaveID slaveId) {
+  virtual void slaveLost(SchedulerDriver* d, SlaveID slaveId) {
     slaveLostCalled = true;
     d->stop();
   }
@@ -445,7 +521,7 @@ public:
 class HeartbeatMessageFilter : public MessageFilter
 {
 public:
-  bool filter(struct msg *msg) {
+  virtual bool filter(struct msg *msg) {
     return msg->id == SH2M_HEARTBEAT;
   }
 };
@@ -455,6 +531,9 @@ TEST(MasterTest, SlavePartitioned)
 {
   ASSERT_TRUE(GTEST_IS_THREADSAFE);
 
+  HeartbeatMessageFilter filter;
+  Process::filter(&filter);
+
   ProcessClock::pause();
 
   PID master = local::launch(1, 2, 1 * Gigabyte, false, false);
@@ -464,9 +543,6 @@ TEST(MasterTest, SlavePartitioned)
 
   driver.start();
 
-  HeartbeatMessageFilter filter;
-  Process::filter(&filter);
-
   ProcessClock::advance(master::HEARTBEAT_TIMEOUT);
 
   driver.join();
@@ -475,7 +551,7 @@ TEST(MasterTest, SlavePartitioned)
 
   local::shutdown();
 
-  Process::filter(NULL);
-
   ProcessClock::resume();
+
+  Process::filter(NULL);
 }