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 2013/04/24 22:36:59 UTC

svn commit: r1471648 - /incubator/mesos/trunk/src/tests/fault_tolerance_tests.cpp

Author: benh
Date: Wed Apr 24 20:36:58 2013
New Revision: 1471648

URL: http://svn.apache.org/r1471648
Log:
Cleaned up fault tolerant tests and fixed a disabled test.

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

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

Modified: incubator/mesos/trunk/src/tests/fault_tolerance_tests.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/tests/fault_tolerance_tests.cpp?rev=1471648&r1=1471647&r2=1471648&view=diff
==============================================================================
--- incubator/mesos/trunk/src/tests/fault_tolerance_tests.cpp (original)
+++ incubator/mesos/trunk/src/tests/fault_tolerance_tests.cpp Wed Apr 24 20:36:58 2013
@@ -357,13 +357,7 @@ TEST_F(FaultToleranceTest, FrameworkRere
 }
 
 
-// TOOD(vinod): Disabling this test for now because
-// of the following race condition breaking this test:
-// We do a driver.launchTasks() after post(noMasterDetected)
-// but since dispatch (which is used by launchTasks()) uses
-// a different queue than post, it might so happen that the latter
-// message is dequeued before the former, thus breaking the test.
-TEST_F(FaultToleranceTest, DISABLED_TaskLost)
+TEST_F(FaultToleranceTest, TaskLost)
 {
   ASSERT_TRUE(GTEST_IS_THREADSAFE);
 
@@ -373,17 +367,7 @@ TEST_F(FaultToleranceTest, DISABLED_Task
   Master m(&a, &files);
   PID<Master> master = process::spawn(&m);
 
-  MockExecutor exec;
-  EXPECT_CALL(exec, registered(_, _, _, _))
-    .Times(0);
-
-  EXPECT_CALL(exec, launchTask(_, _))
-    .Times(0);
-
-  EXPECT_CALL(exec, shutdown(_))
-    .Times(0);
-
-  TestingIsolator isolator(DEFAULT_EXECUTOR_ID, &exec);
+  TestingIsolator isolator;
 
   Slave s(slaveFlags, true, &isolator, &files);
   PID<Slave> slave = process::spawn(&s);
@@ -392,56 +376,51 @@ TEST_F(FaultToleranceTest, DISABLED_Task
 
   MockScheduler sched;
   MesosSchedulerDriver driver(&sched, DEFAULT_FRAMEWORK_INFO, master);
-  vector<Offer> offers;
-  trigger statusUpdateCall, resourceOffersCall;
-  TaskStatus status;
 
-  EXPECT_CALL(sched, registered(&driver, _, _))
-    .Times(1);
+  EXPECT_CALL(sched, registered(&driver, _, _));
 
+  Future<vector<Offer> > offers;
   EXPECT_CALL(sched, resourceOffers(&driver, _))
-    .WillOnce(DoAll(SaveArg<1>(&offers),
-                    Trigger(&resourceOffersCall)))
-    .WillRepeatedly(Return());
-
-  EXPECT_CALL(sched, offerRescinded(&driver, _))
-    .Times(AtMost(1));
+    .WillOnce(FutureArg<1>(&offers))
+    .WillRepeatedly(Return()); // Ignore subsequent offers.
 
-  EXPECT_CALL(sched, statusUpdate(&driver, _))
-    .WillOnce(DoAll(SaveArg<1>(&status),
-                    Trigger(&statusUpdateCall)));
+  Future<process::Message> message =
+    FUTURE_MESSAGE(Eq(FrameworkRegisteredMessage().GetTypeName()), _, _);
 
-  process::Message message;
+  driver.start();
 
-  EXPECT_MESSAGE(Eq(FrameworkRegisteredMessage().GetTypeName()), _, _)
-    .WillOnce(DoAll(SaveArgField<0>(&process::MessageEvent::message, &message),
-                    Return(false)));
+  AWAIT_READY(offers);
+  EXPECT_NE(0u, offers.get().size());
 
-  driver.start();
+  AWAIT_READY(message);
 
-  WAIT_UNTIL(resourceOffersCall);
+  Future<Nothing> disconnected;
+  EXPECT_CALL(sched, disconnected(&driver))
+    .WillOnce(FutureSatisfy(&disconnected));
 
   // Simulate a spurious noMasterDetected event at the scheduler.
-  NoMasterDetectedMessage noMasterDetectedMsg;
-  process::post(message.to, noMasterDetectedMsg);
+  process::post(message.get().to, NoMasterDetectedMessage());
 
-  EXPECT_NE(0u, offers.size());
+  AWAIT_READY(disconnected);
 
   TaskInfo task;
   task.set_name("test task");
   task.mutable_task_id()->set_value("1");
-  task.mutable_slave_id()->MergeFrom(offers[0].slave_id());
-  task.mutable_resources()->MergeFrom(offers[0].resources());
+  task.mutable_slave_id()->MergeFrom(offers.get()[0].slave_id());
+  task.mutable_resources()->MergeFrom(offers.get()[0].resources());
   task.mutable_executor()->MergeFrom(DEFAULT_EXECUTOR_INFO);
 
   vector<TaskInfo> tasks;
   tasks.push_back(task);
 
-  driver.launchTasks(offers[0].id(), tasks);
+  Future<TaskStatus> status;
+  EXPECT_CALL(sched, statusUpdate(&driver, _))
+    .WillOnce(FutureArg<1>(&status));
 
-  WAIT_UNTIL(statusUpdateCall);
+  driver.launchTasks(offers.get()[0].id(), tasks);
 
-  EXPECT_EQ(status.state(), TASK_LOST);
+  AWAIT_READY(status);
+  EXPECT_EQ(TASK_LOST, status.get().state());
 
   driver.stop();
   driver.join();
@@ -788,10 +767,8 @@ TEST_F(FaultToleranceTest, SchedulerExit
   Master m(&a, &files);
   PID<Master> master = process::spawn(&m);
 
-  trigger statusUpdateMsg;
-  process::Message message;
-
   MockExecutor exec;
+
   TestingIsolator isolator(DEFAULT_EXECUTOR_ID, &exec);
 
   Slave s(slaveFlags, true, &isolator, &files);
@@ -802,9 +779,7 @@ TEST_F(FaultToleranceTest, SchedulerExit
   MockScheduler sched;
   MesosSchedulerDriver driver(&sched, DEFAULT_FRAMEWORK_INFO, master);
 
-  FrameworkID frameworkId;
-  EXPECT_CALL(sched, registered(&driver, _, _))
-    .WillOnce(SaveArg<1>(&frameworkId));
+  EXPECT_CALL(sched, registered(&driver, _, _));
 
   Future<vector<Offer> > offers;
   EXPECT_CALL(sched, resourceOffers(&driver, _))
@@ -816,6 +791,8 @@ TEST_F(FaultToleranceTest, SchedulerExit
   AWAIT_READY(offers);
   EXPECT_NE(0u, offers.get().size());
 
+  AWAIT_READY(offers);
+
   TaskInfo task;
   task.set_name("");
   task.mutable_task_id()->set_value("1");
@@ -869,11 +846,11 @@ TEST_F(FaultToleranceTest, SlaveReliable
   Master m(&a, &files);
   PID<Master> master = process::spawn(&m);
 
-  ProcessIsolator isolator;
+  TestingIsolator isolator;
 
   // Drop the first slave registered message, allow subsequent messages.
-  Future<SlaveRegisteredMessage> slaveRegisteredMessage
-    = DROP_PROTOBUF(SlaveRegisteredMessage(), _, _);
+  Future<SlaveRegisteredMessage> slaveRegisteredMessage =
+    DROP_PROTOBUF(SlaveRegisteredMessage(), _, _);
 
   Slave s(slaveFlags, true, &isolator, &files);
   PID<Slave> slave = process::spawn(&s);
@@ -883,8 +860,6 @@ TEST_F(FaultToleranceTest, SlaveReliable
   MockScheduler sched;
   MesosSchedulerDriver driver(&sched, DEFAULT_FRAMEWORK_INFO, master);
 
-  trigger resourceOffersCall;
-
   EXPECT_CALL(sched, registered(&driver, _, _));
 
   Future<Nothing> resourceOffers;
@@ -923,7 +898,7 @@ TEST_F(FaultToleranceTest, SlaveReregist
   Master m(&a, &files);
   PID<Master> master = process::spawn(&m);
 
-  ProcessIsolator isolator;
+  TestingIsolator isolator;
 
   Slave s(slaveFlags, true, &isolator, &files);
   PID<Slave> slave = process::spawn(&s);
@@ -945,7 +920,7 @@ TEST_F(FaultToleranceTest, SlaveReregist
   AWAIT_READY(resourceOffers);
 
   Future<SlaveReregisteredMessage> slaveReregisteredMessage =
-      FUTURE_PROTOBUF(SlaveReregisteredMessage(), _, _);
+    FUTURE_PROTOBUF(SlaveReregisteredMessage(), _, _);
 
   // Simulate a spurious newMasterDetected event (e.g., due to ZooKeeper
   // expiration) at the slave.