You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ji...@apache.org on 2017/08/18 18:54:12 UTC

[5/9] mesos git commit: Added a MockResourceProvider.

Added a MockResourceProvider.

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


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/7ec6d80d
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/7ec6d80d
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/7ec6d80d

Branch: refs/heads/master
Commit: 7ec6d80dda3662ba2d01455aeac8df0b3a6235f3
Parents: 96adbc8
Author: Jan Schlicht <ja...@mesosphere.io>
Authored: Fri Aug 18 09:59:56 2017 -0700
Committer: Jie Yu <yu...@gmail.com>
Committed: Fri Aug 18 11:43:56 2017 -0700

----------------------------------------------------------------------
 src/tests/mesos.hpp | 81 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/7ec6d80d/src/tests/mesos.hpp
----------------------------------------------------------------------
diff --git a/src/tests/mesos.hpp b/src/tests/mesos.hpp
index 6f06261..f80e5fb 100644
--- a/src/tests/mesos.hpp
+++ b/src/tests/mesos.hpp
@@ -28,6 +28,7 @@
 
 #include <mesos/v1/executor.hpp>
 #include <mesos/v1/resources.hpp>
+#include <mesos/v1/resource_provider.hpp>
 #include <mesos/v1/scheduler.hpp>
 
 #include <mesos/v1/executor/executor.hpp>
@@ -70,6 +71,8 @@
 
 #include "sched/constants.hpp"
 
+#include "resource_provider/detector.hpp"
+
 #include "slave/constants.hpp"
 #include "slave/slave.hpp"
 
@@ -2248,6 +2251,84 @@ using MockHTTPExecutor = tests::executor::MockHTTPExecutor<
 } // namespace v1 {
 
 
+namespace resource_provider {
+
+template <typename Event, typename Driver>
+class MockResourceProvider
+{
+public:
+  MOCK_METHOD0_T(connected, void());
+  MOCK_METHOD0_T(disconnected, void());
+  MOCK_METHOD1_T(subscribed, void(const typename Event::Subscribed&));
+  MOCK_METHOD1_T(operation, void(const typename Event::Operation&));
+
+  void events(std::queue<Event> events)
+  {
+    while (!events.empty()) {
+      Event event = events.front();
+      events.pop();
+
+      switch (event.type()) {
+        case Event::SUBSCRIBED:
+          subscribed(event.subscribed());
+          break;
+        case Event::OPERATION:
+          operation(event.operation());
+          break;
+        case Event::UNKNOWN:
+          LOG(FATAL) << "Received unexpected UNKNOWN event";
+          break;
+      }
+    }
+  }
+
+  template <typename Call>
+  process::Future<Nothing> send(const Call& call)
+  {
+    return driver->send(call);
+  }
+
+  template <typename Credential>
+  void start(
+      process::Owned<mesos::internal::EndpointDetector> detector,
+      ContentType contentType,
+      const Credential& credential)
+  {
+    driver.reset(new Driver(
+            std::move(detector),
+            contentType,
+            lambda::bind(&MockResourceProvider<Event, Driver>::connected, this),
+            lambda::bind(
+                &MockResourceProvider<Event, Driver>::disconnected, this),
+            lambda::bind(
+                &MockResourceProvider<Event, Driver>::events, this, lambda::_1),
+            credential));
+  }
+
+private:
+  std::unique_ptr<Driver> driver;
+};
+
+} // namespace resource_provider {
+
+
+namespace v1 {
+namespace resource_provider {
+
+// Alias existing `mesos::v1::resource_provider` classes so that we can easily
+// write `v1::resource_provider::` in tests.
+using Call = mesos::v1::resource_provider::Call;
+using Event = mesos::v1::resource_provider::Event;
+
+} // namespace resource_provider {
+
+using MockResourceProvider = tests::resource_provider::MockResourceProvider<
+    mesos::v1::resource_provider::Event,
+    mesos::v1::resource_provider::Driver>;
+
+} // namespace v1 {
+
+
 // Definition of a MockAuthorizer that can be used in tests with gmock.
 class MockAuthorizer : public Authorizer
 {