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 2012/11/08 06:51:51 UTC

svn commit: r1406932 [2/2] - in /incubator/mesos/trunk/src: ./ local/ master/ sched/ tests/

Modified: incubator/mesos/trunk/src/tests/master_tests.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/tests/master_tests.cpp?rev=1406932&r1=1406931&r2=1406932&view=diff
==============================================================================
--- incubator/mesos/trunk/src/tests/master_tests.cpp (original)
+++ incubator/mesos/trunk/src/tests/master_tests.cpp Thu Nov  8 05:51:50 2012
@@ -32,8 +32,10 @@
 
 #include "flags/flags.hpp"
 
+#include "master/allocator.hpp"
 #include "master/flags.hpp"
 #include "master/frameworks_manager.hpp"
+#include "master/hierarchical_allocator_process.hpp"
 #include "master/master.hpp"
 
 #include <process/dispatch.hpp>
@@ -48,9 +50,10 @@ using namespace mesos;
 using namespace mesos::internal;
 using namespace mesos::internal::tests;
 
+using mesos::internal::master::Allocator;
 using mesos::internal::master::FrameworksManager;
 using mesos::internal::master::FrameworksStorage;
-
+using mesos::internal::master::HierarchicalDRFAllocatorProcess;
 using mesos::internal::master::Master;
 
 using mesos::internal::slave::Slave;
