Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1553)

Unified Diff: mojo/public/cpp/application/tests/service_provider_impl_unittest.cc

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/public/cpp/application/tests/BUILD.gn ('k') | mojo/public/cpp/bindings/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/public/cpp/application/tests/service_provider_impl_unittest.cc
diff --git a/mojo/public/cpp/application/tests/service_provider_impl_unittest.cc b/mojo/public/cpp/application/tests/service_provider_impl_unittest.cc
deleted file mode 100644
index 39a9c75d52074e0d416da4d1bde2c17866a61b5f..0000000000000000000000000000000000000000
--- a/mojo/public/cpp/application/tests/service_provider_impl_unittest.cc
+++ /dev/null
@@ -1,352 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/public/cpp/application/service_provider_impl.h"
-
-#include <utility>
-
-#include "gtest/gtest.h"
-#include "mojo/public/cpp/application/connect.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
-#include "mojo/public/cpp/system/macros.h"
-#include "mojo/public/cpp/utility/run_loop.h"
-#include "mojo/public/interfaces/application/service_provider.mojom.h"
-#include "mojo/public/interfaces/bindings/tests/ping_service.mojom.h"
-
-namespace mojo {
-namespace {
-
-class ServiceProviderImplTest : public testing::Test {
- public:
- ServiceProviderImplTest() {}
- ~ServiceProviderImplTest() override { loop_.RunUntilIdle(); }
-
- RunLoop& loop() { return loop_; }
-
- protected:
- void QuitLoop(bool ok) {
- EXPECT_TRUE(ok);
- loop_.Quit();
- }
-
- private:
- RunLoop loop_;
-
- MOJO_DISALLOW_COPY_AND_ASSIGN(ServiceProviderImplTest);
-};
-
-class PingServiceImpl : public test::PingService {
- public:
- PingServiceImpl(InterfaceRequest<test::PingService> ping_service_request)
- : strong_binding_(this, std::move(ping_service_request)) {}
- ~PingServiceImpl() override {}
-
- // |test::PingService|:
- void Ping(const PingCallback& callback) override { callback.Run(); }
-
- private:
- StrongBinding<test::PingService> strong_binding_;
-
- MOJO_DISALLOW_COPY_AND_ASSIGN(PingServiceImpl);
-};
-
-TEST_F(ServiceProviderImplTest, Basic) {
- const char kRemoteUrl[] = "https://example.com/remote.mojo";
- const char kConnectionUrl[] = "https://example.com/me.mojo";
-
- const char kPing1[] = "Ping1";
- const char kPing2[] = "Ping2";
- const char kPing3[] = "Ping3";
-
- ServiceProviderPtr sp;
- ServiceProviderImpl impl(ConnectionContext(ConnectionContext::Type::INCOMING,
- kRemoteUrl, kConnectionUrl),
- GetProxy(&sp));
- EXPECT_EQ(ConnectionContext::Type::INCOMING, impl.connection_context().type);
- EXPECT_EQ(kRemoteUrl, impl.connection_context().remote_url);
- EXPECT_EQ(kConnectionUrl, impl.connection_context().connection_url);
-
- impl.AddService<test::PingService>(
- [&kRemoteUrl, &kConnectionUrl](
- const ConnectionContext& connection_context,
- InterfaceRequest<test::PingService> ping_service_request) {
- EXPECT_EQ(ConnectionContext::Type::INCOMING, connection_context.type);
- EXPECT_EQ(kRemoteUrl, connection_context.remote_url);
- EXPECT_EQ(kConnectionUrl, connection_context.connection_url);
- new PingServiceImpl(std::move(ping_service_request));
- },
- kPing1);
-
- impl.AddService<test::PingService>(
- [&kRemoteUrl, &kConnectionUrl](
- const ConnectionContext& connection_context,
- InterfaceRequest<test::PingService> ping_service_request) {
- EXPECT_EQ(ConnectionContext::Type::INCOMING, connection_context.type);
- EXPECT_EQ(kRemoteUrl, connection_context.remote_url);
- EXPECT_EQ(kConnectionUrl, connection_context.connection_url);
- new PingServiceImpl(std::move(ping_service_request));
- },
- kPing2);
-
- {
- test::PingServicePtr ping1;
- ConnectToService(sp.get(), GetProxy(&ping1), kPing1);
- ping1.set_connection_error_handler([this] { QuitLoop(false); });
- ping1->Ping([this] { QuitLoop(true); });
- loop().Run();
- }
- loop().RunUntilIdle(); // Run stuff caused by destructors.
-
- {
- test::PingServicePtr ping2;
- ConnectToService(sp.get(), GetProxy(&ping2), kPing2);
- ping2.set_connection_error_handler([this] { QuitLoop(false); });
- ping2->Ping([this] { QuitLoop(true); });
- loop().Run();
- }
- loop().RunUntilIdle(); // Run stuff caused by destructors.
-
- // "Ping3" isn't actually registered!
- {
- test::PingServicePtr ping3;
- ConnectToService(sp.get(), GetProxy(&ping3), kPing3);
- ping3.set_connection_error_handler([this] { QuitLoop(true); });
- ping3->Ping([this] { QuitLoop(false); });
- loop().Run();
- }
- loop().RunUntilIdle(); // Run stuff caused by destructors.
-
- impl.RemoveService<test::PingService>(kPing2);
-
- // "Ping2" should no longer work.
- {
- test::PingServicePtr ping2;
- ConnectToService(sp.get(), GetProxy(&ping2), kPing2);
- ping2.set_connection_error_handler([this] { QuitLoop(true); });
- ping2->Ping([this] { QuitLoop(false); });
- loop().Run();
- }
- loop().RunUntilIdle(); // Run stuff caused by destructors.
-
- // But "Ping1" should still work.
- {
- test::PingServicePtr ping1;
- ConnectToService(sp.get(), GetProxy(&ping1), kPing1);
- ping1.set_connection_error_handler([this] { QuitLoop(false); });
- ping1->Ping([this] { QuitLoop(true); });
- loop().Run();
- }
- loop().RunUntilIdle(); // Run stuff caused by destructors.
-
- impl.RemoveServiceForName(kPing1);
-
- // "Ping1" should no longer work.
- {
- test::PingServicePtr ping1;
- ConnectToService(sp.get(), GetProxy(&ping1), kPing1);
- ping1.set_connection_error_handler([this] { QuitLoop(true); });
- ping1->Ping([this] { QuitLoop(false); });
- loop().Run();
- }
- loop().RunUntilIdle(); // Run stuff caused by destructors.
-
- sp.reset();
- loop().RunUntilIdle();
-}
-
-TEST_F(ServiceProviderImplTest, CloseAndRebind) {
- const char kRemoteUrl1[] = "https://example.com/remote1.mojo";
- const char kRemoteUrl2[] = "https://example.com/remote2.mojo";
- const char kConnectionUrl[] = "https://example.com/me.mojo";
- const char kPing[] = "Ping";
-
- ServiceProviderPtr sp1;
- ServiceProviderImpl impl(ConnectionContext(ConnectionContext::Type::INCOMING,
- kRemoteUrl1, kConnectionUrl),
- GetProxy(&sp1));
- EXPECT_EQ(ConnectionContext::Type::INCOMING, impl.connection_context().type);
- EXPECT_EQ(kRemoteUrl1, impl.connection_context().remote_url);
- EXPECT_EQ(kConnectionUrl, impl.connection_context().connection_url);
-
- impl.AddService<test::PingService>(
- [&kRemoteUrl1, &kRemoteUrl2, &kConnectionUrl](
- const ConnectionContext& connection_context,
- InterfaceRequest<test::PingService> ping_service_request) {
- EXPECT_EQ(ConnectionContext::Type::INCOMING, connection_context.type);
- EXPECT_TRUE(connection_context.remote_url == kRemoteUrl1 ||
- connection_context.remote_url == kRemoteUrl2);
- EXPECT_EQ(kConnectionUrl, connection_context.connection_url);
- new PingServiceImpl(std::move(ping_service_request));
- },
- kPing);
-
- {
- test::PingServicePtr ping;
- ConnectToService(sp1.get(), GetProxy(&ping), kPing);
- ping.set_connection_error_handler([this] { QuitLoop(false); });
- ping->Ping([this] { QuitLoop(true); });
- loop().Run();
- }
- loop().RunUntilIdle(); // Run stuff caused by destructors.
-
- impl.Close();
- EXPECT_EQ(ConnectionContext::Type::UNKNOWN, impl.connection_context().type);
- EXPECT_EQ(std::string(), impl.connection_context().remote_url);
- EXPECT_EQ(std::string(), impl.connection_context().connection_url);
- sp1.reset();
- loop().RunUntilIdle();
-
- ServiceProviderPtr sp2;
- impl.Bind(ConnectionContext(ConnectionContext::Type::INCOMING, kRemoteUrl2,
- kConnectionUrl),
- GetProxy(&sp2));
- EXPECT_EQ(ConnectionContext::Type::INCOMING, impl.connection_context().type);
- EXPECT_EQ(kRemoteUrl2, impl.connection_context().remote_url);
- EXPECT_EQ(kConnectionUrl, impl.connection_context().connection_url);
-
- {
- test::PingServicePtr ping;
- ConnectToService(sp2.get(), GetProxy(&ping), kPing);
- ping.set_connection_error_handler([this] { QuitLoop(false); });
- ping->Ping([this] { QuitLoop(true); });
- loop().Run();
- }
- loop().RunUntilIdle(); // Run stuff caused by destructors.
-
- // Can close multiple times.
- impl.Close();
- impl.Close();
- sp2.reset();
- loop().RunUntilIdle();
-}
-
-TEST_F(ServiceProviderImplTest, Bind) {
- const char kRemoteUrl[] = "https://example.com/remote.mojo";
- const char kConnectionUrl[] = "https://example.com/me.mojo";
- const char kPing[] = "Ping";
-
- ServiceProviderPtr sp;
- ServiceProviderImpl impl;
- EXPECT_EQ(ConnectionContext::Type::UNKNOWN, impl.connection_context().type);
- EXPECT_EQ(std::string(), impl.connection_context().remote_url);
- EXPECT_EQ(std::string(), impl.connection_context().connection_url);
-
- impl.Bind(ConnectionContext(ConnectionContext::Type::INCOMING, kRemoteUrl,
- kConnectionUrl),
- GetProxy(&sp));
-
- impl.AddService<test::PingService>(
- [&kRemoteUrl, &kConnectionUrl](
- const ConnectionContext& connection_context,
- InterfaceRequest<test::PingService> request) {
- EXPECT_EQ(ConnectionContext::Type::INCOMING, connection_context.type);
- EXPECT_EQ(kRemoteUrl, connection_context.remote_url);
- EXPECT_EQ(kConnectionUrl, connection_context.connection_url);
- new PingServiceImpl(std::move(request));
- },
- kPing);
-
- {
- test::PingServicePtr ping;
- ConnectToService(sp.get(), GetProxy(&ping), kPing);
- ping.set_connection_error_handler([this] { QuitLoop(false); });
- ping->Ping([this] { QuitLoop(true); });
- loop().Run();
- }
- loop().RunUntilIdle(); // Run stuff caused by destructors.
-
- sp.reset();
- loop().RunUntilIdle();
-}
-
-class FauxServiceProvider : public ServiceProvider {
- public:
- explicit FauxServiceProvider(
- std::function<void(const std::string& service_name)>
- on_connect_to_service)
- : on_connect_to_service_(on_connect_to_service) {}
- ~FauxServiceProvider() override {}
-
- // |ServiceProvider|:
- void ConnectToService(const String& service_name,
- ScopedMessagePipeHandle client_handle) override {
- on_connect_to_service_(service_name.get());
- }
-
- private:
- std::function<void(const std::string& service_name)> on_connect_to_service_;
-
- MOJO_DISALLOW_COPY_AND_ASSIGN(FauxServiceProvider);
-};
-
-TEST_F(ServiceProviderImplTest, FallbackServiceProvider) {
- const char kWhatever[] = "Whatever";
-
- ServiceProviderPtr sp;
- ServiceProviderImpl impl(ConnectionContext(ConnectionContext::Type::INCOMING,
- "https://example.com/remote.mojo",
- "https://example.com/me.mojo"),
- GetProxy(&sp));
-
- {
- test::PingServicePtr ping;
- ConnectToService(sp.get(), GetProxy(&ping), kWhatever);
- ping.set_connection_error_handler([this] { QuitLoop(true); });
- ping->Ping([this] { QuitLoop(false); });
- loop().Run();
- }
- loop().RunUntilIdle(); // Run stuff caused by destructors.
-
- bool was_run = false;
- FauxServiceProvider fallback_sp(
- [this, &kWhatever, &was_run](const std::string& service_name) {
- EXPECT_EQ(kWhatever, service_name);
- was_run = true;
- });
- impl.set_fallback_service_provider(&fallback_sp);
-
- {
- test::PingServicePtr ping;
- ConnectToService(sp.get(), GetProxy(&ping), kWhatever);
- ping.set_connection_error_handler([this] { QuitLoop(true); });
- EXPECT_FALSE(was_run);
- ping->Ping([this] { QuitLoop(false); });
- loop().Run();
- EXPECT_TRUE(was_run);
- }
- loop().RunUntilIdle(); // Run stuff caused by destructors.
-
- // Clear the fallback.
- impl.set_fallback_service_provider(nullptr);
- was_run = false;
-
- {
- test::PingServicePtr ping;
- ConnectToService(sp.get(), GetProxy(&ping), kWhatever);
- ping.set_connection_error_handler([this] { QuitLoop(true); });
- ping->Ping([this] { QuitLoop(false); });
- loop().Run();
- }
- loop().RunUntilIdle(); // Run stuff caused by destructors.
-
- sp.reset();
- loop().RunUntilIdle();
-
- EXPECT_FALSE(was_run);
-}
-
-TEST_F(ServiceProviderImplTest, ConstructRequestNotPending) {
- ServiceProviderImpl impl(ConnectionContext(ConnectionContext::Type::INCOMING,
- "https://example.com/remote.mojo",
- "https://example.com/me.mojo"),
- InterfaceRequest<ServiceProvider>());
- EXPECT_EQ(ConnectionContext::Type::UNKNOWN, impl.connection_context().type);
- EXPECT_EQ(std::string(), impl.connection_context().remote_url);
- EXPECT_EQ(std::string(), impl.connection_context().connection_url);
-}
-
-// TODO(vtl): Explicitly test |AddServiceForName()|?
-
-} // namespace
-} // namespace mojo
« no previous file with comments | « mojo/public/cpp/application/tests/BUILD.gn ('k') | mojo/public/cpp/bindings/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698