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

Side by Side Diff: mojo/public/cpp/application/tests/service_provider_impl_unittest.cc

Issue 1975993002: Change InterfaceFactory<I>::Create() to take a ConnectionContext instead of an ApplicationConnectio… (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/public/cpp/application/service_provider_impl.h" 5 #include "mojo/public/cpp/application/service_provider_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "mojo/public/cpp/application/connect.h" 9 #include "mojo/public/cpp/application/connect.h"
10 #include "mojo/public/cpp/bindings/strong_binding.h" 10 #include "mojo/public/cpp/bindings/strong_binding.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 // |test::PingService|: 47 // |test::PingService|:
48 void Ping(const PingCallback& callback) override { callback.Run(); } 48 void Ping(const PingCallback& callback) override { callback.Run(); }
49 49
50 private: 50 private:
51 StrongBinding<test::PingService> strong_binding_; 51 StrongBinding<test::PingService> strong_binding_;
52 52
53 MOJO_DISALLOW_COPY_AND_ASSIGN(PingServiceImpl); 53 MOJO_DISALLOW_COPY_AND_ASSIGN(PingServiceImpl);
54 }; 54 };
55 55
56 TEST_F(ServiceProviderImplTest, Basic) { 56 TEST_F(ServiceProviderImplTest, Basic) {
57 const char kRemoteUrl[] = "https://example.com/remote.mojo";
58 const char kConnectionUrl[] = "https://example.com/me.mojo";
59
57 const char kPing1[] = "Ping1"; 60 const char kPing1[] = "Ping1";
58 const char kPing2[] = "Ping2"; 61 const char kPing2[] = "Ping2";
59 const char kPing3[] = "Ping3"; 62 const char kPing3[] = "Ping3";
60 63
61 ServiceProviderPtr sp; 64 ServiceProviderPtr sp;
62 ServiceProviderImpl impl(GetProxy(&sp)); 65 ServiceProviderImpl impl(ConnectionContext(ConnectionContext::Type::INCOMING,
66 kRemoteUrl, kConnectionUrl),
67 GetProxy(&sp));
63 68
64 impl.AddServiceNew<test::PingService>( 69 impl.AddServiceNew<test::PingService>(
65 [](const ConnectionContext& connection_context, 70 [&kRemoteUrl, &kConnectionUrl](
66 InterfaceRequest<test::PingService> ping_service_request) { 71 const ConnectionContext& connection_context,
72 InterfaceRequest<test::PingService> ping_service_request) {
73 EXPECT_EQ(ConnectionContext::Type::INCOMING, connection_context.type);
74 EXPECT_EQ(kRemoteUrl, connection_context.remote_url);
75 EXPECT_EQ(kConnectionUrl, connection_context.connection_url);
67 new PingServiceImpl(std::move(ping_service_request)); 76 new PingServiceImpl(std::move(ping_service_request));
68 }, 77 },
69 kPing1); 78 kPing1);
70 79
71 impl.AddServiceNew<test::PingService>( 80 impl.AddServiceNew<test::PingService>(
72 [](const ConnectionContext& connection_context, 81 [&kRemoteUrl, &kConnectionUrl](
73 InterfaceRequest<test::PingService> ping_service_request) { 82 const ConnectionContext& connection_context,
83 InterfaceRequest<test::PingService> ping_service_request) {
84 EXPECT_EQ(ConnectionContext::Type::INCOMING, connection_context.type);
85 EXPECT_EQ(kRemoteUrl, connection_context.remote_url);
86 EXPECT_EQ(kConnectionUrl, connection_context.connection_url);
74 new PingServiceImpl(std::move(ping_service_request)); 87 new PingServiceImpl(std::move(ping_service_request));
75 }, 88 },
76 kPing2); 89 kPing2);
77 90
78 { 91 {
79 test::PingServicePtr ping1; 92 test::PingServicePtr ping1;
80 ConnectToService(sp.get(), GetProxy(&ping1), kPing1); 93 ConnectToService(sp.get(), GetProxy(&ping1), kPing1);
81 ping1.set_connection_error_handler([this] { QuitLoop(false); }); 94 ping1.set_connection_error_handler([this] { QuitLoop(false); });
82 ping1->Ping([this] { QuitLoop(true); }); 95 ping1->Ping([this] { QuitLoop(true); });
83 loop().Run(); 96 loop().Run();
(...skipping 17 matching lines...) Expand all
101 ping3->Ping([this] { QuitLoop(false); }); 114 ping3->Ping([this] { QuitLoop(false); });
102 loop().Run(); 115 loop().Run();
103 } 116 }
104 loop().RunUntilIdle(); // Run stuff caused by destructors. 117 loop().RunUntilIdle(); // Run stuff caused by destructors.
105 118
106 sp.reset(); 119 sp.reset();
107 loop().RunUntilIdle(); 120 loop().RunUntilIdle();
108 } 121 }
109 122
110 TEST_F(ServiceProviderImplTest, CloseAndRebind) { 123 TEST_F(ServiceProviderImplTest, CloseAndRebind) {
124 const char kRemoteUrl1[] = "https://example.com/remote1.mojo";
125 const char kRemoteUrl2[] = "https://example.com/remote2.mojo";
126 const char kConnectionUrl[] = "https://example.com/me.mojo";
111 const char kPing[] = "Ping"; 127 const char kPing[] = "Ping";
112 128
113 ServiceProviderPtr sp1; 129 ServiceProviderPtr sp1;
114 ServiceProviderImpl impl(GetProxy(&sp1)); 130 ServiceProviderImpl impl(ConnectionContext(ConnectionContext::Type::INCOMING,
131 kRemoteUrl1, kConnectionUrl),
132 GetProxy(&sp1));
115 133
116 impl.AddServiceNew<test::PingService>( 134 impl.AddServiceNew<test::PingService>(
117 [](const ConnectionContext& connection_context, 135 [&kRemoteUrl1, &kRemoteUrl2, &kConnectionUrl](
118 InterfaceRequest<test::PingService> ping_service_request) { 136 const ConnectionContext& connection_context,
137 InterfaceRequest<test::PingService> ping_service_request) {
138 EXPECT_EQ(ConnectionContext::Type::INCOMING, connection_context.type);
139 EXPECT_TRUE(connection_context.remote_url == kRemoteUrl1 ||
140 connection_context.remote_url == kRemoteUrl2);
141 EXPECT_EQ(kConnectionUrl, connection_context.connection_url);
119 new PingServiceImpl(std::move(ping_service_request)); 142 new PingServiceImpl(std::move(ping_service_request));
120 }, 143 },
121 kPing); 144 kPing);
122 145
123 { 146 {
124 test::PingServicePtr ping; 147 test::PingServicePtr ping;
125 ConnectToService(sp1.get(), GetProxy(&ping), kPing); 148 ConnectToService(sp1.get(), GetProxy(&ping), kPing);
126 ping.set_connection_error_handler([this] { QuitLoop(false); }); 149 ping.set_connection_error_handler([this] { QuitLoop(false); });
127 ping->Ping([this] { QuitLoop(true); }); 150 ping->Ping([this] { QuitLoop(true); });
128 loop().Run(); 151 loop().Run();
129 } 152 }
130 loop().RunUntilIdle(); // Run stuff caused by destructors. 153 loop().RunUntilIdle(); // Run stuff caused by destructors.
131 154
132 impl.Close(); 155 impl.Close();
133 sp1.reset(); 156 sp1.reset();
134 loop().RunUntilIdle(); 157 loop().RunUntilIdle();
135 158
136 ServiceProviderPtr sp2; 159 ServiceProviderPtr sp2;
137 impl.Bind(GetProxy(&sp2)); 160 impl.Bind(ConnectionContext(ConnectionContext::Type::INCOMING, kRemoteUrl2,
161 kConnectionUrl),
162 GetProxy(&sp2));
138 163
139 { 164 {
140 test::PingServicePtr ping; 165 test::PingServicePtr ping;
141 ConnectToService(sp2.get(), GetProxy(&ping), kPing); 166 ConnectToService(sp2.get(), GetProxy(&ping), kPing);
142 ping.set_connection_error_handler([this] { QuitLoop(false); }); 167 ping.set_connection_error_handler([this] { QuitLoop(false); });
143 ping->Ping([this] { QuitLoop(true); }); 168 ping->Ping([this] { QuitLoop(true); });
144 loop().Run(); 169 loop().Run();
145 } 170 }
146 loop().RunUntilIdle(); // Run stuff caused by destructors. 171 loop().RunUntilIdle(); // Run stuff caused by destructors.
147 172
148 // Can close multiple times. 173 // Can close multiple times.
149 impl.Close(); 174 impl.Close();
150 impl.Close(); 175 impl.Close();
151 sp2.reset(); 176 sp2.reset();
152 loop().RunUntilIdle(); 177 loop().RunUntilIdle();
153 } 178 }
154 179
155 TEST_F(ServiceProviderImplTest, Bind) { 180 TEST_F(ServiceProviderImplTest, Bind) {
181 const char kRemoteUrl[] = "https://example.com/remote.mojo";
182 const char kConnectionUrl[] = "https://example.com/me.mojo";
156 const char kPing[] = "Ping"; 183 const char kPing[] = "Ping";
157 184
158 ServiceProviderPtr sp; 185 ServiceProviderPtr sp;
159 ServiceProviderImpl impl; 186 ServiceProviderImpl impl;
160 187
161 impl.Bind(GetProxy(&sp)); 188 impl.Bind(ConnectionContext(ConnectionContext::Type::INCOMING, kRemoteUrl,
189 kConnectionUrl),
190 GetProxy(&sp));
162 191
163 impl.AddServiceNew<test::PingService>( 192 impl.AddServiceNew<test::PingService>(
164 [](const ConnectionContext& connection_context, 193 [&kRemoteUrl, &kConnectionUrl](
165 InterfaceRequest<test::PingService> request) { 194 const ConnectionContext& connection_context,
195 InterfaceRequest<test::PingService> request) {
196 EXPECT_EQ(ConnectionContext::Type::INCOMING, connection_context.type);
197 EXPECT_EQ(kRemoteUrl, connection_context.remote_url);
198 EXPECT_EQ(kConnectionUrl, connection_context.connection_url);
166 new PingServiceImpl(std::move(request)); 199 new PingServiceImpl(std::move(request));
167 }, 200 },
168 kPing); 201 kPing);
169 202
170 { 203 {
171 test::PingServicePtr ping; 204 test::PingServicePtr ping;
172 ConnectToService(sp.get(), GetProxy(&ping), kPing); 205 ConnectToService(sp.get(), GetProxy(&ping), kPing);
173 ping.set_connection_error_handler([this] { QuitLoop(false); }); 206 ping.set_connection_error_handler([this] { QuitLoop(false); });
174 ping->Ping([this] { QuitLoop(true); }); 207 ping->Ping([this] { QuitLoop(true); });
175 loop().Run(); 208 loop().Run();
(...skipping 21 matching lines...) Expand all
197 private: 230 private:
198 std::function<void(const std::string& service_name)> on_connect_to_service_; 231 std::function<void(const std::string& service_name)> on_connect_to_service_;
199 232
200 MOJO_DISALLOW_COPY_AND_ASSIGN(FauxServiceProvider); 233 MOJO_DISALLOW_COPY_AND_ASSIGN(FauxServiceProvider);
201 }; 234 };
202 235
203 TEST_F(ServiceProviderImplTest, FallbackServiceProvider) { 236 TEST_F(ServiceProviderImplTest, FallbackServiceProvider) {
204 const char kWhatever[] = "Whatever"; 237 const char kWhatever[] = "Whatever";
205 238
206 ServiceProviderPtr sp; 239 ServiceProviderPtr sp;
207 ServiceProviderImpl impl(GetProxy(&sp)); 240 ServiceProviderImpl impl(ConnectionContext(ConnectionContext::Type::INCOMING,
241 "https://example.com/remote.mojo",
242 "https://example.com/me.mojo"),
243 GetProxy(&sp));
208 244
209 { 245 {
210 test::PingServicePtr ping; 246 test::PingServicePtr ping;
211 ConnectToService(sp.get(), GetProxy(&ping), kWhatever); 247 ConnectToService(sp.get(), GetProxy(&ping), kWhatever);
212 ping.set_connection_error_handler([this] { QuitLoop(true); }); 248 ping.set_connection_error_handler([this] { QuitLoop(true); });
213 ping->Ping([this] { QuitLoop(false); }); 249 ping->Ping([this] { QuitLoop(false); });
214 loop().Run(); 250 loop().Run();
215 } 251 }
216 loop().RunUntilIdle(); // Run stuff caused by destructors. 252 loop().RunUntilIdle(); // Run stuff caused by destructors.
217 253
(...skipping 30 matching lines...) Expand all
248 loop().RunUntilIdle(); // Run stuff caused by destructors. 284 loop().RunUntilIdle(); // Run stuff caused by destructors.
249 285
250 sp.reset(); 286 sp.reset();
251 loop().RunUntilIdle(); 287 loop().RunUntilIdle();
252 288
253 EXPECT_FALSE(was_run); 289 EXPECT_FALSE(was_run);
254 } 290 }
255 291
256 } // namespace 292 } // namespace
257 } // namespace mojo 293 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/cpp/application/service_provider_impl.h ('k') | mojo/public/cpp/application/tests/service_registry_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698