OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <stdlib.h> | 5 #include <stdlib.h> |
6 #include <string.h> | 6 #include <string.h> |
| 7 #include <utility> |
7 | 8 |
8 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
9 #include "mojo/message_pump/message_pump_mojo.h" | 10 #include "mojo/message_pump/message_pump_mojo.h" |
10 #include "mojo/public/cpp/bindings/lib/connector.h" | 11 #include "mojo/public/cpp/bindings/lib/connector.h" |
11 #include "mojo/public/cpp/bindings/lib/message_builder.h" | 12 #include "mojo/public/cpp/bindings/lib/message_builder.h" |
12 #include "mojo/public/cpp/bindings/tests/message_queue.h" | 13 #include "mojo/public/cpp/bindings/tests/message_queue.h" |
13 #include "mojo/public/cpp/system/macros.h" | 14 #include "mojo/public/cpp/system/macros.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
15 | 16 |
16 namespace mojo { | 17 namespace mojo { |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 | 94 |
94 protected: | 95 protected: |
95 ScopedMessagePipeHandle handle0_; | 96 ScopedMessagePipeHandle handle0_; |
96 ScopedMessagePipeHandle handle1_; | 97 ScopedMessagePipeHandle handle1_; |
97 | 98 |
98 private: | 99 private: |
99 base::MessageLoop loop_; | 100 base::MessageLoop loop_; |
100 }; | 101 }; |
101 | 102 |
102 TEST_F(ConnectorTest, Basic) { | 103 TEST_F(ConnectorTest, Basic) { |
103 internal::Connector connector0(handle0_.Pass(), | 104 internal::Connector connector0(std::move(handle0_), |
104 internal::Connector::SINGLE_THREADED_SEND); | 105 internal::Connector::SINGLE_THREADED_SEND); |
105 internal::Connector connector1(handle1_.Pass(), | 106 internal::Connector connector1(std::move(handle1_), |
106 internal::Connector::SINGLE_THREADED_SEND); | 107 internal::Connector::SINGLE_THREADED_SEND); |
107 | 108 |
108 const char kText[] = "hello world"; | 109 const char kText[] = "hello world"; |
109 | 110 |
110 Message message; | 111 Message message; |
111 AllocMessage(kText, &message); | 112 AllocMessage(kText, &message); |
112 | 113 |
113 connector0.Accept(&message); | 114 connector0.Accept(&message); |
114 | 115 |
115 MessageAccumulator accumulator; | 116 MessageAccumulator accumulator; |
116 connector1.set_incoming_receiver(&accumulator); | 117 connector1.set_incoming_receiver(&accumulator); |
117 | 118 |
118 PumpMessages(); | 119 PumpMessages(); |
119 | 120 |
120 ASSERT_FALSE(accumulator.IsEmpty()); | 121 ASSERT_FALSE(accumulator.IsEmpty()); |
121 | 122 |
122 Message message_received; | 123 Message message_received; |
123 accumulator.Pop(&message_received); | 124 accumulator.Pop(&message_received); |
124 | 125 |
125 EXPECT_EQ( | 126 EXPECT_EQ( |
126 std::string(kText), | 127 std::string(kText), |
127 std::string(reinterpret_cast<const char*>(message_received.payload()))); | 128 std::string(reinterpret_cast<const char*>(message_received.payload()))); |
128 } | 129 } |
129 | 130 |
130 TEST_F(ConnectorTest, Basic_Synchronous) { | 131 TEST_F(ConnectorTest, Basic_Synchronous) { |
131 internal::Connector connector0(handle0_.Pass(), | 132 internal::Connector connector0(std::move(handle0_), |
132 internal::Connector::SINGLE_THREADED_SEND); | 133 internal::Connector::SINGLE_THREADED_SEND); |
133 internal::Connector connector1(handle1_.Pass(), | 134 internal::Connector connector1(std::move(handle1_), |
134 internal::Connector::SINGLE_THREADED_SEND); | 135 internal::Connector::SINGLE_THREADED_SEND); |
135 | 136 |
136 const char kText[] = "hello world"; | 137 const char kText[] = "hello world"; |
137 | 138 |
138 Message message; | 139 Message message; |
139 AllocMessage(kText, &message); | 140 AllocMessage(kText, &message); |
140 | 141 |
141 connector0.Accept(&message); | 142 connector0.Accept(&message); |
142 | 143 |
143 MessageAccumulator accumulator; | 144 MessageAccumulator accumulator; |
144 connector1.set_incoming_receiver(&accumulator); | 145 connector1.set_incoming_receiver(&accumulator); |
145 | 146 |
146 connector1.WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE); | 147 connector1.WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE); |
147 | 148 |
148 ASSERT_FALSE(accumulator.IsEmpty()); | 149 ASSERT_FALSE(accumulator.IsEmpty()); |
149 | 150 |
150 Message message_received; | 151 Message message_received; |
151 accumulator.Pop(&message_received); | 152 accumulator.Pop(&message_received); |
152 | 153 |
153 EXPECT_EQ( | 154 EXPECT_EQ( |
154 std::string(kText), | 155 std::string(kText), |
155 std::string(reinterpret_cast<const char*>(message_received.payload()))); | 156 std::string(reinterpret_cast<const char*>(message_received.payload()))); |
156 } | 157 } |
157 | 158 |
158 TEST_F(ConnectorTest, Basic_EarlyIncomingReceiver) { | 159 TEST_F(ConnectorTest, Basic_EarlyIncomingReceiver) { |
159 internal::Connector connector0(handle0_.Pass(), | 160 internal::Connector connector0(std::move(handle0_), |
160 internal::Connector::SINGLE_THREADED_SEND); | 161 internal::Connector::SINGLE_THREADED_SEND); |
161 internal::Connector connector1(handle1_.Pass(), | 162 internal::Connector connector1(std::move(handle1_), |
162 internal::Connector::SINGLE_THREADED_SEND); | 163 internal::Connector::SINGLE_THREADED_SEND); |
163 | 164 |
164 MessageAccumulator accumulator; | 165 MessageAccumulator accumulator; |
165 connector1.set_incoming_receiver(&accumulator); | 166 connector1.set_incoming_receiver(&accumulator); |
166 | 167 |
167 const char kText[] = "hello world"; | 168 const char kText[] = "hello world"; |
168 | 169 |
169 Message message; | 170 Message message; |
170 AllocMessage(kText, &message); | 171 AllocMessage(kText, &message); |
171 | 172 |
172 connector0.Accept(&message); | 173 connector0.Accept(&message); |
173 | 174 |
174 PumpMessages(); | 175 PumpMessages(); |
175 | 176 |
176 ASSERT_FALSE(accumulator.IsEmpty()); | 177 ASSERT_FALSE(accumulator.IsEmpty()); |
177 | 178 |
178 Message message_received; | 179 Message message_received; |
179 accumulator.Pop(&message_received); | 180 accumulator.Pop(&message_received); |
180 | 181 |
181 EXPECT_EQ( | 182 EXPECT_EQ( |
182 std::string(kText), | 183 std::string(kText), |
183 std::string(reinterpret_cast<const char*>(message_received.payload()))); | 184 std::string(reinterpret_cast<const char*>(message_received.payload()))); |
184 } | 185 } |
185 | 186 |
186 TEST_F(ConnectorTest, Basic_TwoMessages) { | 187 TEST_F(ConnectorTest, Basic_TwoMessages) { |
187 internal::Connector connector0(handle0_.Pass(), | 188 internal::Connector connector0(std::move(handle0_), |
188 internal::Connector::SINGLE_THREADED_SEND); | 189 internal::Connector::SINGLE_THREADED_SEND); |
189 internal::Connector connector1(handle1_.Pass(), | 190 internal::Connector connector1(std::move(handle1_), |
190 internal::Connector::SINGLE_THREADED_SEND); | 191 internal::Connector::SINGLE_THREADED_SEND); |
191 | 192 |
192 const char* kText[] = {"hello", "world"}; | 193 const char* kText[] = {"hello", "world"}; |
193 | 194 |
194 for (size_t i = 0; i < MOJO_ARRAYSIZE(kText); ++i) { | 195 for (size_t i = 0; i < MOJO_ARRAYSIZE(kText); ++i) { |
195 Message message; | 196 Message message; |
196 AllocMessage(kText[i], &message); | 197 AllocMessage(kText[i], &message); |
197 | 198 |
198 connector0.Accept(&message); | 199 connector0.Accept(&message); |
199 } | 200 } |
200 | 201 |
201 MessageAccumulator accumulator; | 202 MessageAccumulator accumulator; |
202 connector1.set_incoming_receiver(&accumulator); | 203 connector1.set_incoming_receiver(&accumulator); |
203 | 204 |
204 PumpMessages(); | 205 PumpMessages(); |
205 | 206 |
206 for (size_t i = 0; i < MOJO_ARRAYSIZE(kText); ++i) { | 207 for (size_t i = 0; i < MOJO_ARRAYSIZE(kText); ++i) { |
207 ASSERT_FALSE(accumulator.IsEmpty()); | 208 ASSERT_FALSE(accumulator.IsEmpty()); |
208 | 209 |
209 Message message_received; | 210 Message message_received; |
210 accumulator.Pop(&message_received); | 211 accumulator.Pop(&message_received); |
211 | 212 |
212 EXPECT_EQ( | 213 EXPECT_EQ( |
213 std::string(kText[i]), | 214 std::string(kText[i]), |
214 std::string(reinterpret_cast<const char*>(message_received.payload()))); | 215 std::string(reinterpret_cast<const char*>(message_received.payload()))); |
215 } | 216 } |
216 } | 217 } |
217 | 218 |
218 TEST_F(ConnectorTest, Basic_TwoMessages_Synchronous) { | 219 TEST_F(ConnectorTest, Basic_TwoMessages_Synchronous) { |
219 internal::Connector connector0(handle0_.Pass(), | 220 internal::Connector connector0(std::move(handle0_), |
220 internal::Connector::SINGLE_THREADED_SEND); | 221 internal::Connector::SINGLE_THREADED_SEND); |
221 internal::Connector connector1(handle1_.Pass(), | 222 internal::Connector connector1(std::move(handle1_), |
222 internal::Connector::SINGLE_THREADED_SEND); | 223 internal::Connector::SINGLE_THREADED_SEND); |
223 | 224 |
224 const char* kText[] = {"hello", "world"}; | 225 const char* kText[] = {"hello", "world"}; |
225 | 226 |
226 for (size_t i = 0; i < MOJO_ARRAYSIZE(kText); ++i) { | 227 for (size_t i = 0; i < MOJO_ARRAYSIZE(kText); ++i) { |
227 Message message; | 228 Message message; |
228 AllocMessage(kText[i], &message); | 229 AllocMessage(kText[i], &message); |
229 | 230 |
230 connector0.Accept(&message); | 231 connector0.Accept(&message); |
231 } | 232 } |
232 | 233 |
233 MessageAccumulator accumulator; | 234 MessageAccumulator accumulator; |
234 connector1.set_incoming_receiver(&accumulator); | 235 connector1.set_incoming_receiver(&accumulator); |
235 | 236 |
236 connector1.WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE); | 237 connector1.WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE); |
237 | 238 |
238 ASSERT_FALSE(accumulator.IsEmpty()); | 239 ASSERT_FALSE(accumulator.IsEmpty()); |
239 | 240 |
240 Message message_received; | 241 Message message_received; |
241 accumulator.Pop(&message_received); | 242 accumulator.Pop(&message_received); |
242 | 243 |
243 EXPECT_EQ( | 244 EXPECT_EQ( |
244 std::string(kText[0]), | 245 std::string(kText[0]), |
245 std::string(reinterpret_cast<const char*>(message_received.payload()))); | 246 std::string(reinterpret_cast<const char*>(message_received.payload()))); |
246 | 247 |
247 ASSERT_TRUE(accumulator.IsEmpty()); | 248 ASSERT_TRUE(accumulator.IsEmpty()); |
248 } | 249 } |
249 | 250 |
250 TEST_F(ConnectorTest, WriteToClosedPipe) { | 251 TEST_F(ConnectorTest, WriteToClosedPipe) { |
251 internal::Connector connector0(handle0_.Pass(), | 252 internal::Connector connector0(std::move(handle0_), |
252 internal::Connector::SINGLE_THREADED_SEND); | 253 internal::Connector::SINGLE_THREADED_SEND); |
253 | 254 |
254 const char kText[] = "hello world"; | 255 const char kText[] = "hello world"; |
255 | 256 |
256 Message message; | 257 Message message; |
257 AllocMessage(kText, &message); | 258 AllocMessage(kText, &message); |
258 | 259 |
259 // Close the other end of the pipe. | 260 // Close the other end of the pipe. |
260 handle1_.reset(); | 261 handle1_.reset(); |
261 | 262 |
262 // Not observed yet because we haven't spun the message loop yet. | 263 // Not observed yet because we haven't spun the message loop yet. |
263 EXPECT_FALSE(connector0.encountered_error()); | 264 EXPECT_FALSE(connector0.encountered_error()); |
264 | 265 |
265 // Write failures are not reported. | 266 // Write failures are not reported. |
266 bool ok = connector0.Accept(&message); | 267 bool ok = connector0.Accept(&message); |
267 EXPECT_TRUE(ok); | 268 EXPECT_TRUE(ok); |
268 | 269 |
269 // Still not observed. | 270 // Still not observed. |
270 EXPECT_FALSE(connector0.encountered_error()); | 271 EXPECT_FALSE(connector0.encountered_error()); |
271 | 272 |
272 // Spin the message loop, and then we should start observing the closed pipe. | 273 // Spin the message loop, and then we should start observing the closed pipe. |
273 PumpMessages(); | 274 PumpMessages(); |
274 | 275 |
275 EXPECT_TRUE(connector0.encountered_error()); | 276 EXPECT_TRUE(connector0.encountered_error()); |
276 } | 277 } |
277 | 278 |
278 TEST_F(ConnectorTest, MessageWithHandles) { | 279 TEST_F(ConnectorTest, MessageWithHandles) { |
279 internal::Connector connector0(handle0_.Pass(), | 280 internal::Connector connector0(std::move(handle0_), |
280 internal::Connector::SINGLE_THREADED_SEND); | 281 internal::Connector::SINGLE_THREADED_SEND); |
281 internal::Connector connector1(handle1_.Pass(), | 282 internal::Connector connector1(std::move(handle1_), |
282 internal::Connector::SINGLE_THREADED_SEND); | 283 internal::Connector::SINGLE_THREADED_SEND); |
283 | 284 |
284 const char kText[] = "hello world"; | 285 const char kText[] = "hello world"; |
285 | 286 |
286 Message message1; | 287 Message message1; |
287 AllocMessage(kText, &message1); | 288 AllocMessage(kText, &message1); |
288 | 289 |
289 MessagePipe pipe; | 290 MessagePipe pipe; |
290 message1.mutable_handles()->push_back(pipe.handle0.release()); | 291 message1.mutable_handles()->push_back(pipe.handle0.release()); |
291 | 292 |
(...skipping 19 matching lines...) Expand all Loading... |
311 | 312 |
312 // Now send a message to the transferred handle and confirm it's sent through | 313 // Now send a message to the transferred handle and confirm it's sent through |
313 // to the orginal pipe. | 314 // to the orginal pipe. |
314 // TODO(vtl): Do we need a better way of "downcasting" the handle types? | 315 // TODO(vtl): Do we need a better way of "downcasting" the handle types? |
315 ScopedMessagePipeHandle smph; | 316 ScopedMessagePipeHandle smph; |
316 smph.reset(MessagePipeHandle(message_received.handles()->front().value())); | 317 smph.reset(MessagePipeHandle(message_received.handles()->front().value())); |
317 message_received.mutable_handles()->front() = Handle(); | 318 message_received.mutable_handles()->front() = Handle(); |
318 // |smph| now owns this handle. | 319 // |smph| now owns this handle. |
319 | 320 |
320 internal::Connector connector_received( | 321 internal::Connector connector_received( |
321 smph.Pass(), internal::Connector::SINGLE_THREADED_SEND); | 322 std::move(smph), internal::Connector::SINGLE_THREADED_SEND); |
322 internal::Connector connector_original( | 323 internal::Connector connector_original( |
323 pipe.handle1.Pass(), internal::Connector::SINGLE_THREADED_SEND); | 324 std::move(pipe.handle1), internal::Connector::SINGLE_THREADED_SEND); |
324 | 325 |
325 Message message2; | 326 Message message2; |
326 AllocMessage(kText, &message2); | 327 AllocMessage(kText, &message2); |
327 | 328 |
328 connector_received.Accept(&message2); | 329 connector_received.Accept(&message2); |
329 connector_original.set_incoming_receiver(&accumulator); | 330 connector_original.set_incoming_receiver(&accumulator); |
330 PumpMessages(); | 331 PumpMessages(); |
331 | 332 |
332 ASSERT_FALSE(accumulator.IsEmpty()); | 333 ASSERT_FALSE(accumulator.IsEmpty()); |
333 | 334 |
334 accumulator.Pop(&message_received); | 335 accumulator.Pop(&message_received); |
335 | 336 |
336 EXPECT_EQ( | 337 EXPECT_EQ( |
337 std::string(kText), | 338 std::string(kText), |
338 std::string(reinterpret_cast<const char*>(message_received.payload()))); | 339 std::string(reinterpret_cast<const char*>(message_received.payload()))); |
339 } | 340 } |
340 | 341 |
341 TEST_F(ConnectorTest, WaitForIncomingMessageWithError) { | 342 TEST_F(ConnectorTest, WaitForIncomingMessageWithError) { |
342 internal::Connector connector0(handle0_.Pass(), | 343 internal::Connector connector0(std::move(handle0_), |
343 internal::Connector::SINGLE_THREADED_SEND); | 344 internal::Connector::SINGLE_THREADED_SEND); |
344 // Close the other end of the pipe. | 345 // Close the other end of the pipe. |
345 handle1_.reset(); | 346 handle1_.reset(); |
346 ASSERT_FALSE(connector0.WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE)); | 347 ASSERT_FALSE(connector0.WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE)); |
347 } | 348 } |
348 | 349 |
349 TEST_F(ConnectorTest, WaitForIncomingMessageWithDeletion) { | 350 TEST_F(ConnectorTest, WaitForIncomingMessageWithDeletion) { |
350 internal::Connector connector0(handle0_.Pass(), | 351 internal::Connector connector0(std::move(handle0_), |
351 internal::Connector::SINGLE_THREADED_SEND); | 352 internal::Connector::SINGLE_THREADED_SEND); |
352 internal::Connector* connector1 = new internal::Connector( | 353 internal::Connector* connector1 = new internal::Connector( |
353 handle1_.Pass(), internal::Connector::SINGLE_THREADED_SEND); | 354 std::move(handle1_), internal::Connector::SINGLE_THREADED_SEND); |
354 | 355 |
355 const char kText[] = "hello world"; | 356 const char kText[] = "hello world"; |
356 | 357 |
357 Message message; | 358 Message message; |
358 AllocMessage(kText, &message); | 359 AllocMessage(kText, &message); |
359 | 360 |
360 connector0.Accept(&message); | 361 connector0.Accept(&message); |
361 | 362 |
362 ConnectorDeletingMessageAccumulator accumulator(&connector1); | 363 ConnectorDeletingMessageAccumulator accumulator(&connector1); |
363 connector1->set_incoming_receiver(&accumulator); | 364 connector1->set_incoming_receiver(&accumulator); |
364 | 365 |
365 connector1->WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE); | 366 connector1->WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE); |
366 | 367 |
367 ASSERT_FALSE(connector1); | 368 ASSERT_FALSE(connector1); |
368 ASSERT_FALSE(accumulator.IsEmpty()); | 369 ASSERT_FALSE(accumulator.IsEmpty()); |
369 | 370 |
370 Message message_received; | 371 Message message_received; |
371 accumulator.Pop(&message_received); | 372 accumulator.Pop(&message_received); |
372 | 373 |
373 EXPECT_EQ( | 374 EXPECT_EQ( |
374 std::string(kText), | 375 std::string(kText), |
375 std::string(reinterpret_cast<const char*>(message_received.payload()))); | 376 std::string(reinterpret_cast<const char*>(message_received.payload()))); |
376 } | 377 } |
377 | 378 |
378 TEST_F(ConnectorTest, WaitForIncomingMessageWithReentrancy) { | 379 TEST_F(ConnectorTest, WaitForIncomingMessageWithReentrancy) { |
379 internal::Connector connector0(handle0_.Pass(), | 380 internal::Connector connector0(std::move(handle0_), |
380 internal::Connector::SINGLE_THREADED_SEND); | 381 internal::Connector::SINGLE_THREADED_SEND); |
381 internal::Connector connector1(handle1_.Pass(), | 382 internal::Connector connector1(std::move(handle1_), |
382 internal::Connector::SINGLE_THREADED_SEND); | 383 internal::Connector::SINGLE_THREADED_SEND); |
383 | 384 |
384 const char* kText[] = {"hello", "world"}; | 385 const char* kText[] = {"hello", "world"}; |
385 | 386 |
386 for (size_t i = 0; i < MOJO_ARRAYSIZE(kText); ++i) { | 387 for (size_t i = 0; i < MOJO_ARRAYSIZE(kText); ++i) { |
387 Message message; | 388 Message message; |
388 AllocMessage(kText[i], &message); | 389 AllocMessage(kText[i], &message); |
389 | 390 |
390 connector0.Accept(&message); | 391 connector0.Accept(&message); |
391 } | 392 } |
(...skipping 11 matching lines...) Expand all Loading... |
403 | 404 |
404 EXPECT_EQ( | 405 EXPECT_EQ( |
405 std::string(kText[i]), | 406 std::string(kText[i]), |
406 std::string(reinterpret_cast<const char*>(message_received.payload()))); | 407 std::string(reinterpret_cast<const char*>(message_received.payload()))); |
407 } | 408 } |
408 | 409 |
409 ASSERT_EQ(2, accumulator.number_of_calls()); | 410 ASSERT_EQ(2, accumulator.number_of_calls()); |
410 } | 411 } |
411 | 412 |
412 TEST_F(ConnectorTest, RaiseError) { | 413 TEST_F(ConnectorTest, RaiseError) { |
413 internal::Connector connector0(handle0_.Pass(), | 414 internal::Connector connector0(std::move(handle0_), |
414 internal::Connector::SINGLE_THREADED_SEND); | 415 internal::Connector::SINGLE_THREADED_SEND); |
415 bool error_handler_called0 = false; | 416 bool error_handler_called0 = false; |
416 connector0.set_connection_error_handler( | 417 connector0.set_connection_error_handler( |
417 [&error_handler_called0]() { error_handler_called0 = true; }); | 418 [&error_handler_called0]() { error_handler_called0 = true; }); |
418 | 419 |
419 internal::Connector connector1(handle1_.Pass(), | 420 internal::Connector connector1(std::move(handle1_), |
420 internal::Connector::SINGLE_THREADED_SEND); | 421 internal::Connector::SINGLE_THREADED_SEND); |
421 bool error_handler_called1 = false; | 422 bool error_handler_called1 = false; |
422 connector1.set_connection_error_handler( | 423 connector1.set_connection_error_handler( |
423 [&error_handler_called1]() { error_handler_called1 = true; }); | 424 [&error_handler_called1]() { error_handler_called1 = true; }); |
424 | 425 |
425 const char kText[] = "hello world"; | 426 const char kText[] = "hello world"; |
426 | 427 |
427 Message message; | 428 Message message; |
428 AllocMessage(kText, &message); | 429 AllocMessage(kText, &message); |
429 | 430 |
(...skipping 26 matching lines...) Expand all Loading... |
456 EXPECT_TRUE(connector1.encountered_error()); | 457 EXPECT_TRUE(connector1.encountered_error()); |
457 | 458 |
458 // The message pipe handle is valid at both sides. | 459 // The message pipe handle is valid at both sides. |
459 EXPECT_TRUE(connector0.is_valid()); | 460 EXPECT_TRUE(connector0.is_valid()); |
460 EXPECT_TRUE(connector1.is_valid()); | 461 EXPECT_TRUE(connector1.is_valid()); |
461 } | 462 } |
462 | 463 |
463 } // namespace | 464 } // namespace |
464 } // namespace test | 465 } // namespace test |
465 } // namespace mojo | 466 } // namespace mojo |
OLD | NEW |