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/04 02:29:37 UTC
svn commit: r1405461 -
/incubator/mesos/branches/0.10.0/src/tests/zookeeper_tests.cpp
Author: benh
Date: Sun Nov 4 01:29:37 2012
New Revision: 1405461
URL: http://svn.apache.org/viewvc?rev=1405461&view=rev
Log:
Added some tests for the ZooKeeper based master detector
(https://reviews.apache.org/r/7292).
Modified:
incubator/mesos/branches/0.10.0/src/tests/zookeeper_tests.cpp
Modified: incubator/mesos/branches/0.10.0/src/tests/zookeeper_tests.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/branches/0.10.0/src/tests/zookeeper_tests.cpp?rev=1405461&r1=1405460&r2=1405461&view=diff
==============================================================================
--- incubator/mesos/branches/0.10.0/src/tests/zookeeper_tests.cpp (original)
+++ incubator/mesos/branches/0.10.0/src/tests/zookeeper_tests.cpp Sun Nov 4 01:29:37 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 "zookeeper/authentication.hpp"
@@ -73,6 +79,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/");