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 <[email protected]> Authored: Fri Aug 18 09:59:56 2017 -0700 Committer: Jie Yu <[email protected]> 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 {
