OLD | NEW |
(Empty) | |
| 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 |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "base/memory/ref_counted.h" |
| 6 #include "mojo/edk/system/test_utils.h" |
| 7 #include "mojo/public/c/system/core.h" |
| 8 #include "mojo/public/c/system/types.h" |
| 9 |
| 10 namespace mojo { |
| 11 namespace edk { |
| 12 namespace { |
| 13 |
| 14 const MojoHandleSignals kAllSignals = MOJO_HANDLE_SIGNAL_READABLE | |
| 15 MOJO_HANDLE_SIGNAL_WRITABLE | |
| 16 MOJO_HANDLE_SIGNAL_PEER_CLOSED; |
| 17 static const char kHelloWorld[] = "hello world"; |
| 18 |
| 19 class MessagePipeTest : public test::MojoSystemTest { |
| 20 public: |
| 21 MessagePipeTest() { |
| 22 CHECK_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(nullptr, &pipe0_, &pipe1_)); |
| 23 } |
| 24 |
| 25 ~MessagePipeTest() override { |
| 26 if (pipe0_ != MOJO_HANDLE_INVALID) |
| 27 CHECK_EQ(MOJO_RESULT_OK, MojoClose(pipe0_)); |
| 28 if (pipe1_ != MOJO_HANDLE_INVALID) |
| 29 CHECK_EQ(MOJO_RESULT_OK, MojoClose(pipe1_)); |
| 30 } |
| 31 |
| 32 MojoResult WriteMessage(MojoHandle message_pipe_handle, |
| 33 const void* bytes, |
| 34 uint32_t num_bytes) { |
| 35 return MojoWriteMessage(message_pipe_handle, bytes, num_bytes, nullptr, 0, |
| 36 MOJO_WRITE_MESSAGE_FLAG_NONE); |
| 37 } |
| 38 |
| 39 MojoResult ReadMessage(MojoHandle message_pipe_handle, |
| 40 void* bytes, |
| 41 uint32_t* num_bytes, |
| 42 bool may_discard = false) { |
| 43 return MojoReadMessage(message_pipe_handle, bytes, num_bytes, nullptr, 0, |
| 44 may_discard ? MOJO_READ_MESSAGE_FLAG_MAY_DISCARD : |
| 45 MOJO_READ_MESSAGE_FLAG_NONE); |
| 46 } |
| 47 |
| 48 MojoHandle pipe0_, pipe1_; |
| 49 |
| 50 private: |
| 51 MOJO_DISALLOW_COPY_AND_ASSIGN(MessagePipeTest); |
| 52 }; |
| 53 |
| 54 TEST_F(MessagePipeTest, WriteData) { |
| 55 ASSERT_EQ(MOJO_RESULT_OK, |
| 56 WriteMessage(pipe0_, kHelloWorld, sizeof(kHelloWorld))); |
| 57 } |
| 58 |
| 59 // Tests: |
| 60 // - only default flags |
| 61 // - reading messages from a port |
| 62 // - when there are no/one/two messages available for that port |
| 63 // - with buffer size 0 (and null buffer) -- should get size |
| 64 // - with too-small buffer -- should get size |
| 65 // - also verify that buffers aren't modified when/where they shouldn't be |
| 66 // - writing messages to a port |
| 67 // - in the obvious scenarios (as above) |
| 68 // - to a port that's been closed |
| 69 // - writing a message to a port, closing the other (would be the source) port, |
| 70 // and reading it |
| 71 TEST_F(MessagePipeTest, Basic) { |
| 72 int32_t buffer[2]; |
| 73 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); |
| 74 uint32_t buffer_size; |
| 75 |
| 76 // Nothing to read yet on port 0. |
| 77 buffer[0] = 123; |
| 78 buffer[1] = 456; |
| 79 buffer_size = kBufferSize; |
| 80 ASSERT_EQ(MOJO_RESULT_SHOULD_WAIT, ReadMessage(pipe0_, buffer, &buffer_size)); |
| 81 ASSERT_EQ(kBufferSize, buffer_size); |
| 82 ASSERT_EQ(123, buffer[0]); |
| 83 ASSERT_EQ(456, buffer[1]); |
| 84 |
| 85 // Ditto for port 1. |
| 86 buffer[0] = 123; |
| 87 buffer[1] = 456; |
| 88 buffer_size = kBufferSize; |
| 89 ASSERT_EQ(MOJO_RESULT_SHOULD_WAIT, ReadMessage(pipe1_, buffer, &buffer_size)); |
| 90 |
| 91 // Write from port 1 (to port 0). |
| 92 buffer[0] = 789012345; |
| 93 buffer[1] = 0; |
| 94 ASSERT_EQ(MOJO_RESULT_OK, WriteMessage(pipe1_, buffer, sizeof(buffer[0]))); |
| 95 |
| 96 MojoHandleSignalsState state; |
| 97 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe0_, MOJO_HANDLE_SIGNAL_READABLE, |
| 98 MOJO_DEADLINE_INDEFINITE, &state)); |
| 99 |
| 100 // Read from port 0. |
| 101 buffer[0] = 123; |
| 102 buffer[1] = 456; |
| 103 buffer_size = kBufferSize; |
| 104 ASSERT_EQ(MOJO_RESULT_OK, ReadMessage(pipe0_, buffer, &buffer_size)); |
| 105 ASSERT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
| 106 ASSERT_EQ(789012345, buffer[0]); |
| 107 ASSERT_EQ(456, buffer[1]); |
| 108 |
| 109 // Read again from port 0 -- it should be empty. |
| 110 buffer_size = kBufferSize; |
| 111 ASSERT_EQ(MOJO_RESULT_SHOULD_WAIT, ReadMessage(pipe0_, buffer, &buffer_size)); |
| 112 |
| 113 // Write two messages from port 0 (to port 1). |
| 114 buffer[0] = 123456789; |
| 115 buffer[1] = 0; |
| 116 ASSERT_EQ(MOJO_RESULT_OK, WriteMessage(pipe0_, buffer, sizeof(buffer[0]))); |
| 117 buffer[0] = 234567890; |
| 118 buffer[1] = 0; |
| 119 ASSERT_EQ(MOJO_RESULT_OK, WriteMessage(pipe0_, buffer, sizeof(buffer[0]))); |
| 120 |
| 121 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe1_, MOJO_HANDLE_SIGNAL_READABLE, |
| 122 MOJO_DEADLINE_INDEFINITE, &state)); |
| 123 |
| 124 // Read from port 1 with buffer size 0 (should get the size of next message). |
| 125 // Also test that giving a null buffer is okay when the buffer size is 0. |
| 126 buffer_size = 0; |
| 127 ASSERT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
| 128 ReadMessage(pipe1_, nullptr, &buffer_size)); |
| 129 ASSERT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
| 130 |
| 131 // Read from port 1 with buffer size 1 (too small; should get the size of next |
| 132 // message). |
| 133 buffer[0] = 123; |
| 134 buffer[1] = 456; |
| 135 buffer_size = 1; |
| 136 ASSERT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
| 137 ReadMessage(pipe1_, buffer, &buffer_size)); |
| 138 ASSERT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
| 139 ASSERT_EQ(123, buffer[0]); |
| 140 ASSERT_EQ(456, buffer[1]); |
| 141 |
| 142 // Read from port 1. |
| 143 buffer[0] = 123; |
| 144 buffer[1] = 456; |
| 145 buffer_size = kBufferSize; |
| 146 ASSERT_EQ(MOJO_RESULT_OK, ReadMessage(pipe1_, buffer, &buffer_size)); |
| 147 ASSERT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
| 148 ASSERT_EQ(123456789, buffer[0]); |
| 149 ASSERT_EQ(456, buffer[1]); |
| 150 |
| 151 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe1_, MOJO_HANDLE_SIGNAL_READABLE, |
| 152 MOJO_DEADLINE_INDEFINITE, &state)); |
| 153 |
| 154 // Read again from port 1. |
| 155 buffer[0] = 123; |
| 156 buffer[1] = 456; |
| 157 buffer_size = kBufferSize; |
| 158 ASSERT_EQ(MOJO_RESULT_OK, ReadMessage(pipe1_, buffer, &buffer_size)); |
| 159 ASSERT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
| 160 ASSERT_EQ(234567890, buffer[0]); |
| 161 ASSERT_EQ(456, buffer[1]); |
| 162 |
| 163 // Read again from port 1 -- it should be empty. |
| 164 buffer_size = kBufferSize; |
| 165 ASSERT_EQ(MOJO_RESULT_SHOULD_WAIT, ReadMessage(pipe1_, buffer, &buffer_size)); |
| 166 |
| 167 // Write from port 0 (to port 1). |
| 168 buffer[0] = 345678901; |
| 169 buffer[1] = 0; |
| 170 ASSERT_EQ(MOJO_RESULT_OK, WriteMessage(pipe0_, buffer, sizeof(buffer[0]))); |
| 171 |
| 172 // Close port 0. |
| 173 MojoClose(pipe0_); |
| 174 pipe0_ = MOJO_HANDLE_INVALID; |
| 175 |
| 176 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe1_, MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 177 MOJO_DEADLINE_INDEFINITE, &state)); |
| 178 |
| 179 // Try to write from port 1 (to port 0). |
| 180 buffer[0] = 456789012; |
| 181 buffer[1] = 0; |
| 182 ASSERT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 183 WriteMessage(pipe1_, buffer, sizeof(buffer[0]))); |
| 184 |
| 185 // Read from port 1; should still get message (even though port 0 was closed). |
| 186 buffer[0] = 123; |
| 187 buffer[1] = 456; |
| 188 buffer_size = kBufferSize; |
| 189 ASSERT_EQ(MOJO_RESULT_OK, ReadMessage(pipe1_, buffer, &buffer_size)); |
| 190 ASSERT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
| 191 ASSERT_EQ(345678901, buffer[0]); |
| 192 ASSERT_EQ(456, buffer[1]); |
| 193 |
| 194 // Read again from port 1 -- it should be empty (and port 0 is closed). |
| 195 buffer_size = kBufferSize; |
| 196 ASSERT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 197 ReadMessage(pipe1_, buffer, &buffer_size)); |
| 198 } |
| 199 |
| 200 TEST_F(MessagePipeTest, CloseWithQueuedIncomingMessages) { |
| 201 int32_t buffer[1]; |
| 202 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); |
| 203 uint32_t buffer_size; |
| 204 |
| 205 // Write some messages from port 1 (to port 0). |
| 206 for (int32_t i = 0; i < 5; i++) { |
| 207 buffer[0] = i; |
| 208 ASSERT_EQ(MOJO_RESULT_OK, WriteMessage(pipe1_, buffer, kBufferSize)); |
| 209 } |
| 210 |
| 211 MojoHandleSignalsState state; |
| 212 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe0_, MOJO_HANDLE_SIGNAL_READABLE, |
| 213 MOJO_DEADLINE_INDEFINITE, &state)); |
| 214 |
| 215 // Port 0 shouldn't be empty. |
| 216 buffer_size = 0; |
| 217 ASSERT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
| 218 ReadMessage(pipe0_, nullptr, &buffer_size)); |
| 219 ASSERT_EQ(kBufferSize, buffer_size); |
| 220 |
| 221 // Close port 0 first, which should have outstanding (incoming) messages. |
| 222 MojoClose(pipe0_); |
| 223 MojoClose(pipe1_); |
| 224 pipe0_ = pipe1_ = MOJO_HANDLE_INVALID; |
| 225 } |
| 226 |
| 227 TEST_F(MessagePipeTest, DiscardMode) { |
| 228 int32_t buffer[2]; |
| 229 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); |
| 230 uint32_t buffer_size; |
| 231 |
| 232 // Write from port 1 (to port 0). |
| 233 buffer[0] = 789012345; |
| 234 buffer[1] = 0; |
| 235 ASSERT_EQ(MOJO_RESULT_OK, WriteMessage(pipe1_, buffer, sizeof(buffer[0]))); |
| 236 |
| 237 MojoHandleSignalsState state; |
| 238 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe0_, MOJO_HANDLE_SIGNAL_READABLE, |
| 239 MOJO_DEADLINE_INDEFINITE, &state)); |
| 240 |
| 241 // Read/discard from port 0 (no buffer); get size. |
| 242 buffer_size = 0; |
| 243 ASSERT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
| 244 ReadMessage(pipe0_, nullptr, &buffer_size, true)); |
| 245 ASSERT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
| 246 |
| 247 // Read again from port 0 -- it should be empty. |
| 248 buffer_size = kBufferSize; |
| 249 ASSERT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 250 ReadMessage(pipe0_, buffer, &buffer_size, true)); |
| 251 |
| 252 // Write from port 1 (to port 0). |
| 253 buffer[0] = 890123456; |
| 254 buffer[1] = 0; |
| 255 ASSERT_EQ(MOJO_RESULT_OK, |
| 256 WriteMessage(pipe1_, buffer, sizeof(buffer[0]))); |
| 257 |
| 258 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe0_, MOJO_HANDLE_SIGNAL_READABLE, |
| 259 MOJO_DEADLINE_INDEFINITE, &state)); |
| 260 |
| 261 // Read from port 0 (buffer big enough). |
| 262 buffer[0] = 123; |
| 263 buffer[1] = 456; |
| 264 buffer_size = kBufferSize; |
| 265 ASSERT_EQ(MOJO_RESULT_OK, ReadMessage(pipe0_, buffer, &buffer_size, true)); |
| 266 ASSERT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
| 267 ASSERT_EQ(890123456, buffer[0]); |
| 268 ASSERT_EQ(456, buffer[1]); |
| 269 |
| 270 // Read again from port 0 -- it should be empty. |
| 271 buffer_size = kBufferSize; |
| 272 ASSERT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 273 ReadMessage(pipe0_, buffer, &buffer_size, true)); |
| 274 |
| 275 // Write from port 1 (to port 0). |
| 276 buffer[0] = 901234567; |
| 277 buffer[1] = 0; |
| 278 ASSERT_EQ(MOJO_RESULT_OK, WriteMessage(pipe1_, buffer, sizeof(buffer[0]))); |
| 279 |
| 280 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe0_, MOJO_HANDLE_SIGNAL_READABLE, |
| 281 MOJO_DEADLINE_INDEFINITE, &state)); |
| 282 |
| 283 // Read/discard from port 0 (buffer too small); get size. |
| 284 buffer_size = 1; |
| 285 ASSERT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
| 286 ReadMessage(pipe0_, buffer, &buffer_size, true)); |
| 287 ASSERT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
| 288 |
| 289 // Read again from port 0 -- it should be empty. |
| 290 buffer_size = kBufferSize; |
| 291 ASSERT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 292 ReadMessage(pipe0_, buffer, &buffer_size, true)); |
| 293 |
| 294 // Write from port 1 (to port 0). |
| 295 buffer[0] = 123456789; |
| 296 buffer[1] = 0; |
| 297 ASSERT_EQ(MOJO_RESULT_OK, WriteMessage(pipe1_, buffer, sizeof(buffer[0]))); |
| 298 |
| 299 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe0_, MOJO_HANDLE_SIGNAL_READABLE, |
| 300 MOJO_DEADLINE_INDEFINITE, &state)); |
| 301 |
| 302 // Discard from port 0. |
| 303 buffer_size = 1; |
| 304 ASSERT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
| 305 ReadMessage(pipe0_, nullptr, 0, true)); |
| 306 |
| 307 // Read again from port 0 -- it should be empty. |
| 308 buffer_size = kBufferSize; |
| 309 ASSERT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 310 ReadMessage(pipe0_, buffer, &buffer_size, true)); |
| 311 } |
| 312 |
| 313 TEST_F(MessagePipeTest, BasicWaiting) { |
| 314 MojoHandleSignalsState hss; |
| 315 |
| 316 int32_t buffer[1]; |
| 317 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); |
| 318 uint32_t buffer_size; |
| 319 |
| 320 // Always writable (until the other port is closed). |
| 321 hss = MojoHandleSignalsState(); |
| 322 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe0_, MOJO_HANDLE_SIGNAL_WRITABLE, 0, |
| 323 &hss)); |
| 324 ASSERT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); |
| 325 ASSERT_EQ(kAllSignals, hss.satisfiable_signals); |
| 326 hss = MojoHandleSignalsState(); |
| 327 |
| 328 // Not yet readable. |
| 329 ASSERT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
| 330 MojoWait(pipe0_, MOJO_HANDLE_SIGNAL_READABLE, 0, &hss)); |
| 331 ASSERT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); |
| 332 ASSERT_EQ(kAllSignals, hss.satisfiable_signals); |
| 333 |
| 334 // The peer is not closed. |
| 335 hss = MojoHandleSignalsState(); |
| 336 ASSERT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
| 337 MojoWait(pipe0_, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 0, &hss)); |
| 338 ASSERT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); |
| 339 ASSERT_EQ(kAllSignals, hss.satisfiable_signals); |
| 340 |
| 341 // Write from port 0 (to port 1), to make port 1 readable. |
| 342 buffer[0] = 123456789; |
| 343 ASSERT_EQ(MOJO_RESULT_OK, WriteMessage(pipe0_, buffer, kBufferSize)); |
| 344 |
| 345 // Port 1 should already be readable now. |
| 346 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe1_, MOJO_HANDLE_SIGNAL_READABLE, |
| 347 MOJO_DEADLINE_INDEFINITE, &hss)); |
| 348 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 349 hss.satisfied_signals); |
| 350 ASSERT_EQ(kAllSignals, hss.satisfiable_signals); |
| 351 // ... and still writable. |
| 352 hss = MojoHandleSignalsState(); |
| 353 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe1_, MOJO_HANDLE_SIGNAL_WRITABLE, |
| 354 MOJO_DEADLINE_INDEFINITE, &hss)); |
| 355 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 356 hss.satisfied_signals); |
| 357 ASSERT_EQ(kAllSignals, hss.satisfiable_signals); |
| 358 |
| 359 // Close port 0. |
| 360 MojoClose(pipe0_); |
| 361 pipe0_ = MOJO_HANDLE_INVALID; |
| 362 |
| 363 // Port 1 should be signaled with peer closed. |
| 364 hss = MojoHandleSignalsState(); |
| 365 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe1_, MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 366 MOJO_DEADLINE_INDEFINITE, &hss)); |
| 367 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 368 hss.satisfied_signals); |
| 369 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 370 hss.satisfiable_signals); |
| 371 |
| 372 // Port 1 should not be writable. |
| 373 hss = MojoHandleSignalsState(); |
| 374 |
| 375 ASSERT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 376 MojoWait(pipe1_, MOJO_HANDLE_SIGNAL_WRITABLE, |
| 377 MOJO_DEADLINE_INDEFINITE, &hss)); |
| 378 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 379 hss.satisfied_signals); |
| 380 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 381 hss.satisfiable_signals); |
| 382 |
| 383 // But it should still be readable. |
| 384 hss = MojoHandleSignalsState(); |
| 385 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe1_, MOJO_HANDLE_SIGNAL_READABLE, |
| 386 MOJO_DEADLINE_INDEFINITE, &hss)); |
| 387 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 388 hss.satisfied_signals); |
| 389 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 390 hss.satisfiable_signals); |
| 391 |
| 392 // Read from port 1. |
| 393 buffer[0] = 0; |
| 394 buffer_size = kBufferSize; |
| 395 ASSERT_EQ(MOJO_RESULT_OK, ReadMessage(pipe1_, buffer, &buffer_size)); |
| 396 ASSERT_EQ(123456789, buffer[0]); |
| 397 |
| 398 // Now port 1 should no longer be readable. |
| 399 hss = MojoHandleSignalsState(); |
| 400 ASSERT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 401 MojoWait(pipe1_, MOJO_HANDLE_SIGNAL_READABLE, |
| 402 MOJO_DEADLINE_INDEFINITE, &hss)); |
| 403 ASSERT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); |
| 404 ASSERT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); |
| 405 } |
| 406 |
| 407 } // namespace |
| 408 } // namespace edk |
| 409 } // namespace mojo |
OLD | NEW |