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
{