@@ -75,7 +78,8 @@ TEST(MasterTest, TaskRunning)
 {
   ASSERT_TRUE(GTEST_IS_THREADSAFE);
 
-  TestAllocatorProcess a;
+  HierarchicalDRFAllocatorProcess allocator;
+  Allocator a(&allocator);
   Files files;
   Master m(&a, &files);
   PID<Master> master = process::spawn(&m);
@@ -122,7 +126,8 @@ TEST(MasterTest, TaskRunning)
     .WillRepeatedly(Return());
 
   EXPECT_CALL(sched, statusUpdate(&driver, _))
-    .WillOnce(DoAll(SaveArg<1>(&status), Trigger(&statusUpdateCall)));
+    .WillOnce(DoAll(SaveArg<1>(&status),
+                    Trigger(&statusUpdateCall)));
 
   driver.start();
 
@@ -169,7 +174,8 @@ TEST(MasterTest, KillTask)
 {
   ASSERT_TRUE(GTEST_IS_THREADSAFE);
 
-  TestAllocatorProcess a;
+  HierarchicalDRFAllocatorProcess allocator;
+  Allocator a(&allocator);
   Files files;
   Master m(&a, &files);
   PID<Master> master = process::spawn(&m);
@@ -219,7 +225,8 @@ TEST(MasterTest, KillTask)
     .WillRepeatedly(Return());
 
   EXPECT_CALL(sched, statusUpdate(&driver, _))
-    .WillOnce(DoAll(SaveArg<1>(&status), Trigger(&statusUpdateCall)));
+    .WillOnce(DoAll(SaveArg<1>(&status),
+                    Trigger(&statusUpdateCall)));
 
   driver.start();
 
@@ -267,7 +274,8 @@ TEST(MasterTest, StatusUpdateAck)
 {
   ASSERT_TRUE(GTEST_IS_THREADSAFE);
 
-  TestAllocatorProcess a;
+  HierarchicalDRFAllocatorProcess allocator;
+  Allocator a(&allocator);
   Files files;
   Master m(&a, &files);
   PID<Master> master = process::spawn(&m);
@@ -364,7 +372,8 @@ TEST(MasterTest, RecoverResources)
 {
   ASSERT_TRUE(GTEST_IS_THREADSAFE);
 
-  TestAllocatorProcess a;
+  HierarchicalDRFAllocatorProcess allocator;
+  Allocator a(&allocator);
   Files files;
   Master m(&a, &files);
   PID<Master> master = process::spawn(&m);
@@ -414,7 +423,7 @@ TEST(MasterTest, RecoverResources)
 
   EXPECT_CALL(sched, statusUpdate(&driver, _))
     .WillRepeatedly(DoAll(SaveArg<1>(&status),
-			  Trigger(&statusUpdateCall)));
+			                    Trigger(&statusUpdateCall)));
 
   driver.start();
 
@@ -506,7 +515,8 @@ TEST(MasterTest, FrameworkMessage)
 {
   ASSERT_TRUE(GTEST_IS_THREADSAFE);
 
-  TestAllocatorProcess a;
+  HierarchicalDRFAllocatorProcess allocator;
+  Allocator a(&allocator);
   Files files;
   Master m(&a, &files);
   PID<Master> master = process::spawn(&m);
@@ -564,7 +574,8 @@ TEST(MasterTest, FrameworkMessage)
     .WillRepeatedly(Return());
 
   EXPECT_CALL(sched, statusUpdate(&schedDriver, _))
-    .WillOnce(DoAll(SaveArg<1>(&status), Trigger(&statusUpdateCall)));
+    .WillOnce(DoAll(SaveArg<1>(&status),
+                    Trigger(&statusUpdateCall)));
 
   EXPECT_CALL(sched, frameworkMessage(&schedDriver, _, _, _))
     .WillOnce(DoAll(SaveArg<3>(&schedData),
@@ -627,7 +638,8 @@ TEST(MasterTest, MultipleExecutors)
 {
   ASSERT_TRUE(GTEST_IS_THREADSAFE);
 
-  TestAllocatorProcess a;
+  HierarchicalDRFAllocatorProcess allocator;
+  Allocator a(&allocator);
   Files files;
   Master m(&a, &files);
   PID<Master> master = process::spawn(&m);
@@ -698,8 +710,10 @@ TEST(MasterTest, MultipleExecutors)
     .WillRepeatedly(Return());
 
   EXPECT_CALL(sched, statusUpdate(&driver, _))
-    .WillOnce(DoAll(SaveArg<1>(&status1), Trigger(&statusUpdateCall1)))
-    .WillOnce(DoAll(SaveArg<1>(&status2), Trigger(&statusUpdateCall2)));
+    .WillOnce(DoAll(SaveArg<1>(&status1),
+                    Trigger(&statusUpdateCall1)))
+    .WillOnce(DoAll(SaveArg<1>(&status2),
+                    Trigger(&statusUpdateCall2)));
 
   driver.start();
 
@@ -767,7 +781,8 @@ TEST(MasterTest, MasterInfo)
 {
   ASSERT_TRUE(GTEST_IS_THREADSAFE);
 
-  TestAllocatorProcess a;
+  HierarchicalDRFAllocatorProcess allocator;
+  Allocator a(&allocator);
   Files files;
   Master m(&a, &files);
   PID<Master> master = process::spawn(&m);
@@ -822,7 +837,8 @@ TEST(MasterTest, MasterInfoOnReElection)
 {
   ASSERT_TRUE(GTEST_IS_THREADSAFE);
 
-  TestAllocatorProcess a;
+  HierarchicalDRFAllocatorProcess allocator;
+  Allocator a(&allocator);
   Files files;
   Master m(&a, &files);
   PID<Master> master = process::spawn(&m);
@@ -852,7 +868,8 @@ TEST(MasterTest, MasterInfoOnReElection)
     .WillOnce(Trigger(&registeredCall));
 
   EXPECT_CALL(sched, reregistered(&driver, _))
-    .WillOnce(DoAll(SaveArg<1>(&masterInfo),Trigger(&reregisteredCall)));
+    .WillOnce(DoAll(SaveArg<1>(&masterInfo),
+                    Trigger(&reregisteredCall)));
 
   EXPECT_CALL(sched, resourceOffers(&driver, _))
     .WillRepeatedly(Return());
@@ -916,7 +933,8 @@ TEST_F(WhitelistFixture, WhitelistSlave)
   string hosts = hostname.get() + "\n" + "dummy-slave";
   ASSERT_SOME(os::write(path, hosts)) << "Error writing whitelist";
 
-  TestAllocatorProcess a;
+  HierarchicalDRFAllocatorProcess allocator;
+  Allocator a(&allocator);
   Files files;
   flags::Flags<logging::Flags, master::Flags> flags;
   flags.whitelist = "file://" + path;
@@ -926,7 +944,8 @@ TEST_F(WhitelistFixture, WhitelistSlave)
   trigger slaveRegisteredMsg;
 
   EXPECT_MESSAGE(Eq(SlaveRegisteredMessage().GetTypeName()), _, _)
-    .WillOnce(DoAll(Trigger(&slaveRegisteredMsg), Return(false)));
+    .WillOnce(DoAll(Trigger(&slaveRegisteredMsg),
+                    Return(false)));
 
   MockExecutor exec;
 
@@ -992,7 +1011,8 @@ TEST(MasterTest, MasterLost)
 {
   ASSERT_TRUE(GTEST_IS_THREADSAFE);
 
-  TestAllocatorProcess a;
+  HierarchicalDRFAllocatorProcess allocator;
+  Allocator a(&allocator);
   Files files;
   Master m(&a, &files);
   PID<Master> master = process::spawn(&m);

Modified: incubator/mesos/trunk/src/tests/resource_offers_tests.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/tests/resource_offers_tests.cpp?rev=1406932&r1=1406931&r2=1406932&view=diff
==============================================================================
--- incubator/mesos/trunk/src/tests/resource_offers_tests.cpp (original)
+++ incubator/mesos/trunk/src/tests/resource_offers_tests.cpp Thu Nov  8 05:51:50 2012
@@ -29,6 +29,8 @@
 
 #include "local/local.hpp"
 
+#include "master/allocator.hpp"
+#include "master/hierarchical_allocator_process.hpp"
 #include "master/master.hpp"
 
 #include "slave/slave.hpp"
@@ -39,6 +41,8 @@ using namespace mesos;
 using namespace mesos::internal;
 using namespace mesos::internal::tests;
 
+using mesos::internal::master::Allocator;
+using mesos::internal::master::HierarchicalDRFAllocatorProcess;
 using mesos::internal::master::Master;
 
 using mesos::internal::slave::Slave;
@@ -453,28 +457,27 @@ TEST(ResourceOffersTest, Request)
   ASSERT_TRUE(GTEST_IS_THREADSAFE);
 
   MockScheduler sched;
-  MockAllocator<TestAllocatorProcess > allocator;
 
-  EXPECT_CALL(allocator, initialize(_, _))
-    .WillOnce(Return());
+  MockAllocatorProcess<HierarchicalDRFAllocatorProcess> allocator;
 
-  EXPECT_CALL(allocator, frameworkAdded(_, _, _))
-    .WillOnce(Return());
+  EXPECT_CALL(allocator, initialize(_, _));
 
-  EXPECT_CALL(allocator, frameworkDeactivated(_))
-    .WillRepeatedly(Return());
+  EXPECT_CALL(allocator, frameworkAdded(_, _, _));
 
-  EXPECT_CALL(allocator, frameworkRemoved(_))
-    .WillRepeatedly(Return());
+  EXPECT_CALL(allocator, frameworkDeactivated(_));
+
+  EXPECT_CALL(allocator, frameworkRemoved(_));
 
   EXPECT_CALL(allocator, slaveAdded(_, _, _))
-    .WillRepeatedly(Return());
+    .WillRepeatedly(Return()); // Test may finish before slave registers.
 
   EXPECT_CALL(allocator, slaveRemoved(_))
-    .WillRepeatedly(Return());
+    .WillRepeatedly(Return()); // Test may finish before slave registers.
+
+  Allocator a(&allocator);
 
   PID<Master> master = local::launch(
-      1, 2, 1 * Gigabyte, 1 * Gigabyte, false, &allocator);
+      1, 2, 1 * Gigabyte, 1 * Gigabyte, false, &a);
 
   MesosSchedulerDriver driver(&sched, DEFAULT_FRAMEWORK_INFO, master);
 
@@ -494,7 +497,6 @@ TEST(ResourceOffersTest, Request)
   requestsSent.push_back(request);
 
   trigger resourcesRequestedCall;
-
   EXPECT_CALL(allocator, resourcesRequested(_, _))
     .WillOnce(DoAll(SaveArg<1>(&requestsReceived),
                     Trigger(&resourcesRequestedCall)));
@@ -518,7 +520,8 @@ TEST(ResourceOffersTest, TasksExecutorIn
 {
   ASSERT_TRUE(GTEST_IS_THREADSAFE);
 
-  TestAllocatorProcess a;
+  HierarchicalDRFAllocatorProcess allocator;
+  Allocator a(&allocator);
   Files files;
   Master m(&a, &files);
   PID<Master> master = process::spawn(&m);

Modified: incubator/mesos/trunk/src/tests/utils.hpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/tests/utils.hpp?rev=1406932&r1=1406931&r2=1406932&view=diff
==============================================================================
--- incubator/mesos/trunk/src/tests/utils.hpp (original)
+++ incubator/mesos/trunk/src/tests/utils.hpp Thu Nov  8 05:51:50 2012
@@ -233,46 +233,57 @@ public:
 
 
 template <typename T = master::AllocatorProcess>
-class MockAllocator : public master::AllocatorProcess
+class MockAllocatorProcess : public master::AllocatorProcess
 {
 public:
-  MockAllocator() {
+  MockAllocatorProcess()
+  {
+    // Spawn the underlying allocator process.
+    process::spawn(real);
+
     ON_CALL(*this, initialize(_, _))
-      .WillByDefault(Invoke(&real, &T::initialize));
+      .WillByDefault(InvokeInitialize(this));
 
     ON_CALL(*this, frameworkAdded(_, _, _))
-      .WillByDefault(Invoke(&real, &T::frameworkAdded));
+      .WillByDefault(InvokeFrameworkAdded(this));
 
     ON_CALL(*this, frameworkRemoved(_))
-      .WillByDefault(Invoke(&real, &T::frameworkRemoved));
+      .WillByDefault(InvokeFrameworkRemoved(this));
 
     ON_CALL(*this, frameworkActivated(_, _))
-      .WillByDefault(Invoke(&real, &T::frameworkActivated));
+      .WillByDefault(InvokeFrameworkActivated(this));
 
     ON_CALL(*this, frameworkDeactivated(_))
-      .WillByDefault(Invoke(&real, &T::frameworkDeactivated));
+      .WillByDefault(InvokeFrameworkDeactivated(this));
 
     ON_CALL(*this, slaveAdded(_, _, _))
-      .WillByDefault(Invoke(&real, &T::slaveAdded));
+      .WillByDefault(InvokeSlaveAdded(this));
 
     ON_CALL(*this, slaveRemoved(_))
-      .WillByDefault(Invoke(&real, &T::slaveRemoved));
+      .WillByDefault(InvokeSlaveRemoved(this));
 
     ON_CALL(*this, updateWhitelist(_))
-      .WillByDefault(Invoke(&real, &T::updateWhitelist));
+      .WillByDefault(InvokeUpdateWhitelist(this));
 
     ON_CALL(*this, resourcesRequested(_, _))
-      .WillByDefault(Invoke(&real, &T::resourcesRequested));
+      .WillByDefault(InvokeResourcesRequested(this));
 
     ON_CALL(*this, resourcesUnused(_, _, _, _))
-      .WillByDefault(Invoke(&real, &T::resourcesUnused));
+      .WillByDefault(InvokeResourcesUnused(this));
 
     ON_CALL(*this, resourcesRecovered(_, _, _))
-      .WillByDefault(Invoke(&real, &T::resourcesRecovered));
+      .WillByDefault(InvokeResourcesRecovered(this));
 
     ON_CALL(*this, offersRevived(_))
-      .WillByDefault(Invoke(&real, &T::offersRevived));
+      .WillByDefault(InvokeOffersRevived(this));
   }
+
+  ~MockAllocatorProcess()
+  {
+    process::terminate(real);
+    process::wait(real);
+  }
+
   MOCK_METHOD2(initialize, void(const master::Flags&,
                                 const process::PID<master::Master>&));
   MOCK_METHOD3(frameworkAdded, void(const FrameworkID&,
@@ -292,7 +303,7 @@ public:
   MOCK_METHOD4(resourcesUnused, void(const FrameworkID&,
                                      const SlaveID&,
                                      const Resources&,
-				     const Option<Filters>& filters));
+                                     const Option<Filters>& filters));
   MOCK_METHOD3(resourcesRecovered, void(const FrameworkID&,
                                         const SlaveID&,
                                         const Resources&));
@@ -302,12 +313,8 @@ public:
 };
 
 
-class TestAllocatorProcess
-  : public master::HierarchicalAllocatorProcess<master::DRFSorter, master::DRFSorter>
-{};
-
-
-typedef ::testing::Types<master::HierarchicalAllocatorProcess<master::DRFSorter, master::DRFSorter> > AllocatorTypes;
+typedef ::testing::Types<master::HierarchicalDRFAllocatorProcess>
+AllocatorTypes;
 
 
 // The following actions make up for the fact that DoDefault
@@ -315,51 +322,104 @@ typedef ::testing::Types<master::Hierarc
 // EXPECT_CALL(allocator, frameworkAdded(_, _, _))
 //   .WillOnce(DoAll(InvokeFrameworkAdded(&allocator),
 //                   Trigger(&frameworkAddedTrigger)));
+
+ACTION_P(InvokeInitialize, allocator)
+{
+  process::dispatch(
+      allocator->real,
+      &master::AllocatorProcess::initialize,
+      arg0,
+      arg1);
+}
+
+
 ACTION_P(InvokeFrameworkAdded, allocator)
 {
-  allocator->real.frameworkAdded(arg0, arg1, arg2);
+  process::dispatch(
+      allocator->real,
+      &master::AllocatorProcess::frameworkAdded,
+      arg0,
+      arg1,
+      arg2);
 }
 
 
 ACTION_P(InvokeFrameworkRemoved, allocator)
 {
-  allocator->real.frameworkRemoved(arg0);
+  process::dispatch(
+      allocator->real,
+      &master::AllocatorProcess::frameworkRemoved, arg0);
 }
 
 
 ACTION_P(InvokeFrameworkActivated, allocator)
 {
-  allocator->real.frameworkActivated(arg0, arg1);
+  process::dispatch(
+      allocator->real,
+      &master::AllocatorProcess::frameworkActivated,
+      arg0,
+      arg1);
 }
 
 
 ACTION_P(InvokeFrameworkDeactivated, allocator)
 {
-  allocator->real.frameworkDeactivated(arg0);
+  process::dispatch(
+      allocator->real,
+      &master::AllocatorProcess::frameworkDeactivated,
+      arg0);
 }
 
 
 ACTION_P(InvokeSlaveAdded, allocator)
 {
-  allocator->real.slaveAdded(arg0, arg1, arg2);
+  process::dispatch(
+      allocator->real,
+      &master::AllocatorProcess::slaveAdded,
+      arg0,
+      arg1,
+      arg2);
 }
 
 
 ACTION_P(InvokeSlaveRemoved, allocator)
 {
-  allocator->real.slaveRemoved(arg0);
+  process::dispatch(
+      allocator->real,
+      &master::AllocatorProcess::slaveRemoved,
+      arg0);
 }
 
 
 ACTION_P(InvokeUpdateWhitelist, allocator)
 {
-  allocator->real.updateWhitelist(arg0);
+  process::dispatch(
+      allocator->real,
+      &master::AllocatorProcess::updateWhitelist,
+      arg0);
 }
 
 
+ACTION_P(InvokeResourcesRequested, allocator)
+{
+  process::dispatch(
+      allocator->real,
+      &master::AllocatorProcess::resourcesRequested,
+      arg0,
+      arg1);
+}
+
+
+
 ACTION_P(InvokeResourcesUnused, allocator)
 {
-  allocator->real.resourcesUnused(arg0, arg1, arg2, arg3);
+  process::dispatch(
+      allocator->real,
+      &master::AllocatorProcess::resourcesUnused,
+      arg0,
+      arg1,
+      arg2,
+      arg3);
 }
 
 
@@ -367,7 +427,34 @@ ACTION_P2(InvokeUnusedWithFilters, alloc
 {
   Filters filters;
   filters.set_refuse_seconds(timeout);
-  allocator->real.resourcesUnused(arg0, arg1, arg2, filters);
+
+  process::dispatch(
+      allocator->real,
+      &master::AllocatorProcess::resourcesUnused,
+      arg0,
+      arg1,
+      arg2,
+      filters);
+}
+
+
+ACTION_P(InvokeResourcesRecovered, allocator)
+{
+  process::dispatch(
+      allocator->real,
+      &master::AllocatorProcess::resourcesRecovered,
+      arg0,
+      arg1,
+      arg2);
+}
+
+
+ACTION_P(InvokeOffersRevived, allocator)
+{
+  process::dispatch(
+      allocator->real,
+      &master::AllocatorProcess::offersRevived,
+      arg0);
 }