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

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

Issue 597413002: Mojo: NULL -> nullptr in mojo/system and mojo/embedder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: EXPECT_TRUE Created 6 years, 3 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
« no previous file with comments | « mojo/system/message_pipe_dispatcher.cc ('k') | mojo/system/message_pipe_perftest.cc » ('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/message_pipe_dispatcher.h" 10 #include "mojo/system/message_pipe_dispatcher.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &hss)); 58 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &hss));
59 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 59 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
60 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 60 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
61 hss.satisfiable_signals); 61 hss.satisfiable_signals);
62 // Shouldn't need to remove the waiter (it was not added). 62 // Shouldn't need to remove the waiter (it was not added).
63 63
64 // Add a readable waiter to |d0|, then make it readable (by writing to 64 // Add a readable waiter to |d0|, then make it readable (by writing to
65 // |d1|), then wait. 65 // |d1|), then wait.
66 w.Init(); 66 w.Init();
67 ASSERT_EQ(MOJO_RESULT_OK, 67 ASSERT_EQ(MOJO_RESULT_OK,
68 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 1, NULL)); 68 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 1, nullptr));
69 buffer[0] = 123456789; 69 buffer[0] = 123456789;
70 EXPECT_EQ(MOJO_RESULT_OK, 70 EXPECT_EQ(MOJO_RESULT_OK,
71 d1->WriteMessage(UserPointer<const void>(buffer), 71 d1->WriteMessage(UserPointer<const void>(buffer),
72 kBufferSize, 72 kBufferSize,
73 NULL, 73 nullptr,
74 MOJO_WRITE_MESSAGE_FLAG_NONE)); 74 MOJO_WRITE_MESSAGE_FLAG_NONE));
75 stopwatch.Start(); 75 stopwatch.Start();
76 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 76 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, &context));
77 EXPECT_EQ(1u, context); 77 EXPECT_EQ(1u, context);
78 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 78 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
79 hss = HandleSignalsState(); 79 hss = HandleSignalsState();
80 d0->RemoveWaiter(&w, &hss); 80 d0->RemoveWaiter(&w, &hss);
81 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 81 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
82 hss.satisfied_signals); 82 hss.satisfied_signals);
83 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 83 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
(...skipping 10 matching lines...) Expand all
94 hss.satisfiable_signals); 94 hss.satisfiable_signals);
95 // Shouldn't need to remove the waiter (it was not added). 95 // Shouldn't need to remove the waiter (it was not added).
96 96
97 // Make |d0| no longer readable (by reading from it). 97 // Make |d0| no longer readable (by reading from it).
98 buffer[0] = 0; 98 buffer[0] = 0;
99 buffer_size = kBufferSize; 99 buffer_size = kBufferSize;
100 EXPECT_EQ(MOJO_RESULT_OK, 100 EXPECT_EQ(MOJO_RESULT_OK,
101 d0->ReadMessage(UserPointer<void>(buffer), 101 d0->ReadMessage(UserPointer<void>(buffer),
102 MakeUserPointer(&buffer_size), 102 MakeUserPointer(&buffer_size),
103 0, 103 0,
104 NULL, 104 nullptr,
105 MOJO_READ_MESSAGE_FLAG_NONE)); 105 MOJO_READ_MESSAGE_FLAG_NONE));
106 EXPECT_EQ(kBufferSize, buffer_size); 106 EXPECT_EQ(kBufferSize, buffer_size);
107 EXPECT_EQ(123456789, buffer[0]); 107 EXPECT_EQ(123456789, buffer[0]);
108 108
109 // Wait for zero time for readability on |d0| (will time out). 109 // Wait for zero time for readability on |d0| (will time out).
110 w.Init(); 110 w.Init();
111 ASSERT_EQ(MOJO_RESULT_OK, 111 ASSERT_EQ(MOJO_RESULT_OK,
112 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 3, NULL)); 112 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 3, nullptr));
113 stopwatch.Start(); 113 stopwatch.Start();
114 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, w.Wait(0, NULL)); 114 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, w.Wait(0, nullptr));
115 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 115 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
116 hss = HandleSignalsState(); 116 hss = HandleSignalsState();
117 d0->RemoveWaiter(&w, &hss); 117 d0->RemoveWaiter(&w, &hss);
118 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 118 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
119 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 119 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
120 hss.satisfiable_signals); 120 hss.satisfiable_signals);
121 121
122 // Wait for non-zero, finite time for readability on |d0| (will time out). 122 // Wait for non-zero, finite time for readability on |d0| (will time out).
123 w.Init(); 123 w.Init();
124 ASSERT_EQ(MOJO_RESULT_OK, 124 ASSERT_EQ(MOJO_RESULT_OK,
125 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 3, NULL)); 125 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 3, nullptr));
126 stopwatch.Start(); 126 stopwatch.Start();
127 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, 127 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
128 w.Wait(2 * test::EpsilonTimeout().InMicroseconds(), NULL)); 128 w.Wait(2 * test::EpsilonTimeout().InMicroseconds(), nullptr));
129 base::TimeDelta elapsed = stopwatch.Elapsed(); 129 base::TimeDelta elapsed = stopwatch.Elapsed();
130 EXPECT_GT(elapsed, (2 - 1) * test::EpsilonTimeout()); 130 EXPECT_GT(elapsed, (2 - 1) * test::EpsilonTimeout());
131 EXPECT_LT(elapsed, (2 + 1) * test::EpsilonTimeout()); 131 EXPECT_LT(elapsed, (2 + 1) * test::EpsilonTimeout());
132 hss = HandleSignalsState(); 132 hss = HandleSignalsState();
133 d0->RemoveWaiter(&w, &hss); 133 d0->RemoveWaiter(&w, &hss);
134 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 134 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
135 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 135 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
136 hss.satisfiable_signals); 136 hss.satisfiable_signals);
137 137
138 EXPECT_EQ(MOJO_RESULT_OK, d0->Close()); 138 EXPECT_EQ(MOJO_RESULT_OK, d0->Close());
(...skipping 12 matching lines...) Expand all
151 scoped_refptr<MessagePipe> mp(MessagePipe::CreateLocalLocal()); 151 scoped_refptr<MessagePipe> mp(MessagePipe::CreateLocalLocal());
152 d0->Init(mp, 0); 152 d0->Init(mp, 0);
153 d1->Init(mp, 1); 153 d1->Init(mp, 1);
154 } 154 }
155 155
156 // |WriteMessage|: 156 // |WriteMessage|:
157 // Huge buffer size. 157 // Huge buffer size.
158 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 158 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
159 d0->WriteMessage(UserPointer<const void>(buffer), 159 d0->WriteMessage(UserPointer<const void>(buffer),
160 std::numeric_limits<uint32_t>::max(), 160 std::numeric_limits<uint32_t>::max(),
161 NULL, 161 nullptr,
162 MOJO_WRITE_MESSAGE_FLAG_NONE)); 162 MOJO_WRITE_MESSAGE_FLAG_NONE));
163 163
164 EXPECT_EQ(MOJO_RESULT_OK, d0->Close()); 164 EXPECT_EQ(MOJO_RESULT_OK, d0->Close());
165 EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); 165 EXPECT_EQ(MOJO_RESULT_OK, d1->Close());
166 } 166 }
167 167
168 // These test invalid arguments that should cause death if we're being paranoid 168 // These test invalid arguments that should cause death if we're being paranoid
169 // about checking arguments (which we would want to do if, e.g., we were in a 169 // about checking arguments (which we would want to do if, e.g., we were in a
170 // true "kernel" situation, but we might not want to do otherwise for 170 // true "kernel" situation, but we might not want to do otherwise for
171 // performance reasons). Probably blatant errors like passing in null pointers 171 // performance reasons). Probably blatant errors like passing in null pointers
172 // (for required pointer arguments) will still cause death, but perhaps not 172 // (for required pointer arguments) will still cause death, but perhaps not
173 // predictably. 173 // predictably.
174 TEST(MessagePipeDispatcherTest, InvalidParamsDeath) { 174 TEST(MessagePipeDispatcherTest, InvalidParamsDeath) {
175 const char kMemoryCheckFailedRegex[] = "Check failed"; 175 const char kMemoryCheckFailedRegex[] = "Check failed";
176 176
177 scoped_refptr<MessagePipeDispatcher> d0( 177 scoped_refptr<MessagePipeDispatcher> d0(
178 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions)); 178 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions));
179 scoped_refptr<MessagePipeDispatcher> d1( 179 scoped_refptr<MessagePipeDispatcher> d1(
180 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions)); 180 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions));
181 { 181 {
182 scoped_refptr<MessagePipe> mp(MessagePipe::CreateLocalLocal()); 182 scoped_refptr<MessagePipe> mp(MessagePipe::CreateLocalLocal());
183 d0->Init(mp, 0); 183 d0->Init(mp, 0);
184 d1->Init(mp, 1); 184 d1->Init(mp, 1);
185 } 185 }
186 186
187 // |WriteMessage|: 187 // |WriteMessage|:
188 // Null buffer with nonzero buffer size. 188 // Null buffer with nonzero buffer size.
189 EXPECT_DEATH_IF_SUPPORTED( 189 EXPECT_DEATH_IF_SUPPORTED(
190 d0->WriteMessage( 190 d0->WriteMessage(
191 NullUserPointer(), 1, NULL, MOJO_WRITE_MESSAGE_FLAG_NONE), 191 NullUserPointer(), 1, nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE),
192 kMemoryCheckFailedRegex); 192 kMemoryCheckFailedRegex);
193 193
194 // |ReadMessage|: 194 // |ReadMessage|:
195 // Null buffer with nonzero buffer size. 195 // Null buffer with nonzero buffer size.
196 // First write something so that we actually have something to read. 196 // First write something so that we actually have something to read.
197 EXPECT_EQ( 197 EXPECT_EQ(MOJO_RESULT_OK,
198 MOJO_RESULT_OK, 198 d1->WriteMessage(UserPointer<const void>("x"),
199 d1->WriteMessage( 199 1,
200 UserPointer<const void>("x"), 1, NULL, MOJO_WRITE_MESSAGE_FLAG_NONE)); 200 nullptr,
201 MOJO_WRITE_MESSAGE_FLAG_NONE));
201 uint32_t buffer_size = 1; 202 uint32_t buffer_size = 1;
202 EXPECT_DEATH_IF_SUPPORTED(d0->ReadMessage(NullUserPointer(), 203 EXPECT_DEATH_IF_SUPPORTED(d0->ReadMessage(NullUserPointer(),
203 MakeUserPointer(&buffer_size), 204 MakeUserPointer(&buffer_size),
204 0, 205 0,
205 NULL, 206 nullptr,
206 MOJO_READ_MESSAGE_FLAG_NONE), 207 MOJO_READ_MESSAGE_FLAG_NONE),
207 kMemoryCheckFailedRegex); 208 kMemoryCheckFailedRegex);
208 209
209 EXPECT_EQ(MOJO_RESULT_OK, d0->Close()); 210 EXPECT_EQ(MOJO_RESULT_OK, d0->Close());
210 EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); 211 EXPECT_EQ(MOJO_RESULT_OK, d1->Close());
211 } 212 }
212 213
213 // Test what happens when one end is closed (single-threaded test). 214 // Test what happens when one end is closed (single-threaded test).
214 TEST(MessagePipeDispatcherTest, BasicClosed) { 215 TEST(MessagePipeDispatcherTest, BasicClosed) {
215 int32_t buffer[1]; 216 int32_t buffer[1];
(...skipping 12 matching lines...) Expand all
228 d1->Init(mp, i ^ 1); // 1, 0. 229 d1->Init(mp, i ^ 1); // 1, 0.
229 } 230 }
230 Waiter w; 231 Waiter w;
231 HandleSignalsState hss; 232 HandleSignalsState hss;
232 233
233 // Write (twice) to |d1|. 234 // Write (twice) to |d1|.
234 buffer[0] = 123456789; 235 buffer[0] = 123456789;
235 EXPECT_EQ(MOJO_RESULT_OK, 236 EXPECT_EQ(MOJO_RESULT_OK,
236 d1->WriteMessage(UserPointer<const void>(buffer), 237 d1->WriteMessage(UserPointer<const void>(buffer),
237 kBufferSize, 238 kBufferSize,
238 NULL, 239 nullptr,
239 MOJO_WRITE_MESSAGE_FLAG_NONE)); 240 MOJO_WRITE_MESSAGE_FLAG_NONE));
240 buffer[0] = 234567890; 241 buffer[0] = 234567890;
241 EXPECT_EQ(MOJO_RESULT_OK, 242 EXPECT_EQ(MOJO_RESULT_OK,
242 d1->WriteMessage(UserPointer<const void>(buffer), 243 d1->WriteMessage(UserPointer<const void>(buffer),
243 kBufferSize, 244 kBufferSize,
244 NULL, 245 nullptr,
245 MOJO_WRITE_MESSAGE_FLAG_NONE)); 246 MOJO_WRITE_MESSAGE_FLAG_NONE));
246 247
247 // Try waiting for readable on |d0|; should fail (already satisfied). 248 // Try waiting for readable on |d0|; should fail (already satisfied).
248 w.Init(); 249 w.Init();
249 hss = HandleSignalsState(); 250 hss = HandleSignalsState();
250 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 251 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
251 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 0, &hss)); 252 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 0, &hss));
252 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 253 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
253 hss.satisfied_signals); 254 hss.satisfied_signals);
254 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 255 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
255 hss.satisfiable_signals); 256 hss.satisfiable_signals);
256 257
257 // Try reading from |d1|; should fail (nothing to read). 258 // Try reading from |d1|; should fail (nothing to read).
258 buffer[0] = 0; 259 buffer[0] = 0;
259 buffer_size = kBufferSize; 260 buffer_size = kBufferSize;
260 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 261 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
261 d1->ReadMessage(UserPointer<void>(buffer), 262 d1->ReadMessage(UserPointer<void>(buffer),
262 MakeUserPointer(&buffer_size), 263 MakeUserPointer(&buffer_size),
263 0, 264 0,
264 NULL, 265 nullptr,
265 MOJO_READ_MESSAGE_FLAG_NONE)); 266 MOJO_READ_MESSAGE_FLAG_NONE));
266 267
267 // Close |d1|. 268 // Close |d1|.
268 EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); 269 EXPECT_EQ(MOJO_RESULT_OK, d1->Close());
269 270
270 // Try waiting for readable on |d0|; should fail (already satisfied). 271 // Try waiting for readable on |d0|; should fail (already satisfied).
271 w.Init(); 272 w.Init();
272 hss = HandleSignalsState(); 273 hss = HandleSignalsState();
273 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 274 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
274 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 1, &hss)); 275 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 1, &hss));
275 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); 276 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals);
276 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); 277 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals);
277 278
278 // Read from |d0|. 279 // Read from |d0|.
279 buffer[0] = 0; 280 buffer[0] = 0;
280 buffer_size = kBufferSize; 281 buffer_size = kBufferSize;
281 EXPECT_EQ(MOJO_RESULT_OK, 282 EXPECT_EQ(MOJO_RESULT_OK,
282 d0->ReadMessage(UserPointer<void>(buffer), 283 d0->ReadMessage(UserPointer<void>(buffer),
283 MakeUserPointer(&buffer_size), 284 MakeUserPointer(&buffer_size),
284 0, 285 0,
285 NULL, 286 nullptr,
286 MOJO_READ_MESSAGE_FLAG_NONE)); 287 MOJO_READ_MESSAGE_FLAG_NONE));
287 EXPECT_EQ(kBufferSize, buffer_size); 288 EXPECT_EQ(kBufferSize, buffer_size);
288 EXPECT_EQ(123456789, buffer[0]); 289 EXPECT_EQ(123456789, buffer[0]);
289 290
290 // Try waiting for readable on |d0|; should fail (already satisfied). 291 // Try waiting for readable on |d0|; should fail (already satisfied).
291 w.Init(); 292 w.Init();
292 hss = HandleSignalsState(); 293 hss = HandleSignalsState();
293 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 294 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
294 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 2, &hss)); 295 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 2, &hss));
295 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); 296 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals);
296 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); 297 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals);
297 298
298 // Read again from |d0|. 299 // Read again from |d0|.
299 buffer[0] = 0; 300 buffer[0] = 0;
300 buffer_size = kBufferSize; 301 buffer_size = kBufferSize;
301 EXPECT_EQ(MOJO_RESULT_OK, 302 EXPECT_EQ(MOJO_RESULT_OK,
302 d0->ReadMessage(UserPointer<void>(buffer), 303 d0->ReadMessage(UserPointer<void>(buffer),
303 MakeUserPointer(&buffer_size), 304 MakeUserPointer(&buffer_size),
304 0, 305 0,
305 NULL, 306 nullptr,
306 MOJO_READ_MESSAGE_FLAG_NONE)); 307 MOJO_READ_MESSAGE_FLAG_NONE));
307 EXPECT_EQ(kBufferSize, buffer_size); 308 EXPECT_EQ(kBufferSize, buffer_size);
308 EXPECT_EQ(234567890, buffer[0]); 309 EXPECT_EQ(234567890, buffer[0]);
309 310
310 // Try waiting for readable on |d0|; should fail (unsatisfiable). 311 // Try waiting for readable on |d0|; should fail (unsatisfiable).
311 w.Init(); 312 w.Init();
312 hss = HandleSignalsState(); 313 hss = HandleSignalsState();
313 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 314 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
314 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 3, &hss)); 315 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 3, &hss));
315 EXPECT_EQ(0u, hss.satisfied_signals); 316 EXPECT_EQ(0u, hss.satisfied_signals);
316 EXPECT_EQ(0u, hss.satisfiable_signals); 317 EXPECT_EQ(0u, hss.satisfiable_signals);
317 318
318 // Try waiting for writable on |d0|; should fail (unsatisfiable). 319 // Try waiting for writable on |d0|; should fail (unsatisfiable).
319 w.Init(); 320 w.Init();
320 hss = HandleSignalsState(); 321 hss = HandleSignalsState();
321 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 322 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
322 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 4, &hss)); 323 d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 4, &hss));
323 EXPECT_EQ(0u, hss.satisfied_signals); 324 EXPECT_EQ(0u, hss.satisfied_signals);
324 EXPECT_EQ(0u, hss.satisfiable_signals); 325 EXPECT_EQ(0u, hss.satisfiable_signals);
325 326
326 // Try reading from |d0|; should fail (nothing to read and other end 327 // Try reading from |d0|; should fail (nothing to read and other end
327 // closed). 328 // closed).
328 buffer[0] = 0; 329 buffer[0] = 0;
329 buffer_size = kBufferSize; 330 buffer_size = kBufferSize;
330 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 331 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
331 d0->ReadMessage(UserPointer<void>(buffer), 332 d0->ReadMessage(UserPointer<void>(buffer),
332 MakeUserPointer(&buffer_size), 333 MakeUserPointer(&buffer_size),
333 0, 334 0,
334 NULL, 335 nullptr,
335 MOJO_READ_MESSAGE_FLAG_NONE)); 336 MOJO_READ_MESSAGE_FLAG_NONE));
336 337
337 // Try writing to |d0|; should fail (other end closed). 338 // Try writing to |d0|; should fail (other end closed).
338 buffer[0] = 345678901; 339 buffer[0] = 345678901;
339 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 340 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
340 d0->WriteMessage(UserPointer<const void>(buffer), 341 d0->WriteMessage(UserPointer<const void>(buffer),
341 kBufferSize, 342 kBufferSize,
342 NULL, 343 nullptr,
343 MOJO_WRITE_MESSAGE_FLAG_NONE)); 344 MOJO_WRITE_MESSAGE_FLAG_NONE));
344 345
345 EXPECT_EQ(MOJO_RESULT_OK, d0->Close()); 346 EXPECT_EQ(MOJO_RESULT_OK, d0->Close());
346 } 347 }
347 } 348 }
348 349
349 #if defined(OS_WIN) 350 #if defined(OS_WIN)
350 // http://crbug.com/396386 351 // http://crbug.com/396386
351 #define MAYBE_BasicThreaded DISABLED_BasicThreaded 352 #define MAYBE_BasicThreaded DISABLED_BasicThreaded
352 #else 353 #else
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 &context, 387 &context,
387 &hss); 388 &hss);
388 stopwatch.Start(); 389 stopwatch.Start();
389 thread.Start(); 390 thread.Start();
390 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); 391 base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
391 // Wake it up by writing to |d0|. 392 // Wake it up by writing to |d0|.
392 buffer[0] = 123456789; 393 buffer[0] = 123456789;
393 EXPECT_EQ(MOJO_RESULT_OK, 394 EXPECT_EQ(MOJO_RESULT_OK,
394 d0->WriteMessage(UserPointer<const void>(buffer), 395 d0->WriteMessage(UserPointer<const void>(buffer),
395 kBufferSize, 396 kBufferSize,
396 NULL, 397 nullptr,
397 MOJO_WRITE_MESSAGE_FLAG_NONE)); 398 MOJO_WRITE_MESSAGE_FLAG_NONE));
398 } // Joins the thread. 399 } // Joins the thread.
399 elapsed = stopwatch.Elapsed(); 400 elapsed = stopwatch.Elapsed();
400 EXPECT_GT(elapsed, (2 - 1) * test::EpsilonTimeout()); 401 EXPECT_GT(elapsed, (2 - 1) * test::EpsilonTimeout());
401 EXPECT_LT(elapsed, (2 + 1) * test::EpsilonTimeout()); 402 EXPECT_LT(elapsed, (2 + 1) * test::EpsilonTimeout());
402 EXPECT_TRUE(did_wait); 403 EXPECT_TRUE(did_wait);
403 EXPECT_EQ(MOJO_RESULT_OK, result); 404 EXPECT_EQ(MOJO_RESULT_OK, result);
404 EXPECT_EQ(1u, context); 405 EXPECT_EQ(1u, context);
405 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 406 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
406 hss.satisfied_signals); 407 hss.satisfied_signals);
(...skipping 21 matching lines...) Expand all
428 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 429 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
429 hss.satisfiable_signals); 430 hss.satisfiable_signals);
430 431
431 // Consume what we wrote to |d0|. 432 // Consume what we wrote to |d0|.
432 buffer[0] = 0; 433 buffer[0] = 0;
433 buffer_size = kBufferSize; 434 buffer_size = kBufferSize;
434 EXPECT_EQ(MOJO_RESULT_OK, 435 EXPECT_EQ(MOJO_RESULT_OK,
435 d1->ReadMessage(UserPointer<void>(buffer), 436 d1->ReadMessage(UserPointer<void>(buffer),
436 MakeUserPointer(&buffer_size), 437 MakeUserPointer(&buffer_size),
437 0, 438 0,
438 NULL, 439 nullptr,
439 MOJO_READ_MESSAGE_FLAG_NONE)); 440 MOJO_READ_MESSAGE_FLAG_NONE));
440 EXPECT_EQ(kBufferSize, buffer_size); 441 EXPECT_EQ(kBufferSize, buffer_size);
441 EXPECT_EQ(123456789, buffer[0]); 442 EXPECT_EQ(123456789, buffer[0]);
442 443
443 // Wait for readable on |d1| and close |d0| after some time, which should 444 // Wait for readable on |d1| and close |d0| after some time, which should
444 // cancel that wait. 445 // cancel that wait.
445 { 446 {
446 test::WaiterThread thread(d1, 447 test::WaiterThread thread(d1,
447 MOJO_HANDLE_SIGNAL_READABLE, 448 MOJO_HANDLE_SIGNAL_READABLE,
448 MOJO_DEADLINE_INDEFINITE, 449 MOJO_DEADLINE_INDEFINITE,
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 // Number of messages to write. 540 // Number of messages to write.
540 *messages_written_ = static_cast<size_t>(base::RandInt(1000, 6000)); 541 *messages_written_ = static_cast<size_t>(base::RandInt(1000, 6000));
541 542
542 // Write messages. 543 // Write messages.
543 for (size_t i = 0; i < *messages_written_; i++) { 544 for (size_t i = 0; i < *messages_written_; i++) {
544 uint32_t bytes_to_write = static_cast<uint32_t>( 545 uint32_t bytes_to_write = static_cast<uint32_t>(
545 base::RandInt(1, static_cast<int>(kMaxMessageSize))); 546 base::RandInt(1, static_cast<int>(kMaxMessageSize)));
546 EXPECT_EQ(MOJO_RESULT_OK, 547 EXPECT_EQ(MOJO_RESULT_OK,
547 write_dispatcher_->WriteMessage(UserPointer<const void>(buffer), 548 write_dispatcher_->WriteMessage(UserPointer<const void>(buffer),
548 bytes_to_write, 549 bytes_to_write,
549 NULL, 550 nullptr,
550 MOJO_WRITE_MESSAGE_FLAG_NONE)); 551 MOJO_WRITE_MESSAGE_FLAG_NONE));
551 *bytes_written_ += bytes_to_write; 552 *bytes_written_ += bytes_to_write;
552 } 553 }
553 554
554 // Write one last "quit" message. 555 // Write one last "quit" message.
555 EXPECT_EQ(MOJO_RESULT_OK, 556 EXPECT_EQ(MOJO_RESULT_OK,
556 write_dispatcher_->WriteMessage(UserPointer<const void>("quit"), 557 write_dispatcher_->WriteMessage(UserPointer<const void>("quit"),
557 4, 558 4,
558 NULL, 559 nullptr,
559 MOJO_WRITE_MESSAGE_FLAG_NONE)); 560 MOJO_WRITE_MESSAGE_FLAG_NONE));
560 } 561 }
561 562
562 const scoped_refptr<Dispatcher> write_dispatcher_; 563 const scoped_refptr<Dispatcher> write_dispatcher_;
563 size_t* const messages_written_; 564 size_t* const messages_written_;
564 size_t* const bytes_written_; 565 size_t* const bytes_written_;
565 566
566 DISALLOW_COPY_AND_ASSIGN(WriterThread); 567 DISALLOW_COPY_AND_ASSIGN(WriterThread);
567 }; 568 };
568 569
(...skipping 25 matching lines...) Expand all
594 // Wait for it to be readable. 595 // Wait for it to be readable.
595 w.Init(); 596 w.Init();
596 hss = HandleSignalsState(); 597 hss = HandleSignalsState();
597 result = 598 result =
598 read_dispatcher_->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 0, &hss); 599 read_dispatcher_->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 0, &hss);
599 EXPECT_TRUE(result == MOJO_RESULT_OK || 600 EXPECT_TRUE(result == MOJO_RESULT_OK ||
600 result == MOJO_RESULT_ALREADY_EXISTS) 601 result == MOJO_RESULT_ALREADY_EXISTS)
601 << "result: " << result; 602 << "result: " << result;
602 if (result == MOJO_RESULT_OK) { 603 if (result == MOJO_RESULT_OK) {
603 // Actually need to wait. 604 // Actually need to wait.
604 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, NULL)); 605 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, nullptr));
605 read_dispatcher_->RemoveWaiter(&w, &hss); 606 read_dispatcher_->RemoveWaiter(&w, &hss);
606 } 607 }
607 // We may not actually be readable, since we're racing with other threads. 608 // We may not actually be readable, since we're racing with other threads.
608 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE)); 609 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE));
609 610
610 // Now, try to do the read. 611 // Now, try to do the read.
611 // Clear the buffer so that we can check the result. 612 // Clear the buffer so that we can check the result.
612 memset(buffer, 0, sizeof(buffer)); 613 memset(buffer, 0, sizeof(buffer));
613 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer)); 614 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer));
614 result = read_dispatcher_->ReadMessage(UserPointer<void>(buffer), 615 result = read_dispatcher_->ReadMessage(UserPointer<void>(buffer),
615 MakeUserPointer(&buffer_size), 616 MakeUserPointer(&buffer_size),
616 0, 617 0,
617 NULL, 618 nullptr,
618 MOJO_READ_MESSAGE_FLAG_NONE); 619 MOJO_READ_MESSAGE_FLAG_NONE);
619 EXPECT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT) 620 EXPECT_TRUE(result == MOJO_RESULT_OK || result == MOJO_RESULT_SHOULD_WAIT)
620 << "result: " << result; 621 << "result: " << result;
621 // We're racing with others to read, so maybe we failed. 622 // We're racing with others to read, so maybe we failed.
622 if (result == MOJO_RESULT_SHOULD_WAIT) 623 if (result == MOJO_RESULT_SHOULD_WAIT)
623 continue; // In which case, try again. 624 continue; // In which case, try again.
624 // Check for quit. 625 // Check for quit.
625 if (buffer_size == 4 && memcmp("quit", buffer, 4) == 0) 626 if (buffer_size == 4 && memcmp("quit", buffer, 4) == 0)
626 return; 627 return;
627 EXPECT_GE(buffer_size, 1u); 628 EXPECT_GE(buffer_size, 1u);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 EXPECT_EQ(total_messages_written, total_messages_read); 720 EXPECT_EQ(total_messages_written, total_messages_read);
720 EXPECT_EQ(total_bytes_written, total_bytes_read); 721 EXPECT_EQ(total_bytes_written, total_bytes_read);
721 722
722 EXPECT_EQ(MOJO_RESULT_OK, d_write->Close()); 723 EXPECT_EQ(MOJO_RESULT_OK, d_write->Close());
723 EXPECT_EQ(MOJO_RESULT_OK, d_read->Close()); 724 EXPECT_EQ(MOJO_RESULT_OK, d_read->Close());
724 } 725 }
725 726
726 } // namespace 727 } // namespace
727 } // namespace system 728 } // namespace system
728 } // namespace mojo 729 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/system/message_pipe_dispatcher.cc ('k') | mojo/system/message_pipe_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698