| // Copyright 2018 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef DIAGNOSTICS_WILCO_DTC_SUPPORTD_FAKE_BROWSER_H_ |
| #define DIAGNOSTICS_WILCO_DTC_SUPPORTD_FAKE_BROWSER_H_ |
| |
| #include <string> |
| |
| #include <base/callback.h> |
| #include <base/macros.h> |
| #include <dbus/mock_exported_object.h> |
| #include <gmock/gmock.h> |
| #include <mojo/public/cpp/bindings/receiver.h> |
| #include <mojo/public/cpp/bindings/remote.h> |
| |
| #include "diagnostics/common/mojo_test_utils.h" |
| #include "diagnostics/wilco_dtc_supportd/mock_mojo_client.h" |
| #include "mojo/wilco_dtc_supportd.mojom.h" |
| |
| namespace diagnostics { |
| |
| // Helper class that allows to test communication between the browser and the |
| // tested code of the wilco_dtc_supportd daemon. |
| class FakeBrowser final { |
| public: |
| using DBusMethodCallCallback = dbus::ExportedObject::MethodCallCallback; |
| |
| using MojomWilcoDtcSupportdClient = |
| chromeos::wilco_dtc_supportd::mojom::WilcoDtcSupportdClient; |
| using MojomWilcoDtcSupportdService = |
| chromeos::wilco_dtc_supportd::mojom::WilcoDtcSupportdService; |
| using MojomWilcoDtcSupportdServiceFactory = |
| chromeos::wilco_dtc_supportd::mojom::WilcoDtcSupportdServiceFactory; |
| |
| // |wilco_dtc_supportd_service_factory_ptr| is a pointer to the tested |
| // WilcoDtcSupportdServiceFactory instance. |
| // |bootstrap_mojo_connection_dbus_method| is the callback that the tested |
| // code exposed as the BootstrapMojoConnection D-Bus method. |
| FakeBrowser(mojo::Remote<MojomWilcoDtcSupportdServiceFactory>* |
| wilco_dtc_supportd_service_factory, |
| DBusMethodCallCallback bootstrap_mojo_connection_dbus_method); |
| FakeBrowser(const FakeBrowser&) = delete; |
| FakeBrowser& operator=(const FakeBrowser&) = delete; |
| |
| ~FakeBrowser(); |
| |
| // Returns a mock WilcoDtcSupportdClient instance, whose methods are invoked |
| // when FakeBrowser receives incoming Mojo calls from the tested code. |
| testing::StrictMock<MockMojoClient>* wilco_dtc_supportd_client() { |
| return &wilco_dtc_supportd_client_; |
| } |
| |
| // Call the BootstrapMojoConnection D-Bus method. Returns whether the D-Bus |
| // call returned success. |
| // |fake_mojo_fd_generator| is the fake file descriptor generator. |
| // |bootstrap_mojo_connection_callback| is called when the boostrapping of the |
| // mojo connection succeeds or fails. |
| // |
| // It's not allowed to call this method again after a successful completion. |
| bool BootstrapMojoConnection( |
| FakeMojoFdGenerator* fake_mojo_fd_generator, |
| const base::Closure& bootstrap_mojo_connection_callback); |
| |
| // Call the |SendUiMessageToWilcoDtc| Mojo method |
| // on wilco_dtc_supportd daemon, which will call the |HandleMessageFromUi| |
| // gRPC method on wilco_dtc. |
| // |
| // It simulates message sent from diagnostics UI extension to wilco_dtc. |
| // |
| // Returns false when we were not able to copy |json_message| into shared |
| // buffer. |
| // |
| // Must be called only after a successful invocation of |
| // BootstrapMojoConnection(). |
| bool SendUiMessageToWilcoDtc( |
| const std::string& json_message, |
| const base::Callback<void(mojo::ScopedHandle)>& callback); |
| |
| // Call the |NotifyConfigurationDataChanged| Mojo method on wilco_dtc_supportd |
| // daemon, which will call the corresponding gRPC method on wilco_dtc. |
| // |
| // It simulates the notification sent from the browser to wilco_dtc. |
| // |
| // Must be called only after a successful invocation of |
| // BootstrapMojoConnection(). |
| void NotifyConfigurationDataChanged(); |
| |
| private: |
| // Calls |bootstrap_mojo_connection_dbus_method_| with a fake file descriptor. |
| // Returns whether the method call succeeded (it's expected to happen |
| // synchronously). |
| bool CallBootstrapMojoConnectionDBusMethod( |
| FakeMojoFdGenerator* fake_mojo_fd_generator); |
| |
| // Calls GetService() Mojo method on |
| // |wilco_dtc_supportd_service_factory_|, initializes |
| // |wilco_dtc_supportd_service_ptr_| so that it points to the tested service, |
| // registers |wilco_dtc_supportd_client_| to handle incoming Mojo requests. |
| // |get_service_mojo_method_callback| is called when the full-duplex Mojo |
| // communication with the tested Mojo service is established. |
| void CallGetServiceMojoMethod( |
| const base::Closure& get_service_mojo_method_callback); |
| |
| // Unowned. Points to the tested WilcoDtcSupportdServiceFactory instance. |
| mojo::Remote<MojomWilcoDtcSupportdServiceFactory>* const |
| wilco_dtc_supportd_service_factory_; |
| // Fake substitute for the BootstrapMojoConnection() D-Bus method. |
| DBusMethodCallCallback bootstrap_mojo_connection_dbus_method_; |
| |
| // Mock WilcoDtcSupportdClient instance. After an invocation of |
| // CallGetServiceMojoMethod() it becomes registered to receive incoming Mojo |
| // requests from the tested code. |
| testing::StrictMock<MockMojoClient> wilco_dtc_supportd_client_; |
| // Mojo receiver that is associated with |wilco_dtc_supportd_client_|. |
| mojo::Receiver<MojomWilcoDtcSupportdClient> |
| wilco_dtc_supportd_client_receiver_; |
| |
| // Mojo interface pointer to the WilcoDtcSupportdService service exposed by |
| // the tested code. Gets initialized after a call to |
| // CallGetServiceMojoMethod(). |
| mojo::Remote<MojomWilcoDtcSupportdService> wilco_dtc_supportd_service_; |
| }; |
| |
| } // namespace diagnostics |
| |
| #endif // DIAGNOSTICS_WILCO_DTC_SUPPORTD_FAKE_BROWSER_H_ |