| 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/edk/system/simple_dispatcher.h" | 10 #include "mojo/edk/system/simple_dispatcher.h" |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 hss.satisfiable_signals); | 53 hss.satisfiable_signals); |
| 54 // Shouldn't need to remove the waiter (it was not added). | 54 // Shouldn't need to remove the waiter (it was not added). |
| 55 | 55 |
| 56 // Wait (forever) for writable when already writable. | 56 // Wait (forever) for writable when already writable. |
| 57 w.Init(); | 57 w.Init(); |
| 58 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE); | 58 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE); |
| 59 ASSERT_EQ(MOJO_RESULT_OK, | 59 ASSERT_EQ(MOJO_RESULT_OK, |
| 60 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 1, nullptr)); | 60 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 1, nullptr)); |
| 61 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_WRITABLE); | 61 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_WRITABLE); |
| 62 stopwatch.Start(); | 62 stopwatch.Start(); |
| 63 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 63 EXPECT_EQ(MOJO_RESULT_OK, |
| 64 w.Wait(MOJO_DEADLINE_INDEFINITE, &context, nullptr)); |
| 64 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); | 65 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); |
| 65 EXPECT_EQ(1u, context); | 66 EXPECT_EQ(1u, context); |
| 66 hss = HandleSignalsState(); | 67 hss = HandleSignalsState(); |
| 67 d->RemoveAwakable(&w, &hss); | 68 d->RemoveAwakable(&w, &hss); |
| 68 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); | 69 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); |
| 69 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 70 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 70 hss.satisfiable_signals); | 71 hss.satisfiable_signals); |
| 71 | 72 |
| 72 // Wait for zero time for writable when already writable. | 73 // Wait for zero time for writable when already writable. |
| 73 w.Init(); | 74 w.Init(); |
| 74 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE); | 75 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE); |
| 75 ASSERT_EQ(MOJO_RESULT_OK, | 76 ASSERT_EQ(MOJO_RESULT_OK, |
| 76 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 2, nullptr)); | 77 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 2, nullptr)); |
| 77 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_WRITABLE); | 78 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_WRITABLE); |
| 78 stopwatch.Start(); | 79 stopwatch.Start(); |
| 79 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(0, &context)); | 80 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(0, &context, nullptr)); |
| 80 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); | 81 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); |
| 81 EXPECT_EQ(2u, context); | 82 EXPECT_EQ(2u, context); |
| 82 hss = HandleSignalsState(); | 83 hss = HandleSignalsState(); |
| 83 d->RemoveAwakable(&w, &hss); | 84 d->RemoveAwakable(&w, &hss); |
| 84 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); | 85 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); |
| 85 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 86 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 86 hss.satisfiable_signals); | 87 hss.satisfiable_signals); |
| 87 | 88 |
| 88 // Wait for non-zero, finite time for writable when already writable. | 89 // Wait for non-zero, finite time for writable when already writable. |
| 89 w.Init(); | 90 w.Init(); |
| 90 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE); | 91 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE); |
| 91 ASSERT_EQ(MOJO_RESULT_OK, | 92 ASSERT_EQ(MOJO_RESULT_OK, |
| 92 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 3, nullptr)); | 93 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 3, nullptr)); |
| 93 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_WRITABLE); | 94 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_WRITABLE); |
| 94 stopwatch.Start(); | 95 stopwatch.Start(); |
| 95 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(2 * test::EpsilonTimeout(), &context)); | 96 EXPECT_EQ(MOJO_RESULT_OK, |
| 97 w.Wait(2 * test::EpsilonTimeout(), &context, nullptr)); |
| 96 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); | 98 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); |
| 97 EXPECT_EQ(3u, context); | 99 EXPECT_EQ(3u, context); |
| 98 hss = HandleSignalsState(); | 100 hss = HandleSignalsState(); |
| 99 d->RemoveAwakable(&w, &hss); | 101 d->RemoveAwakable(&w, &hss); |
| 100 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); | 102 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); |
| 101 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 103 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 102 hss.satisfiable_signals); | 104 hss.satisfiable_signals); |
| 103 | 105 |
| 104 // Wait for zero time for writable when not writable (will time out). | 106 // Wait for zero time for writable when not writable (will time out). |
| 105 w.Init(); | 107 w.Init(); |
| 106 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE); | 108 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE); |
| 107 ASSERT_EQ(MOJO_RESULT_OK, | 109 ASSERT_EQ(MOJO_RESULT_OK, |
| 108 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 4, nullptr)); | 110 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 4, nullptr)); |
| 109 stopwatch.Start(); | 111 stopwatch.Start(); |
| 110 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, w.Wait(0, nullptr)); | 112 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, w.Wait(0, nullptr, nullptr)); |
| 111 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); | 113 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); |
| 112 hss = HandleSignalsState(); | 114 hss = HandleSignalsState(); |
| 113 d->RemoveAwakable(&w, &hss); | 115 d->RemoveAwakable(&w, &hss); |
| 114 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 116 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); |
| 115 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 117 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 116 hss.satisfiable_signals); | 118 hss.satisfiable_signals); |
| 117 | 119 |
| 118 // Wait for non-zero, finite time for writable when not writable (will time | 120 // Wait for non-zero, finite time for writable when not writable (will time |
| 119 // out). | 121 // out). |
| 120 w.Init(); | 122 w.Init(); |
| 121 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE); | 123 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE); |
| 122 ASSERT_EQ(MOJO_RESULT_OK, | 124 ASSERT_EQ(MOJO_RESULT_OK, |
| 123 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 5, nullptr)); | 125 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 5, nullptr)); |
| 124 stopwatch.Start(); | 126 stopwatch.Start(); |
| 125 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, | 127 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
| 126 w.Wait(2 * test::EpsilonTimeout(), nullptr)); | 128 w.Wait(2 * test::EpsilonTimeout(), nullptr, nullptr)); |
| 127 MojoDeadline elapsed = stopwatch.Elapsed(); | 129 MojoDeadline elapsed = stopwatch.Elapsed(); |
| 128 EXPECT_GT(elapsed, (2 - 1) * test::EpsilonTimeout()); | 130 EXPECT_GT(elapsed, (2 - 1) * test::EpsilonTimeout()); |
| 129 EXPECT_LT(elapsed, (2 + 1) * test::EpsilonTimeout()); | 131 EXPECT_LT(elapsed, (2 + 1) * test::EpsilonTimeout()); |
| 130 hss = HandleSignalsState(); | 132 hss = HandleSignalsState(); |
| 131 d->RemoveAwakable(&w, &hss); | 133 d->RemoveAwakable(&w, &hss); |
| 132 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 134 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); |
| 133 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 135 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 134 hss.satisfiable_signals); | 136 hss.satisfiable_signals); |
| 135 | 137 |
| 136 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); | 138 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 157 | 159 |
| 158 // Wait (forever) for writable and then it becomes never writable. | 160 // Wait (forever) for writable and then it becomes never writable. |
| 159 w.Init(); | 161 w.Init(); |
| 160 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE | | 162 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE | |
| 161 MOJO_HANDLE_SIGNAL_WRITABLE); | 163 MOJO_HANDLE_SIGNAL_WRITABLE); |
| 162 ASSERT_EQ(MOJO_RESULT_OK, | 164 ASSERT_EQ(MOJO_RESULT_OK, |
| 163 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 2, nullptr)); | 165 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 2, nullptr)); |
| 164 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE); | 166 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE); |
| 165 stopwatch.Start(); | 167 stopwatch.Start(); |
| 166 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 168 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 167 w.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 169 w.Wait(MOJO_DEADLINE_INDEFINITE, &context, nullptr)); |
| 168 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); | 170 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); |
| 169 EXPECT_EQ(2u, context); | 171 EXPECT_EQ(2u, context); |
| 170 hss = HandleSignalsState(); | 172 hss = HandleSignalsState(); |
| 171 d->RemoveAwakable(&w, &hss); | 173 d->RemoveAwakable(&w, &hss); |
| 172 EXPECT_EQ(0u, hss.satisfied_signals); | 174 EXPECT_EQ(0u, hss.satisfied_signals); |
| 173 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 175 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); |
| 174 | 176 |
| 175 // Wait for zero time for writable and then it becomes never writable. | 177 // Wait for zero time for writable and then it becomes never writable. |
| 176 w.Init(); | 178 w.Init(); |
| 177 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE | | 179 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE | |
| 178 MOJO_HANDLE_SIGNAL_WRITABLE); | 180 MOJO_HANDLE_SIGNAL_WRITABLE); |
| 179 ASSERT_EQ(MOJO_RESULT_OK, | 181 ASSERT_EQ(MOJO_RESULT_OK, |
| 180 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 3, nullptr)); | 182 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 3, nullptr)); |
| 181 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE); | 183 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE); |
| 182 stopwatch.Start(); | 184 stopwatch.Start(); |
| 183 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, w.Wait(0, &context)); | 185 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, w.Wait(0, &context, nullptr)); |
| 184 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); | 186 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); |
| 185 EXPECT_EQ(3u, context); | 187 EXPECT_EQ(3u, context); |
| 186 hss = HandleSignalsState(); | 188 hss = HandleSignalsState(); |
| 187 d->RemoveAwakable(&w, &hss); | 189 d->RemoveAwakable(&w, &hss); |
| 188 EXPECT_EQ(0u, hss.satisfied_signals); | 190 EXPECT_EQ(0u, hss.satisfied_signals); |
| 189 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 191 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); |
| 190 | 192 |
| 191 // Wait for non-zero, finite time for writable and then it becomes never | 193 // Wait for non-zero, finite time for writable and then it becomes never |
| 192 // writable. | 194 // writable. |
| 193 w.Init(); | 195 w.Init(); |
| 194 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE | | 196 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE | |
| 195 MOJO_HANDLE_SIGNAL_WRITABLE); | 197 MOJO_HANDLE_SIGNAL_WRITABLE); |
| 196 ASSERT_EQ(MOJO_RESULT_OK, | 198 ASSERT_EQ(MOJO_RESULT_OK, |
| 197 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 4, nullptr)); | 199 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 4, nullptr)); |
| 198 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE); | 200 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE); |
| 199 stopwatch.Start(); | 201 stopwatch.Start(); |
| 200 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 202 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 201 w.Wait(2 * test::EpsilonTimeout(), &context)); | 203 w.Wait(2 * test::EpsilonTimeout(), &context, nullptr)); |
| 202 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); | 204 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); |
| 203 EXPECT_EQ(4u, context); | 205 EXPECT_EQ(4u, context); |
| 204 hss = HandleSignalsState(); | 206 hss = HandleSignalsState(); |
| 205 d->RemoveAwakable(&w, &hss); | 207 d->RemoveAwakable(&w, &hss); |
| 206 EXPECT_EQ(0u, hss.satisfied_signals); | 208 EXPECT_EQ(0u, hss.satisfied_signals); |
| 207 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 209 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); |
| 208 | 210 |
| 209 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); | 211 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); |
| 210 } | 212 } |
| 211 | 213 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 228 EXPECT_EQ(0u, hss.satisfiable_signals); | 230 EXPECT_EQ(0u, hss.satisfiable_signals); |
| 229 // Shouldn't need to remove the waiter (it was not added). | 231 // Shouldn't need to remove the waiter (it was not added). |
| 230 | 232 |
| 231 // Wait (forever) for writable and then the dispatcher is closed. | 233 // Wait (forever) for writable and then the dispatcher is closed. |
| 232 d = MakeRefCounted<test::MockSimpleDispatcher>(); | 234 d = MakeRefCounted<test::MockSimpleDispatcher>(); |
| 233 w.Init(); | 235 w.Init(); |
| 234 ASSERT_EQ(MOJO_RESULT_OK, | 236 ASSERT_EQ(MOJO_RESULT_OK, |
| 235 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 2, nullptr)); | 237 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 2, nullptr)); |
| 236 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); | 238 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); |
| 237 stopwatch.Start(); | 239 stopwatch.Start(); |
| 238 EXPECT_EQ(MOJO_RESULT_CANCELLED, w.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 240 EXPECT_EQ(MOJO_RESULT_CANCELLED, |
| 241 w.Wait(MOJO_DEADLINE_INDEFINITE, &context, nullptr)); |
| 239 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); | 242 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); |
| 240 EXPECT_EQ(2u, context); | 243 EXPECT_EQ(2u, context); |
| 241 // Don't need to remove waiters from closed dispatchers. | 244 // Don't need to remove waiters from closed dispatchers. |
| 242 | 245 |
| 243 // Wait for zero time for writable and then the dispatcher is closed. | 246 // Wait for zero time for writable and then the dispatcher is closed. |
| 244 d = MakeRefCounted<test::MockSimpleDispatcher>(); | 247 d = MakeRefCounted<test::MockSimpleDispatcher>(); |
| 245 w.Init(); | 248 w.Init(); |
| 246 ASSERT_EQ(MOJO_RESULT_OK, | 249 ASSERT_EQ(MOJO_RESULT_OK, |
| 247 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 3, nullptr)); | 250 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 3, nullptr)); |
| 248 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); | 251 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); |
| 249 stopwatch.Start(); | 252 stopwatch.Start(); |
| 250 EXPECT_EQ(MOJO_RESULT_CANCELLED, w.Wait(0, &context)); | 253 EXPECT_EQ(MOJO_RESULT_CANCELLED, w.Wait(0, &context, nullptr)); |
| 251 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); | 254 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); |
| 252 EXPECT_EQ(3u, context); | 255 EXPECT_EQ(3u, context); |
| 253 // Don't need to remove waiters from closed dispatchers. | 256 // Don't need to remove waiters from closed dispatchers. |
| 254 | 257 |
| 255 // Wait for non-zero, finite time for writable and then the dispatcher is | 258 // Wait for non-zero, finite time for writable and then the dispatcher is |
| 256 // closed. | 259 // closed. |
| 257 d = MakeRefCounted<test::MockSimpleDispatcher>(); | 260 d = MakeRefCounted<test::MockSimpleDispatcher>(); |
| 258 w.Init(); | 261 w.Init(); |
| 259 ASSERT_EQ(MOJO_RESULT_OK, | 262 ASSERT_EQ(MOJO_RESULT_OK, |
| 260 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 4, nullptr)); | 263 d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 4, nullptr)); |
| 261 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); | 264 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); |
| 262 stopwatch.Start(); | 265 stopwatch.Start(); |
| 263 EXPECT_EQ(MOJO_RESULT_CANCELLED, | 266 EXPECT_EQ(MOJO_RESULT_CANCELLED, |
| 264 w.Wait(2 * test::EpsilonTimeout(), &context)); | 267 w.Wait(2 * test::EpsilonTimeout(), &context, nullptr)); |
| 265 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); | 268 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); |
| 266 EXPECT_EQ(4u, context); | 269 EXPECT_EQ(4u, context); |
| 267 // Don't need to remove waiters from closed dispatchers. | 270 // Don't need to remove waiters from closed dispatchers. |
| 268 } | 271 } |
| 269 | 272 |
| 270 TEST(SimpleDispatcherTest, BasicThreaded) { | 273 TEST(SimpleDispatcherTest, BasicThreaded) { |
| 271 Stopwatch stopwatch; | 274 Stopwatch stopwatch; |
| 272 bool did_wait; | 275 bool did_wait; |
| 273 MojoResult result; | 276 MojoResult result; |
| 274 uint64_t context; | 277 uint64_t context; |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 528 // Since we closed before joining, we can't say much about what each thread | 531 // Since we closed before joining, we can't say much about what each thread |
| 529 // saw as the state. | 532 // saw as the state. |
| 530 } | 533 } |
| 531 } | 534 } |
| 532 | 535 |
| 533 // TODO(vtl): Stress test? | 536 // TODO(vtl): Stress test? |
| 534 | 537 |
| 535 } // namespace | 538 } // namespace |
| 536 } // namespace system | 539 } // namespace system |
| 537 } // namespace mojo | 540 } // namespace mojo |
| OLD | NEW |