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

Side by Side Diff: mojo/system/simple_dispatcher_unittest.cc

Issue 336313007: Mojo: Rename MOJO_WAIT_FLAG_... -> MOJO_HANDLE_SIGNAL_.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « mojo/system/remote_message_pipe_unittest.cc ('k') | mojo/system/wait_flags_state.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/simple_dispatcher.h" 10 #include "mojo/system/simple_dispatcher.h"
(...skipping 10 matching lines...) Expand all
21 #include "mojo/system/waiter_test_utils.h" 21 #include "mojo/system/waiter_test_utils.h"
22 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
23 23
24 namespace mojo { 24 namespace mojo {
25 namespace system { 25 namespace system {
26 namespace { 26 namespace {
27 27
28 class MockSimpleDispatcher : public SimpleDispatcher { 28 class MockSimpleDispatcher : public SimpleDispatcher {
29 public: 29 public:
30 MockSimpleDispatcher() 30 MockSimpleDispatcher()
31 : state_(MOJO_WAIT_FLAG_NONE, 31 : state_(MOJO_HANDLE_SIGNAL_NONE,
32 MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE) {} 32 MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE) {}
33 33
34 void SetSatisfiedSignals(MojoHandleSignals new_satisfied_signals) { 34 void SetSatisfiedSignals(MojoHandleSignals new_satisfied_signals) {
35 base::AutoLock locker(lock()); 35 base::AutoLock locker(lock());
36 36
37 // Any new signals that are set should be satisfiable. 37 // Any new signals that are set should be satisfiable.
38 CHECK_EQ(new_satisfied_signals & ~state_.satisfied_signals, 38 CHECK_EQ(new_satisfied_signals & ~state_.satisfied_signals,
39 new_satisfied_signals & ~state_.satisfied_signals & 39 new_satisfied_signals & ~state_.satisfied_signals &
40 state_.satisfiable_signals); 40 state_.satisfiable_signals);
41 41
42 if (new_satisfied_signals == state_.satisfied_signals) 42 if (new_satisfied_signals == state_.satisfied_signals)
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 89
90 TEST(SimpleDispatcherTest, Basic) { 90 TEST(SimpleDispatcherTest, Basic) {
91 test::Stopwatch stopwatch; 91 test::Stopwatch stopwatch;
92 92
93 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); 93 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
94 Waiter w; 94 Waiter w;
95 uint32_t context = 0; 95 uint32_t context = 0;
96 96
97 // Try adding a readable waiter when already readable. 97 // Try adding a readable waiter when already readable.
98 w.Init(); 98 w.Init();
99 d->SetSatisfiedSignals(MOJO_WAIT_FLAG_READABLE); 99 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE);
100 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 100 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
101 d->AddWaiter(&w, MOJO_WAIT_FLAG_READABLE, 0)); 101 d->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 0));
102 // Shouldn't need to remove the waiter (it was not added). 102 // Shouldn't need to remove the waiter (it was not added).
103 103
104 // Wait (forever) for writable when already writable. 104 // Wait (forever) for writable when already writable.
105 w.Init(); 105 w.Init();
106 d->SetSatisfiedSignals(MOJO_WAIT_FLAG_READABLE); 106 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE);
107 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 1)); 107 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 1));
108 d->SetSatisfiedSignals(MOJO_WAIT_FLAG_WRITABLE); 108 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_WRITABLE);
109 stopwatch.Start(); 109 stopwatch.Start();
110 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 110 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, &context));
111 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 111 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
112 EXPECT_EQ(1u, context); 112 EXPECT_EQ(1u, context);
113 d->RemoveWaiter(&w); 113 d->RemoveWaiter(&w);
114 114
115 // Wait for zero time for writable when already writable. 115 // Wait for zero time for writable when already writable.
116 w.Init(); 116 w.Init();
117 d->SetSatisfiedSignals(MOJO_WAIT_FLAG_READABLE); 117 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE);
118 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 2)); 118 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 2));
119 d->SetSatisfiedSignals(MOJO_WAIT_FLAG_WRITABLE); 119 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_WRITABLE);
120 stopwatch.Start(); 120 stopwatch.Start();
121 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(0, &context)); 121 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(0, &context));
122 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 122 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
123 EXPECT_EQ(2u, context); 123 EXPECT_EQ(2u, context);
124 d->RemoveWaiter(&w); 124 d->RemoveWaiter(&w);
125 125
126 // Wait for non-zero, finite time for writable when already writable. 126 // Wait for non-zero, finite time for writable when already writable.
127 w.Init(); 127 w.Init();
128 d->SetSatisfiedSignals(MOJO_WAIT_FLAG_READABLE); 128 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE);
129 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 3)); 129 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 3));
130 d->SetSatisfiedSignals(MOJO_WAIT_FLAG_WRITABLE); 130 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_WRITABLE);
131 stopwatch.Start(); 131 stopwatch.Start();
132 EXPECT_EQ(MOJO_RESULT_OK, 132 EXPECT_EQ(MOJO_RESULT_OK,
133 w.Wait(2 * test::EpsilonTimeout().InMicroseconds(), &context)); 133 w.Wait(2 * test::EpsilonTimeout().InMicroseconds(), &context));
134 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 134 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
135 EXPECT_EQ(3u, context); 135 EXPECT_EQ(3u, context);
136 d->RemoveWaiter(&w); 136 d->RemoveWaiter(&w);
137 137
138 // Wait for zero time for writable when not writable (will time out). 138 // Wait for zero time for writable when not writable (will time out).
139 w.Init(); 139 w.Init();
140 d->SetSatisfiedSignals(MOJO_WAIT_FLAG_READABLE); 140 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE);
141 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 4)); 141 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 4));
142 stopwatch.Start(); 142 stopwatch.Start();
143 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, w.Wait(0, NULL)); 143 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, w.Wait(0, NULL));
144 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 144 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
145 d->RemoveWaiter(&w); 145 d->RemoveWaiter(&w);
146 146
147 // Wait for non-zero, finite time for writable when not writable (will time 147 // Wait for non-zero, finite time for writable when not writable (will time
148 // out). 148 // out).
149 w.Init(); 149 w.Init();
150 d->SetSatisfiedSignals(MOJO_WAIT_FLAG_READABLE); 150 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE);
151 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 5)); 151 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 5));
152 stopwatch.Start(); 152 stopwatch.Start();
153 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, 153 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
154 w.Wait(2 * test::EpsilonTimeout().InMicroseconds(), NULL)); 154 w.Wait(2 * test::EpsilonTimeout().InMicroseconds(), NULL));
155 base::TimeDelta elapsed = stopwatch.Elapsed(); 155 base::TimeDelta elapsed = stopwatch.Elapsed();
156 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); 156 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout());
157 EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout()); 157 EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout());
158 d->RemoveWaiter(&w); 158 d->RemoveWaiter(&w);
159 159
160 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 160 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
161 } 161 }
162 162
163 TEST(SimpleDispatcherTest, BasicUnsatisfiable) { 163 TEST(SimpleDispatcherTest, BasicUnsatisfiable) {
164 test::Stopwatch stopwatch; 164 test::Stopwatch stopwatch;
165 165
166 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); 166 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
167 Waiter w; 167 Waiter w;
168 uint32_t context = 0; 168 uint32_t context = 0;
169 169
170 // Try adding a writable waiter when it can never be writable. 170 // Try adding a writable waiter when it can never be writable.
171 w.Init(); 171 w.Init();
172 d->SetSatisfiableSignals(MOJO_WAIT_FLAG_READABLE); 172 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE);
173 d->SetSatisfiedSignals(0); 173 d->SetSatisfiedSignals(0);
174 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 174 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
175 d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 1)); 175 d->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 1));
176 // Shouldn't need to remove the waiter (it was not added). 176 // Shouldn't need to remove the waiter (it was not added).
177 177
178 // Wait (forever) for writable and then it becomes never writable. 178 // Wait (forever) for writable and then it becomes never writable.
179 w.Init(); 179 w.Init();
180 d->SetSatisfiableSignals(MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE); 180 d->SetSatisfiableSignals(
181 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 2)); 181 MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE);
182 d->SetSatisfiableSignals(MOJO_WAIT_FLAG_READABLE); 182 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 2));
183 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE);
183 stopwatch.Start(); 184 stopwatch.Start();
184 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 185 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
185 w.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 186 w.Wait(MOJO_DEADLINE_INDEFINITE, &context));
186 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 187 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
187 EXPECT_EQ(2u, context); 188 EXPECT_EQ(2u, context);
188 d->RemoveWaiter(&w); 189 d->RemoveWaiter(&w);
189 190
190 // Wait for zero time for writable and then it becomes never writable. 191 // Wait for zero time for writable and then it becomes never writable.
191 w.Init(); 192 w.Init();
192 d->SetSatisfiableSignals(MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE); 193 d->SetSatisfiableSignals(
193 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 3)); 194 MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE);
194 d->SetSatisfiableSignals(MOJO_WAIT_FLAG_READABLE); 195 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 3));
196 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE);
195 stopwatch.Start(); 197 stopwatch.Start();
196 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, w.Wait(0, &context)); 198 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, w.Wait(0, &context));
197 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 199 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
198 EXPECT_EQ(3u, context); 200 EXPECT_EQ(3u, context);
199 d->RemoveWaiter(&w); 201 d->RemoveWaiter(&w);
200 202
201 // Wait for non-zero, finite time for writable and then it becomes never 203 // Wait for non-zero, finite time for writable and then it becomes never
202 // writable. 204 // writable.
203 w.Init(); 205 w.Init();
204 d->SetSatisfiableSignals(MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE); 206 d->SetSatisfiableSignals(
205 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 4)); 207 MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE);
206 d->SetSatisfiableSignals(MOJO_WAIT_FLAG_READABLE); 208 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 4));
209 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE);
207 stopwatch.Start(); 210 stopwatch.Start();
208 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 211 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
209 w.Wait(2 * test::EpsilonTimeout().InMicroseconds(), &context)); 212 w.Wait(2 * test::EpsilonTimeout().InMicroseconds(), &context));
210 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 213 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
211 EXPECT_EQ(4u, context); 214 EXPECT_EQ(4u, context);
212 d->RemoveWaiter(&w); 215 d->RemoveWaiter(&w);
213 216
214 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 217 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
215 } 218 }
216 219
217 TEST(SimpleDispatcherTest, BasicClosed) { 220 TEST(SimpleDispatcherTest, BasicClosed) {
218 test::Stopwatch stopwatch; 221 test::Stopwatch stopwatch;
219 222
220 scoped_refptr<MockSimpleDispatcher> d; 223 scoped_refptr<MockSimpleDispatcher> d;
221 Waiter w; 224 Waiter w;
222 uint32_t context = 0; 225 uint32_t context = 0;
223 226
224 // Try adding a writable waiter when the dispatcher has been closed. 227 // Try adding a writable waiter when the dispatcher has been closed.
225 d = new MockSimpleDispatcher(); 228 d = new MockSimpleDispatcher();
226 w.Init(); 229 w.Init();
227 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 230 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
228 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 231 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
229 d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 1)); 232 d->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 1));
230 // Shouldn't need to remove the waiter (it was not added). 233 // Shouldn't need to remove the waiter (it was not added).
231 234
232 // Wait (forever) for writable and then the dispatcher is closed. 235 // Wait (forever) for writable and then the dispatcher is closed.
233 d = new MockSimpleDispatcher(); 236 d = new MockSimpleDispatcher();
234 w.Init(); 237 w.Init();
235 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 2)); 238 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 2));
236 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 239 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
237 stopwatch.Start(); 240 stopwatch.Start();
238 EXPECT_EQ(MOJO_RESULT_CANCELLED, w.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 241 EXPECT_EQ(MOJO_RESULT_CANCELLED, w.Wait(MOJO_DEADLINE_INDEFINITE, &context));
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 = new MockSimpleDispatcher(); 247 d = new MockSimpleDispatcher();
245 w.Init(); 248 w.Init();
246 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 3)); 249 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 3));
247 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 250 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
248 stopwatch.Start(); 251 stopwatch.Start();
249 EXPECT_EQ(MOJO_RESULT_CANCELLED, w.Wait(0, &context)); 252 EXPECT_EQ(MOJO_RESULT_CANCELLED, w.Wait(0, &context));
250 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 253 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
251 EXPECT_EQ(3u, context); 254 EXPECT_EQ(3u, context);
252 // Don't need to remove waiters from closed dispatchers. 255 // Don't need to remove waiters from closed dispatchers.
253 256
254 // Wait for non-zero, finite time for writable and then the dispatcher is 257 // Wait for non-zero, finite time for writable and then the dispatcher is
255 // closed. 258 // closed.
256 d = new MockSimpleDispatcher(); 259 d = new MockSimpleDispatcher();
257 w.Init(); 260 w.Init();
258 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_WAIT_FLAG_WRITABLE, 4)); 261 EXPECT_EQ(MOJO_RESULT_OK, d->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 4));
259 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 262 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
260 stopwatch.Start(); 263 stopwatch.Start();
261 EXPECT_EQ(MOJO_RESULT_CANCELLED, 264 EXPECT_EQ(MOJO_RESULT_CANCELLED,
262 w.Wait(2 * test::EpsilonTimeout().InMicroseconds(), &context)); 265 w.Wait(2 * test::EpsilonTimeout().InMicroseconds(), &context));
263 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 266 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
264 EXPECT_EQ(4u, context); 267 EXPECT_EQ(4u, context);
265 // Don't need to remove waiters from closed dispatchers. 268 // Don't need to remove waiters from closed dispatchers.
266 } 269 }
267 270
268 TEST(SimpleDispatcherTest, BasicThreaded) { 271 TEST(SimpleDispatcherTest, BasicThreaded) {
269 test::Stopwatch stopwatch; 272 test::Stopwatch stopwatch;
270 bool did_wait; 273 bool did_wait;
271 MojoResult result; 274 MojoResult result;
272 uint32_t context; 275 uint32_t context;
273 276
274 // Wait for readable (already readable). 277 // Wait for readable (already readable).
275 { 278 {
276 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); 279 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
277 { 280 {
278 d->SetSatisfiedSignals(MOJO_WAIT_FLAG_READABLE); 281 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE);
279 test::WaiterThread thread(d, 282 test::WaiterThread thread(d,
280 MOJO_WAIT_FLAG_READABLE, 283 MOJO_HANDLE_SIGNAL_READABLE,
281 MOJO_DEADLINE_INDEFINITE, 284 MOJO_DEADLINE_INDEFINITE,
282 1, 285 1,
283 &did_wait, &result, &context); 286 &did_wait, &result, &context);
284 stopwatch.Start(); 287 stopwatch.Start();
285 thread.Start(); 288 thread.Start();
286 } // Joins the thread. 289 } // Joins the thread.
287 // If we closed earlier, then probably we'd get a |MOJO_RESULT_CANCELLED|. 290 // If we closed earlier, then probably we'd get a |MOJO_RESULT_CANCELLED|.
288 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 291 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
289 } 292 }
290 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 293 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
291 EXPECT_FALSE(did_wait); 294 EXPECT_FALSE(did_wait);
292 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); 295 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, result);
293 296
294 // Wait for readable and becomes readable after some time. 297 // Wait for readable and becomes readable after some time.
295 { 298 {
296 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); 299 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
297 test::WaiterThread thread(d, 300 test::WaiterThread thread(d,
298 MOJO_WAIT_FLAG_READABLE, 301 MOJO_HANDLE_SIGNAL_READABLE,
299 MOJO_DEADLINE_INDEFINITE, 302 MOJO_DEADLINE_INDEFINITE,
300 2, 303 2,
301 &did_wait, &result, &context); 304 &did_wait, &result, &context);
302 stopwatch.Start(); 305 stopwatch.Start();
303 thread.Start(); 306 thread.Start();
304 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); 307 base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
305 d->SetSatisfiedSignals(MOJO_WAIT_FLAG_READABLE); 308 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE);
306 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 309 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
307 } // Joins the thread. 310 } // Joins the thread.
308 base::TimeDelta elapsed = stopwatch.Elapsed(); 311 base::TimeDelta elapsed = stopwatch.Elapsed();
309 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); 312 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout());
310 EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout()); 313 EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout());
311 EXPECT_TRUE(did_wait); 314 EXPECT_TRUE(did_wait);
312 EXPECT_EQ(MOJO_RESULT_OK, result); 315 EXPECT_EQ(MOJO_RESULT_OK, result);
313 EXPECT_EQ(2u, context); 316 EXPECT_EQ(2u, context);
314 317
315 // Wait for readable and becomes never-readable after some time. 318 // Wait for readable and becomes never-readable after some time.
316 { 319 {
317 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); 320 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
318 test::WaiterThread thread(d, 321 test::WaiterThread thread(d,
319 MOJO_WAIT_FLAG_READABLE, 322 MOJO_HANDLE_SIGNAL_READABLE,
320 MOJO_DEADLINE_INDEFINITE, 323 MOJO_DEADLINE_INDEFINITE,
321 3, 324 3,
322 &did_wait, &result, &context); 325 &did_wait, &result, &context);
323 stopwatch.Start(); 326 stopwatch.Start();
324 thread.Start(); 327 thread.Start();
325 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); 328 base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
326 d->SetSatisfiableSignals(MOJO_WAIT_FLAG_NONE); 329 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_NONE);
327 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 330 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
328 } // Joins the thread. 331 } // Joins the thread.
329 elapsed = stopwatch.Elapsed(); 332 elapsed = stopwatch.Elapsed();
330 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); 333 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout());
331 EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout()); 334 EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout());
332 EXPECT_TRUE(did_wait); 335 EXPECT_TRUE(did_wait);
333 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result); 336 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result);
334 EXPECT_EQ(3u, context); 337 EXPECT_EQ(3u, context);
335 338
336 // Wait for readable and dispatcher gets closed. 339 // Wait for readable and dispatcher gets closed.
337 { 340 {
338 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); 341 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
339 test::WaiterThread thread(d, 342 test::WaiterThread thread(d,
340 MOJO_WAIT_FLAG_READABLE, 343 MOJO_HANDLE_SIGNAL_READABLE,
341 MOJO_DEADLINE_INDEFINITE, 344 MOJO_DEADLINE_INDEFINITE,
342 4, 345 4,
343 &did_wait, &result, &context); 346 &did_wait, &result, &context);
344 stopwatch.Start(); 347 stopwatch.Start();
345 thread.Start(); 348 thread.Start();
346 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); 349 base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
347 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 350 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
348 } // Joins the thread. 351 } // Joins the thread.
349 elapsed = stopwatch.Elapsed(); 352 elapsed = stopwatch.Elapsed();
350 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); 353 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout());
351 EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout()); 354 EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout());
352 EXPECT_TRUE(did_wait); 355 EXPECT_TRUE(did_wait);
353 EXPECT_EQ(MOJO_RESULT_CANCELLED, result); 356 EXPECT_EQ(MOJO_RESULT_CANCELLED, result);
354 EXPECT_EQ(4u, context); 357 EXPECT_EQ(4u, context);
355 358
356 // Wait for readable and times out. 359 // Wait for readable and times out.
357 { 360 {
358 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); 361 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
359 { 362 {
360 test::WaiterThread thread(d, 363 test::WaiterThread thread(d,
361 MOJO_WAIT_FLAG_READABLE, 364 MOJO_HANDLE_SIGNAL_READABLE,
362 2 * test::EpsilonTimeout().InMicroseconds(), 365 2 * test::EpsilonTimeout().InMicroseconds(),
363 5, 366 5,
364 &did_wait, &result, &context); 367 &did_wait, &result, &context);
365 stopwatch.Start(); 368 stopwatch.Start();
366 thread.Start(); 369 thread.Start();
367 base::PlatformThread::Sleep(1 * test::EpsilonTimeout()); 370 base::PlatformThread::Sleep(1 * test::EpsilonTimeout());
368 // Not what we're waiting for. 371 // Not what we're waiting for.
369 d->SetSatisfiedSignals(MOJO_WAIT_FLAG_WRITABLE); 372 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_WRITABLE);
370 } // Joins the thread (after its wait times out). 373 } // Joins the thread (after its wait times out).
371 // If we closed earlier, then probably we'd get a |MOJO_RESULT_CANCELLED|. 374 // If we closed earlier, then probably we'd get a |MOJO_RESULT_CANCELLED|.
372 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 375 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
373 } 376 }
374 elapsed = stopwatch.Elapsed(); 377 elapsed = stopwatch.Elapsed();
375 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); 378 EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout());
376 EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout()); 379 EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout());
377 EXPECT_TRUE(did_wait); 380 EXPECT_TRUE(did_wait);
378 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, result); 381 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, result);
379 } 382 }
380 383
381 TEST(SimpleDispatcherTest, MultipleWaiters) { 384 TEST(SimpleDispatcherTest, MultipleWaiters) {
382 static const uint32_t kNumWaiters = 20; 385 static const uint32_t kNumWaiters = 20;
383 386
384 bool did_wait[kNumWaiters]; 387 bool did_wait[kNumWaiters];
385 MojoResult result[kNumWaiters]; 388 MojoResult result[kNumWaiters];
386 uint32_t context[kNumWaiters]; 389 uint32_t context[kNumWaiters];
387 390
388 // All wait for readable and becomes readable after some time. 391 // All wait for readable and becomes readable after some time.
389 { 392 {
390 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); 393 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
391 ScopedVector<test::WaiterThread> threads; 394 ScopedVector<test::WaiterThread> threads;
392 for (uint32_t i = 0; i < kNumWaiters; i++) { 395 for (uint32_t i = 0; i < kNumWaiters; i++) {
393 threads.push_back(new test::WaiterThread(d, 396 threads.push_back(new test::WaiterThread(d,
394 MOJO_WAIT_FLAG_READABLE, 397 MOJO_HANDLE_SIGNAL_READABLE,
395 MOJO_DEADLINE_INDEFINITE, 398 MOJO_DEADLINE_INDEFINITE,
396 i, 399 i,
397 &did_wait[i], 400 &did_wait[i],
398 &result[i], 401 &result[i],
399 &context[i])); 402 &context[i]));
400 threads.back()->Start(); 403 threads.back()->Start();
401 } 404 }
402 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); 405 base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
403 d->SetSatisfiedSignals(MOJO_WAIT_FLAG_READABLE); 406 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE);
404 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 407 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
405 } // Joins the threads. 408 } // Joins the threads.
406 for (uint32_t i = 0; i < kNumWaiters; i++) { 409 for (uint32_t i = 0; i < kNumWaiters; i++) {
407 EXPECT_TRUE(did_wait[i]); 410 EXPECT_TRUE(did_wait[i]);
408 EXPECT_EQ(MOJO_RESULT_OK, result[i]); 411 EXPECT_EQ(MOJO_RESULT_OK, result[i]);
409 EXPECT_EQ(i, context[i]); 412 EXPECT_EQ(i, context[i]);
410 } 413 }
411 414
412 // Some wait for readable, some for writable, and becomes readable after some 415 // Some wait for readable, some for writable, and becomes readable after some
413 // time. 416 // time.
414 { 417 {
415 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); 418 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
416 ScopedVector<test::WaiterThread> threads; 419 ScopedVector<test::WaiterThread> threads;
417 for (uint32_t i = 0; i < kNumWaiters / 2; i++) { 420 for (uint32_t i = 0; i < kNumWaiters / 2; i++) {
418 threads.push_back(new test::WaiterThread(d, 421 threads.push_back(new test::WaiterThread(d,
419 MOJO_WAIT_FLAG_READABLE, 422 MOJO_HANDLE_SIGNAL_READABLE,
420 MOJO_DEADLINE_INDEFINITE, 423 MOJO_DEADLINE_INDEFINITE,
421 i, 424 i,
422 &did_wait[i], 425 &did_wait[i],
423 &result[i], 426 &result[i],
424 &context[i])); 427 &context[i]));
425 threads.back()->Start(); 428 threads.back()->Start();
426 } 429 }
427 for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) { 430 for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
428 threads.push_back(new test::WaiterThread(d, 431 threads.push_back(new test::WaiterThread(d,
429 MOJO_WAIT_FLAG_WRITABLE, 432 MOJO_HANDLE_SIGNAL_WRITABLE,
430 MOJO_DEADLINE_INDEFINITE, 433 MOJO_DEADLINE_INDEFINITE,
431 i, 434 i,
432 &did_wait[i], 435 &did_wait[i],
433 &result[i], 436 &result[i],
434 &context[i])); 437 &context[i]));
435 threads.back()->Start(); 438 threads.back()->Start();
436 } 439 }
437 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); 440 base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
438 d->SetSatisfiedSignals(MOJO_WAIT_FLAG_READABLE); 441 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE);
439 // This will wake up the ones waiting to write. 442 // This will wake up the ones waiting to write.
440 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 443 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
441 } // Joins the threads. 444 } // Joins the threads.
442 for (uint32_t i = 0; i < kNumWaiters / 2; i++) { 445 for (uint32_t i = 0; i < kNumWaiters / 2; i++) {
443 EXPECT_TRUE(did_wait[i]); 446 EXPECT_TRUE(did_wait[i]);
444 EXPECT_EQ(MOJO_RESULT_OK, result[i]); 447 EXPECT_EQ(MOJO_RESULT_OK, result[i]);
445 EXPECT_EQ(i, context[i]); 448 EXPECT_EQ(i, context[i]);
446 } 449 }
447 for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) { 450 for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
448 EXPECT_TRUE(did_wait[i]); 451 EXPECT_TRUE(did_wait[i]);
449 EXPECT_EQ(MOJO_RESULT_CANCELLED, result[i]); 452 EXPECT_EQ(MOJO_RESULT_CANCELLED, result[i]);
450 EXPECT_EQ(i, context[i]); 453 EXPECT_EQ(i, context[i]);
451 } 454 }
452 455
453 // Some wait for readable, some for writable, and becomes readable and 456 // Some wait for readable, some for writable, and becomes readable and
454 // never-writable after some time. 457 // never-writable after some time.
455 { 458 {
456 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); 459 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
457 ScopedVector<test::WaiterThread> threads; 460 ScopedVector<test::WaiterThread> threads;
458 for (uint32_t i = 0; i < kNumWaiters / 2; i++) { 461 for (uint32_t i = 0; i < kNumWaiters / 2; i++) {
459 threads.push_back(new test::WaiterThread(d, 462 threads.push_back(new test::WaiterThread(d,
460 MOJO_WAIT_FLAG_READABLE, 463 MOJO_HANDLE_SIGNAL_READABLE,
461 MOJO_DEADLINE_INDEFINITE, 464 MOJO_DEADLINE_INDEFINITE,
462 i, 465 i,
463 &did_wait[i], 466 &did_wait[i],
464 &result[i], 467 &result[i],
465 &context[i])); 468 &context[i]));
466 threads.back()->Start(); 469 threads.back()->Start();
467 } 470 }
468 for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) { 471 for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
469 threads.push_back(new test::WaiterThread(d, 472 threads.push_back(new test::WaiterThread(d,
470 MOJO_WAIT_FLAG_WRITABLE, 473 MOJO_HANDLE_SIGNAL_WRITABLE,
471 MOJO_DEADLINE_INDEFINITE, 474 MOJO_DEADLINE_INDEFINITE,
472 i, 475 i,
473 &did_wait[i], 476 &did_wait[i],
474 &result[i], 477 &result[i],
475 &context[i])); 478 &context[i]));
476 threads.back()->Start(); 479 threads.back()->Start();
477 } 480 }
478 base::PlatformThread::Sleep(1 * test::EpsilonTimeout()); 481 base::PlatformThread::Sleep(1 * test::EpsilonTimeout());
479 d->SetSatisfiableSignals(MOJO_WAIT_FLAG_READABLE); 482 d->SetSatisfiableSignals(MOJO_HANDLE_SIGNAL_READABLE);
480 base::PlatformThread::Sleep(1 * test::EpsilonTimeout()); 483 base::PlatformThread::Sleep(1 * test::EpsilonTimeout());
481 d->SetSatisfiedSignals(MOJO_WAIT_FLAG_READABLE); 484 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE);
482 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 485 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
483 } // Joins the threads. 486 } // Joins the threads.
484 for (uint32_t i = 0; i < kNumWaiters / 2; i++) { 487 for (uint32_t i = 0; i < kNumWaiters / 2; i++) {
485 EXPECT_TRUE(did_wait[i]); 488 EXPECT_TRUE(did_wait[i]);
486 EXPECT_EQ(MOJO_RESULT_OK, result[i]); 489 EXPECT_EQ(MOJO_RESULT_OK, result[i]);
487 EXPECT_EQ(i, context[i]); 490 EXPECT_EQ(i, context[i]);
488 } 491 }
489 for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) { 492 for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
490 EXPECT_TRUE(did_wait[i]); 493 EXPECT_TRUE(did_wait[i]);
491 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result[i]); 494 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result[i]);
492 EXPECT_EQ(i, context[i]); 495 EXPECT_EQ(i, context[i]);
493 } 496 }
494 497
495 // Some wait for readable, some for writable, and becomes readable after some 498 // Some wait for readable, some for writable, and becomes readable after some
496 // time. 499 // time.
497 { 500 {
498 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); 501 scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher());
499 ScopedVector<test::WaiterThread> threads; 502 ScopedVector<test::WaiterThread> threads;
500 for (uint32_t i = 0; i < kNumWaiters / 2; i++) { 503 for (uint32_t i = 0; i < kNumWaiters / 2; i++) {
501 threads.push_back( 504 threads.push_back(
502 new test::WaiterThread(d, 505 new test::WaiterThread(d,
503 MOJO_WAIT_FLAG_READABLE, 506 MOJO_HANDLE_SIGNAL_READABLE,
504 3 * test::EpsilonTimeout().InMicroseconds(), 507 3 * test::EpsilonTimeout().InMicroseconds(),
505 i, 508 i,
506 &did_wait[i], &result[i], &context[i])); 509 &did_wait[i], &result[i], &context[i]));
507 threads.back()->Start(); 510 threads.back()->Start();
508 } 511 }
509 for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) { 512 for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
510 threads.push_back( 513 threads.push_back(
511 new test::WaiterThread(d, 514 new test::WaiterThread(d,
512 MOJO_WAIT_FLAG_WRITABLE, 515 MOJO_HANDLE_SIGNAL_WRITABLE,
513 1 * test::EpsilonTimeout().InMicroseconds(), 516 1 * test::EpsilonTimeout().InMicroseconds(),
514 i, 517 i,
515 &did_wait[i], &result[i], &context[i])); 518 &did_wait[i], &result[i], &context[i]));
516 threads.back()->Start(); 519 threads.back()->Start();
517 } 520 }
518 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); 521 base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
519 d->SetSatisfiedSignals(MOJO_WAIT_FLAG_READABLE); 522 d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE);
520 // All those waiting for writable should have timed out. 523 // All those waiting for writable should have timed out.
521 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 524 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
522 } // Joins the threads. 525 } // Joins the threads.
523 for (uint32_t i = 0; i < kNumWaiters / 2; i++) { 526 for (uint32_t i = 0; i < kNumWaiters / 2; i++) {
524 EXPECT_TRUE(did_wait[i]); 527 EXPECT_TRUE(did_wait[i]);
525 EXPECT_EQ(MOJO_RESULT_OK, result[i]); 528 EXPECT_EQ(MOJO_RESULT_OK, result[i]);
526 EXPECT_EQ(i, context[i]); 529 EXPECT_EQ(i, context[i]);
527 } 530 }
528 for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) { 531 for (uint32_t i = kNumWaiters / 2; i < kNumWaiters; i++) {
529 EXPECT_TRUE(did_wait[i]); 532 EXPECT_TRUE(did_wait[i]);
530 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, result[i]); 533 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, result[i]);
531 } 534 }
532 } 535 }
533 536
534 // TODO(vtl): Stress test? 537 // TODO(vtl): Stress test?
535 538
536 } // namespace 539 } // namespace
537 } // namespace system 540 } // namespace system
538 } // namespace mojo 541 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/system/remote_message_pipe_unittest.cc ('k') | mojo/system/wait_flags_state.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698