| 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 // NOTE(vtl): Some of these tests are inherently flaky (e.g., if run on a | 5 // NOTE(vtl): Some of these tests are inherently flaky (e.g., if run on a |
| 6 // heavily-loaded system). Sorry. |test::EpsilonTimeout()| may be increased to | 6 // heavily-loaded system). Sorry. |test::EpsilonTimeout()| may be increased to |
| 7 // increase tolerance and reduce observed flakiness (though doing so reduces the | 7 // increase tolerance and reduce observed flakiness (though doing so reduces the |
| 8 // meaningfulness of the test). | 8 // meaningfulness of the test). |
| 9 | 9 |
| 10 #include "mojo/system/message_pipe_dispatcher.h" | 10 #include "mojo/system/message_pipe_dispatcher.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 scoped_refptr<MessagePipe> mp(new MessagePipe()); | 46 scoped_refptr<MessagePipe> mp(new MessagePipe()); |
| 47 d0->Init(mp, i); // 0, 1. | 47 d0->Init(mp, i); // 0, 1. |
| 48 d1->Init(mp, i ^ 1); // 1, 0. | 48 d1->Init(mp, i ^ 1); // 1, 0. |
| 49 } | 49 } |
| 50 Waiter w; | 50 Waiter w; |
| 51 uint32_t context = 0; | 51 uint32_t context = 0; |
| 52 | 52 |
| 53 // Try adding a writable waiter when already writable. | 53 // Try adding a writable waiter when already writable. |
| 54 w.Init(); | 54 w.Init(); |
| 55 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, | 55 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, |
| 56 d0->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 0)); | 56 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 0)); |
| 57 // Shouldn't need to remove the waiter (it was not added). | 57 // Shouldn't need to remove the waiter (it was not added). |
| 58 | 58 |
| 59 // Add a readable waiter to |d0|, then make it readable (by writing to | 59 // Add a readable waiter to |d0|, then make it readable (by writing to |
| 60 // |d1|), then wait. | 60 // |d1|), then wait. |
| 61 w.Init(); | 61 w.Init(); |
| 62 EXPECT_EQ(MOJO_RESULT_OK, | 62 EXPECT_EQ(MOJO_RESULT_OK, |
| 63 d0->AddWaiter(&w, MOJO_WAIT_FLAG_READABLE, 1)); | 63 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 1)); |
| 64 buffer[0] = 123456789; | 64 buffer[0] = 123456789; |
| 65 EXPECT_EQ(MOJO_RESULT_OK, | 65 EXPECT_EQ(MOJO_RESULT_OK, |
| 66 d1->WriteMessage(buffer, kBufferSize, | 66 d1->WriteMessage(buffer, kBufferSize, |
| 67 NULL, | 67 NULL, |
| 68 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 68 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 69 stopwatch.Start(); | 69 stopwatch.Start(); |
| 70 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 70 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 71 EXPECT_EQ(1u, context); | 71 EXPECT_EQ(1u, context); |
| 72 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); | 72 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); |
| 73 d0->RemoveWaiter(&w); | 73 d0->RemoveWaiter(&w); |
| 74 | 74 |
| 75 // Try adding a readable waiter when already readable (from above). | 75 // Try adding a readable waiter when already readable (from above). |
| 76 w.Init(); | 76 w.Init(); |
| 77 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, | 77 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, |
| 78 d0->AddWaiter(&w, MOJO_WAIT_FLAG_READABLE, 2)); | 78 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 2)); |
| 79 // Shouldn't need to remove the waiter (it was not added). | 79 // Shouldn't need to remove the waiter (it was not added). |
| 80 | 80 |
| 81 // Make |d0| no longer readable (by reading from it). | 81 // Make |d0| no longer readable (by reading from it). |
| 82 buffer[0] = 0; | 82 buffer[0] = 0; |
| 83 buffer_size = kBufferSize; | 83 buffer_size = kBufferSize; |
| 84 EXPECT_EQ(MOJO_RESULT_OK, | 84 EXPECT_EQ(MOJO_RESULT_OK, |
| 85 d0->ReadMessage(buffer, &buffer_size, | 85 d0->ReadMessage(buffer, &buffer_size, |
| 86 0, NULL, | 86 0, NULL, |
| 87 MOJO_READ_MESSAGE_FLAG_NONE)); | 87 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 88 EXPECT_EQ(kBufferSize, buffer_size); | 88 EXPECT_EQ(kBufferSize, buffer_size); |
| 89 EXPECT_EQ(123456789, buffer[0]); | 89 EXPECT_EQ(123456789, buffer[0]); |
| 90 | 90 |
| 91 // Wait for zero time for readability on |d0| (will time out). | 91 // Wait for zero time for readability on |d0| (will time out). |
| 92 w.Init(); | 92 w.Init(); |
| 93 EXPECT_EQ(MOJO_RESULT_OK, | 93 EXPECT_EQ(MOJO_RESULT_OK, |
| 94 d0->AddWaiter(&w, MOJO_WAIT_FLAG_READABLE, 3)); | 94 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 3)); |
| 95 stopwatch.Start(); | 95 stopwatch.Start(); |
| 96 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, w.Wait(0, NULL)); | 96 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, w.Wait(0, NULL)); |
| 97 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); | 97 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); |
| 98 d0->RemoveWaiter(&w); | 98 d0->RemoveWaiter(&w); |
| 99 | 99 |
| 100 // Wait for non-zero, finite time for readability on |d0| (will time out). | 100 // Wait for non-zero, finite time for readability on |d0| (will time out). |
| 101 w.Init(); | 101 w.Init(); |
| 102 EXPECT_EQ(MOJO_RESULT_OK, | 102 EXPECT_EQ(MOJO_RESULT_OK, |
| 103 d0->AddWaiter(&w, MOJO_WAIT_FLAG_READABLE, 3)); | 103 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 3)); |
| 104 stopwatch.Start(); | 104 stopwatch.Start(); |
| 105 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, | 105 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
| 106 w.Wait(2 * test::EpsilonTimeout().InMicroseconds(), NULL)); | 106 w.Wait(2 * test::EpsilonTimeout().InMicroseconds(), NULL)); |
| 107 base::TimeDelta elapsed = stopwatch.Elapsed(); | 107 base::TimeDelta elapsed = stopwatch.Elapsed(); |
| 108 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); | 108 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); |
| 109 EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout()); | 109 EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout()); |
| 110 d0->RemoveWaiter(&w); | 110 d0->RemoveWaiter(&w); |
| 111 | 111 |
| 112 EXPECT_EQ(MOJO_RESULT_OK, d0->Close()); | 112 EXPECT_EQ(MOJO_RESULT_OK, d0->Close()); |
| 113 EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); | 113 EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 178 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 179 buffer[0] = 234567890; | 179 buffer[0] = 234567890; |
| 180 EXPECT_EQ(MOJO_RESULT_OK, | 180 EXPECT_EQ(MOJO_RESULT_OK, |
| 181 d1->WriteMessage(buffer, kBufferSize, | 181 d1->WriteMessage(buffer, kBufferSize, |
| 182 NULL, | 182 NULL, |
| 183 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 183 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 184 | 184 |
| 185 // Try waiting for readable on |d0|; should fail (already satisfied). | 185 // Try waiting for readable on |d0|; should fail (already satisfied). |
| 186 w.Init(); | 186 w.Init(); |
| 187 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, | 187 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, |
| 188 d0->AddWaiter(&w, MOJO_WAIT_FLAG_READABLE, 0)); | 188 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 0)); |
| 189 | 189 |
| 190 // Try reading from |d1|; should fail (nothing to read). | 190 // Try reading from |d1|; should fail (nothing to read). |
| 191 buffer[0] = 0; | 191 buffer[0] = 0; |
| 192 buffer_size = kBufferSize; | 192 buffer_size = kBufferSize; |
| 193 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 193 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 194 d1->ReadMessage(buffer, &buffer_size, | 194 d1->ReadMessage(buffer, &buffer_size, |
| 195 0, NULL, | 195 0, NULL, |
| 196 MOJO_READ_MESSAGE_FLAG_NONE)); | 196 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 197 | 197 |
| 198 // Close |d1|. | 198 // Close |d1|. |
| 199 EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); | 199 EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); |
| 200 | 200 |
| 201 // Try waiting for readable on |d0|; should fail (already satisfied). | 201 // Try waiting for readable on |d0|; should fail (already satisfied). |
| 202 w.Init(); | 202 w.Init(); |
| 203 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, | 203 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, |
| 204 d0->AddWaiter(&w, MOJO_WAIT_FLAG_READABLE, 1)); | 204 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 1)); |
| 205 | 205 |
| 206 // Read from |d0|. | 206 // Read from |d0|. |
| 207 buffer[0] = 0; | 207 buffer[0] = 0; |
| 208 buffer_size = kBufferSize; | 208 buffer_size = kBufferSize; |
| 209 EXPECT_EQ(MOJO_RESULT_OK, | 209 EXPECT_EQ(MOJO_RESULT_OK, |
| 210 d0->ReadMessage(buffer, &buffer_size, | 210 d0->ReadMessage(buffer, &buffer_size, |
| 211 0, NULL, | 211 0, NULL, |
| 212 MOJO_READ_MESSAGE_FLAG_NONE)); | 212 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 213 EXPECT_EQ(kBufferSize, buffer_size); | 213 EXPECT_EQ(kBufferSize, buffer_size); |
| 214 EXPECT_EQ(123456789, buffer[0]); | 214 EXPECT_EQ(123456789, buffer[0]); |
| 215 | 215 |
| 216 // Try waiting for readable on |d0|; should fail (already satisfied). | 216 // Try waiting for readable on |d0|; should fail (already satisfied). |
| 217 w.Init(); | 217 w.Init(); |
| 218 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, | 218 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, |
| 219 d0->AddWaiter(&w, MOJO_WAIT_FLAG_READABLE, 2)); | 219 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 2)); |
| 220 | 220 |
| 221 // Read again from |d0|. | 221 // Read again from |d0|. |
| 222 buffer[0] = 0; | 222 buffer[0] = 0; |
| 223 buffer_size = kBufferSize; | 223 buffer_size = kBufferSize; |
| 224 EXPECT_EQ(MOJO_RESULT_OK, | 224 EXPECT_EQ(MOJO_RESULT_OK, |
| 225 d0->ReadMessage(buffer, &buffer_size, | 225 d0->ReadMessage(buffer, &buffer_size, |
| 226 0, NULL, | 226 0, NULL, |
| 227 MOJO_READ_MESSAGE_FLAG_NONE)); | 227 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 228 EXPECT_EQ(kBufferSize, buffer_size); | 228 EXPECT_EQ(kBufferSize, buffer_size); |
| 229 EXPECT_EQ(234567890, buffer[0]); | 229 EXPECT_EQ(234567890, buffer[0]); |
| 230 | 230 |
| 231 // Try waiting for readable on |d0|; should fail (unsatisfiable). | 231 // Try waiting for readable on |d0|; should fail (unsatisfiable). |
| 232 w.Init(); | 232 w.Init(); |
| 233 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 233 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 234 d0->AddWaiter(&w, MOJO_WAIT_FLAG_READABLE, 3)); | 234 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 3)); |
| 235 | 235 |
| 236 // Try waiting for writable on |d0|; should fail (unsatisfiable). | 236 // Try waiting for writable on |d0|; should fail (unsatisfiable). |
| 237 w.Init(); | 237 w.Init(); |
| 238 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 238 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 239 d0->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 4)); | 239 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 4)); |
| 240 | 240 |
| 241 // Try reading from |d0|; should fail (nothing to read and other end | 241 // Try reading from |d0|; should fail (nothing to read and other end |
| 242 // closed). | 242 // closed). |
| 243 buffer[0] = 0; | 243 buffer[0] = 0; |
| 244 buffer_size = kBufferSize; | 244 buffer_size = kBufferSize; |
| 245 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 245 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 246 d0->ReadMessage(buffer, &buffer_size, | 246 d0->ReadMessage(buffer, &buffer_size, |
| 247 0, NULL, | 247 0, NULL, |
| 248 MOJO_READ_MESSAGE_FLAG_NONE)); | 248 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 249 | 249 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 276 MessagePipeDispatcher::kDefaultCreateOptions)); | 276 MessagePipeDispatcher::kDefaultCreateOptions)); |
| 277 { | 277 { |
| 278 scoped_refptr<MessagePipe> mp(new MessagePipe()); | 278 scoped_refptr<MessagePipe> mp(new MessagePipe()); |
| 279 d0->Init(mp, i); // 0, 1. | 279 d0->Init(mp, i); // 0, 1. |
| 280 d1->Init(mp, i ^ 1); // 1, 0. | 280 d1->Init(mp, i ^ 1); // 1, 0. |
| 281 } | 281 } |
| 282 | 282 |
| 283 // Wait for readable on |d1|, which will become readable after some time. | 283 // Wait for readable on |d1|, which will become readable after some time. |
| 284 { | 284 { |
| 285 test::WaiterThread thread(d1, | 285 test::WaiterThread thread(d1, |
| 286 MOJO_WAIT_FLAG_READABLE, | 286 MOJO_HANDLE_SIGNAL_READABLE, |
| 287 MOJO_DEADLINE_INDEFINITE, | 287 MOJO_DEADLINE_INDEFINITE, |
| 288 1, | 288 1, |
| 289 &did_wait, &result, &context); | 289 &did_wait, &result, &context); |
| 290 stopwatch.Start(); | 290 stopwatch.Start(); |
| 291 thread.Start(); | 291 thread.Start(); |
| 292 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); | 292 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); |
| 293 // Wake it up by writing to |d0|. | 293 // Wake it up by writing to |d0|. |
| 294 buffer[0] = 123456789; | 294 buffer[0] = 123456789; |
| 295 EXPECT_EQ(MOJO_RESULT_OK, | 295 EXPECT_EQ(MOJO_RESULT_OK, |
| 296 d0->WriteMessage(buffer, kBufferSize, | 296 d0->WriteMessage(buffer, kBufferSize, |
| 297 NULL, | 297 NULL, |
| 298 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 298 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 299 } // Joins the thread. | 299 } // Joins the thread. |
| 300 elapsed = stopwatch.Elapsed(); | 300 elapsed = stopwatch.Elapsed(); |
| 301 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); | 301 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); |
| 302 EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout()); | 302 EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout()); |
| 303 EXPECT_TRUE(did_wait); | 303 EXPECT_TRUE(did_wait); |
| 304 EXPECT_EQ(MOJO_RESULT_OK, result); | 304 EXPECT_EQ(MOJO_RESULT_OK, result); |
| 305 EXPECT_EQ(1u, context); | 305 EXPECT_EQ(1u, context); |
| 306 | 306 |
| 307 // Now |d1| is already readable. Try waiting for it again. | 307 // Now |d1| is already readable. Try waiting for it again. |
| 308 { | 308 { |
| 309 test::WaiterThread thread(d1, | 309 test::WaiterThread thread(d1, |
| 310 MOJO_WAIT_FLAG_READABLE, | 310 MOJO_HANDLE_SIGNAL_READABLE, |
| 311 MOJO_DEADLINE_INDEFINITE, | 311 MOJO_DEADLINE_INDEFINITE, |
| 312 2, | 312 2, |
| 313 &did_wait, &result, &context); | 313 &did_wait, &result, &context); |
| 314 stopwatch.Start(); | 314 stopwatch.Start(); |
| 315 thread.Start(); | 315 thread.Start(); |
| 316 } // Joins the thread. | 316 } // Joins the thread. |
| 317 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); | 317 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); |
| 318 EXPECT_FALSE(did_wait); | 318 EXPECT_FALSE(did_wait); |
| 319 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); | 319 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); |
| 320 | 320 |
| 321 // Consume what we wrote to |d0|. | 321 // Consume what we wrote to |d0|. |
| 322 buffer[0] = 0; | 322 buffer[0] = 0; |
| 323 buffer_size = kBufferSize; | 323 buffer_size = kBufferSize; |
| 324 EXPECT_EQ(MOJO_RESULT_OK, | 324 EXPECT_EQ(MOJO_RESULT_OK, |
| 325 d1->ReadMessage(buffer, &buffer_size, | 325 d1->ReadMessage(buffer, &buffer_size, |
| 326 0, NULL, | 326 0, NULL, |
| 327 MOJO_READ_MESSAGE_FLAG_NONE)); | 327 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 328 EXPECT_EQ(kBufferSize, buffer_size); | 328 EXPECT_EQ(kBufferSize, buffer_size); |
| 329 EXPECT_EQ(123456789, buffer[0]); | 329 EXPECT_EQ(123456789, buffer[0]); |
| 330 | 330 |
| 331 // Wait for readable on |d1| and close |d0| after some time, which should | 331 // Wait for readable on |d1| and close |d0| after some time, which should |
| 332 // cancel that wait. | 332 // cancel that wait. |
| 333 { | 333 { |
| 334 test::WaiterThread thread(d1, | 334 test::WaiterThread thread(d1, |
| 335 MOJO_WAIT_FLAG_READABLE, | 335 MOJO_HANDLE_SIGNAL_READABLE, |
| 336 MOJO_DEADLINE_INDEFINITE, | 336 MOJO_DEADLINE_INDEFINITE, |
| 337 3, | 337 3, |
| 338 &did_wait, &result, &context); | 338 &did_wait, &result, &context); |
| 339 stopwatch.Start(); | 339 stopwatch.Start(); |
| 340 thread.Start(); | 340 thread.Start(); |
| 341 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); | 341 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); |
| 342 EXPECT_EQ(MOJO_RESULT_OK, d0->Close()); | 342 EXPECT_EQ(MOJO_RESULT_OK, d0->Close()); |
| 343 } // Joins the thread. | 343 } // Joins the thread. |
| 344 elapsed = stopwatch.Elapsed(); | 344 elapsed = stopwatch.Elapsed(); |
| 345 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); | 345 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 359 { | 359 { |
| 360 scoped_refptr<MessagePipe> mp(new MessagePipe()); | 360 scoped_refptr<MessagePipe> mp(new MessagePipe()); |
| 361 d0->Init(mp, i); // 0, 1. | 361 d0->Init(mp, i); // 0, 1. |
| 362 d1->Init(mp, i ^ 1); // 1, 0. | 362 d1->Init(mp, i ^ 1); // 1, 0. |
| 363 } | 363 } |
| 364 | 364 |
| 365 // Wait for readable on |d1| and close |d1| after some time, which should | 365 // Wait for readable on |d1| and close |d1| after some time, which should |
| 366 // cancel that wait. | 366 // cancel that wait. |
| 367 { | 367 { |
| 368 test::WaiterThread thread(d1, | 368 test::WaiterThread thread(d1, |
| 369 MOJO_WAIT_FLAG_READABLE, | 369 MOJO_HANDLE_SIGNAL_READABLE, |
| 370 MOJO_DEADLINE_INDEFINITE, | 370 MOJO_DEADLINE_INDEFINITE, |
| 371 4, | 371 4, |
| 372 &did_wait, &result, &context); | 372 &did_wait, &result, &context); |
| 373 stopwatch.Start(); | 373 stopwatch.Start(); |
| 374 thread.Start(); | 374 thread.Start(); |
| 375 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); | 375 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); |
| 376 EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); | 376 EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); |
| 377 } // Joins the thread. | 377 } // Joins the thread. |
| 378 elapsed = stopwatch.Elapsed(); | 378 elapsed = stopwatch.Elapsed(); |
| 379 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); | 379 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 463 private: | 463 private: |
| 464 virtual void Run() OVERRIDE { | 464 virtual void Run() OVERRIDE { |
| 465 unsigned char buffer[kMaxMessageSize]; | 465 unsigned char buffer[kMaxMessageSize]; |
| 466 MojoResult result; | 466 MojoResult result; |
| 467 Waiter w; | 467 Waiter w; |
| 468 | 468 |
| 469 // Read messages. | 469 // Read messages. |
| 470 for (;;) { | 470 for (;;) { |
| 471 // Wait for it to be readable. | 471 // Wait for it to be readable. |
| 472 w.Init(); | 472 w.Init(); |
| 473 result = read_dispatcher_->AddWaiter(&w, MOJO_WAIT_FLAG_READABLE, 0); | 473 result = read_dispatcher_->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 0); |
| 474 EXPECT_TRUE(result == MOJO_RESULT_OK || | 474 EXPECT_TRUE(result == MOJO_RESULT_OK || |
| 475 result == MOJO_RESULT_ALREADY_EXISTS) << "result: " << result; | 475 result == MOJO_RESULT_ALREADY_EXISTS) << "result: " << result; |
| 476 if (result == MOJO_RESULT_OK) { | 476 if (result == MOJO_RESULT_OK) { |
| 477 // Actually need to wait. | 477 // Actually need to wait. |
| 478 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, NULL)); | 478 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, NULL)); |
| 479 read_dispatcher_->RemoveWaiter(&w); | 479 read_dispatcher_->RemoveWaiter(&w); |
| 480 } | 480 } |
| 481 | 481 |
| 482 // Now, try to do the read. | 482 // Now, try to do the read. |
| 483 // Clear the buffer so that we can check the result. | 483 // Clear the buffer so that we can check the result. |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 589 EXPECT_EQ(total_messages_written, total_messages_read); | 589 EXPECT_EQ(total_messages_written, total_messages_read); |
| 590 EXPECT_EQ(total_bytes_written, total_bytes_read); | 590 EXPECT_EQ(total_bytes_written, total_bytes_read); |
| 591 | 591 |
| 592 EXPECT_EQ(MOJO_RESULT_OK, d_write->Close()); | 592 EXPECT_EQ(MOJO_RESULT_OK, d_write->Close()); |
| 593 EXPECT_EQ(MOJO_RESULT_OK, d_read->Close()); | 593 EXPECT_EQ(MOJO_RESULT_OK, d_read->Close()); |
| 594 } | 594 } |
| 595 | 595 |
| 596 } // namespace | 596 } // namespace |
| 597 } // namespace system | 597 } // namespace system |
| 598 } // namespace mojo | 598 } // namespace mojo |
| OLD | NEW |