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/10/04 01:37:29 UTC

svn commit: r1393818 - /incubator/mesos/trunk/src/tests/zookeeper_tests.cpp

Author: benh
Date: Wed Oct  3 23:37:28 2012
New Revision: 1393818

URL: http://svn.apache.org/viewvc?rev=1393818&view=rev
Log:
Added some tests for the ZooKeeper based master detector
(https://reviews.apache.org/r/7292).

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

Modified: incubator/mesos/trunk/src/tests/zookeeper_tests.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/tests/zookeeper_tests.cpp?rev=1393818&r1=1393817&r2=1393818&view=diff
==============================================================================
--- incubator/mesos/trunk/src/tests/zookeeper_tests.cpp (original)
+++ incubator/mesos/trunk/src/tests/zookeeper_tests.cpp Wed Oct  3 23:37:28 2012
@@ -22,6 +22,12 @@
 
 #include <gtest/gtest.h>
 
+#include <process/process.hpp>
+
+#include <stout/try.hpp>
+
+#include "detector/detector.hpp"
+
 #include "tests/base_zookeeper_test.hpp"
 #include "tests/utils.hpp"
 
@@ -77,6 +83,98 @@ TEST_F(ZooKeeperTest, Auth)
 }
 
 
+class MockMasterDetectorListenerProcess
+  : public ProtobufProcess<MockMasterDetectorListenerProcess>
+{
+public:
+  MockMasterDetectorListenerProcess() {}
+  virtual ~MockMasterDetectorListenerProcess() {}
+
+  MOCK_METHOD1(newMasterDetected, void(const process::UPID&));
+  MOCK_METHOD0(noMasterDetected, void(void));
+
+protected:
+  virtual void initialize()
+  {
+    install<NewMasterDetectedMessage>(
+        &MockMasterDetectorListenerProcess::newMasterDetected,
+        &NewMasterDetectedMessage::pid);
+
+    install<NoMasterDetectedMessage>(
+        &MockMasterDetectorListenerProcess::noMasterDetected);
+  }
+};
+
+
+TEST_F(ZooKeeperTest, MasterDetector)
+{
+  MockMasterDetectorListenerProcess mock;
+  process::spawn(mock);
+
+  trigger newMasterDetectedCall;
+  EXPECT_CALL(mock, newMasterDetected(mock.self()))
+    .WillOnce(Trigger(&newMasterDetectedCall));
+
+  std::string master = "zk://" + zks->connectString() + "/mesos";
+
+  Try<MasterDetector*> detector =
+    MasterDetector::create(master, mock.self(), true, true);
+
+  EXPECT_TRUE(detector.isSome()) << detector.error();
+
+  WAIT_UNTIL(newMasterDetectedCall);
+
+  MasterDetector::destroy(detector.get());
+
+  process::terminate(mock);
+  process::wait(mock);
+}
+
+
+TEST_F(ZooKeeperTest, MasterDetectors)
+{
+  MockMasterDetectorListenerProcess mock1;
+  process::spawn(mock1);
+
+  trigger newMasterDetectedCall1;
+  EXPECT_CALL(mock1, newMasterDetected(mock1.self()))
+    .WillOnce(Trigger(&newMasterDetectedCall1));
+
+  std::string master = "zk://" + zks->connectString() + "/mesos";
+
+  Try<MasterDetector*> detector1 =
+    MasterDetector::create(master, mock1.self(), true, true);
+
+  EXPECT_TRUE(detector1.isSome()) << detector1.error();
+
+  WAIT_UNTIL(newMasterDetectedCall1);
+
+  MockMasterDetectorListenerProcess mock2;
+  process::spawn(mock2);
+
+  trigger newMasterDetectedCall2;
+  EXPECT_CALL(mock2, newMasterDetected(mock1.self())) // N.B. mock1
+    .WillOnce(Trigger(&newMasterDetectedCall2));
+
+  Try<MasterDetector*> detector2 =
+    MasterDetector::create(master, mock2.self(), true, true);
+
+  EXPECT_TRUE(detector2.isSome()) << detector2.error();
+
+  WAIT_UNTIL(newMasterDetectedCall2);
+
+  MasterDetector::destroy(detector1.get());
+
+  process::terminate(mock1);
+  process::wait(mock1);
+
+  MasterDetector::destroy(detector2.get());
+
+  process::terminate(mock2);
+  process::wait(mock2);
+}
+
+
 TEST_F(ZooKeeperTest, Group)
 {
   zookeeper::Group group(zks->connectString(), NO_TIMEOUT, "/test/");