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

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

Issue 417303002: Convert ReadMessage...() to use the new user pointer handling (see r285350). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: hmm Created 6 years, 4 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/message_pipe_endpoint.cc ('k') | mojo/system/multiprocess_message_pipe_unittest.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 #include "mojo/system/message_pipe.h" 5 #include "mojo/system/message_pipe.h"
6 6
7 #include "base/memory/ref_counted.h" 7 #include "base/memory/ref_counted.h"
8 #include "base/threading/platform_thread.h" // For |Sleep()|. 8 #include "base/threading/platform_thread.h" // For |Sleep()|.
9 #include "base/time/time.h" 9 #include "base/time/time.h"
10 #include "mojo/system/waiter.h" 10 #include "mojo/system/waiter.h"
(...skipping 21 matching lines...) Expand all
32 32
33 int32_t buffer[2]; 33 int32_t buffer[2];
34 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); 34 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer));
35 uint32_t buffer_size; 35 uint32_t buffer_size;
36 36
37 // Nothing to read yet on port 0. 37 // Nothing to read yet on port 0.
38 buffer[0] = 123; 38 buffer[0] = 123;
39 buffer[1] = 456; 39 buffer[1] = 456;
40 buffer_size = kBufferSize; 40 buffer_size = kBufferSize;
41 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 41 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
42 mp->ReadMessage(0, 42 mp->ReadMessage(0, UserPointer<void>(buffer),
43 buffer, &buffer_size, 43 MakeUserPointer(&buffer_size), 0, NULL,
44 0, NULL,
45 MOJO_READ_MESSAGE_FLAG_NONE)); 44 MOJO_READ_MESSAGE_FLAG_NONE));
46 EXPECT_EQ(kBufferSize, buffer_size); 45 EXPECT_EQ(kBufferSize, buffer_size);
47 EXPECT_EQ(123, buffer[0]); 46 EXPECT_EQ(123, buffer[0]);
48 EXPECT_EQ(456, buffer[1]); 47 EXPECT_EQ(456, buffer[1]);
49 48
50 // Ditto for port 1. 49 // Ditto for port 1.
51 buffer[0] = 123; 50 buffer[0] = 123;
52 buffer[1] = 456; 51 buffer[1] = 456;
53 buffer_size = kBufferSize; 52 buffer_size = kBufferSize;
54 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 53 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
55 mp->ReadMessage(1, 54 mp->ReadMessage(1, UserPointer<void>(buffer),
56 buffer, &buffer_size, 55 MakeUserPointer(&buffer_size), 0, NULL,
57 0, NULL,
58 MOJO_READ_MESSAGE_FLAG_NONE)); 56 MOJO_READ_MESSAGE_FLAG_NONE));
59 57
60 // Write from port 1 (to port 0). 58 // Write from port 1 (to port 0).
61 buffer[0] = 789012345; 59 buffer[0] = 789012345;
62 buffer[1] = 0; 60 buffer[1] = 0;
63 EXPECT_EQ(MOJO_RESULT_OK, 61 EXPECT_EQ(MOJO_RESULT_OK,
64 mp->WriteMessage(1, 62 mp->WriteMessage(1,
65 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 63 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
66 NULL, 64 NULL,
67 MOJO_WRITE_MESSAGE_FLAG_NONE)); 65 MOJO_WRITE_MESSAGE_FLAG_NONE));
68 66
69 // Read from port 0. 67 // Read from port 0.
70 buffer[0] = 123; 68 buffer[0] = 123;
71 buffer[1] = 456; 69 buffer[1] = 456;
72 buffer_size = kBufferSize; 70 buffer_size = kBufferSize;
73 EXPECT_EQ(MOJO_RESULT_OK, 71 EXPECT_EQ(MOJO_RESULT_OK,
74 mp->ReadMessage(0, 72 mp->ReadMessage(0, UserPointer<void>(buffer),
75 buffer, &buffer_size, 73 MakeUserPointer(&buffer_size), 0, NULL,
76 0, NULL,
77 MOJO_READ_MESSAGE_FLAG_NONE)); 74 MOJO_READ_MESSAGE_FLAG_NONE));
78 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 75 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
79 EXPECT_EQ(789012345, buffer[0]); 76 EXPECT_EQ(789012345, buffer[0]);
80 EXPECT_EQ(456, buffer[1]); 77 EXPECT_EQ(456, buffer[1]);
81 78
82 // Read again from port 0 -- it should be empty. 79 // Read again from port 0 -- it should be empty.
83 buffer_size = kBufferSize; 80 buffer_size = kBufferSize;
84 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 81 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
85 mp->ReadMessage(0, 82 mp->ReadMessage(0, UserPointer<void>(buffer),
86 buffer, &buffer_size, 83 MakeUserPointer(&buffer_size), 0, NULL,
87 0, NULL,
88 MOJO_READ_MESSAGE_FLAG_NONE)); 84 MOJO_READ_MESSAGE_FLAG_NONE));
89 85
90 // Write two messages from port 0 (to port 1). 86 // Write two messages from port 0 (to port 1).
91 buffer[0] = 123456789; 87 buffer[0] = 123456789;
92 buffer[1] = 0; 88 buffer[1] = 0;
93 EXPECT_EQ(MOJO_RESULT_OK, 89 EXPECT_EQ(MOJO_RESULT_OK,
94 mp->WriteMessage(0, 90 mp->WriteMessage(0,
95 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 91 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
96 NULL, 92 NULL,
97 MOJO_WRITE_MESSAGE_FLAG_NONE)); 93 MOJO_WRITE_MESSAGE_FLAG_NONE));
98 buffer[0] = 234567890; 94 buffer[0] = 234567890;
99 buffer[1] = 0; 95 buffer[1] = 0;
100 EXPECT_EQ(MOJO_RESULT_OK, 96 EXPECT_EQ(MOJO_RESULT_OK,
101 mp->WriteMessage(0, 97 mp->WriteMessage(0,
102 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 98 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
103 NULL, 99 NULL,
104 MOJO_WRITE_MESSAGE_FLAG_NONE)); 100 MOJO_WRITE_MESSAGE_FLAG_NONE));
105 101
106 // Read from port 1 with buffer size 0 (should get the size of next message). 102 // Read from port 1 with buffer size 0 (should get the size of next message).
107 // Also test that giving a null buffer is okay when the buffer size is 0. 103 // Also test that giving a null buffer is okay when the buffer size is 0.
108 buffer_size = 0; 104 buffer_size = 0;
109 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 105 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
110 mp->ReadMessage(1, 106 mp->ReadMessage(1, NullUserPointer(), MakeUserPointer(&buffer_size),
111 NULL, &buffer_size,
112 0, NULL, 107 0, NULL,
113 MOJO_READ_MESSAGE_FLAG_NONE)); 108 MOJO_READ_MESSAGE_FLAG_NONE));
114 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 109 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
115 110
116 // Read from port 1 with buffer size 1 (too small; should get the size of next 111 // Read from port 1 with buffer size 1 (too small; should get the size of next
117 // message). 112 // message).
118 buffer[0] = 123; 113 buffer[0] = 123;
119 buffer[1] = 456; 114 buffer[1] = 456;
120 buffer_size = 1; 115 buffer_size = 1;
121 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 116 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
122 mp->ReadMessage(1, 117 mp->ReadMessage(1, UserPointer<void>(buffer),
123 buffer, &buffer_size, 118 MakeUserPointer(&buffer_size), 0, NULL,
124 0, NULL,
125 MOJO_READ_MESSAGE_FLAG_NONE)); 119 MOJO_READ_MESSAGE_FLAG_NONE));
126 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 120 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
127 EXPECT_EQ(123, buffer[0]); 121 EXPECT_EQ(123, buffer[0]);
128 EXPECT_EQ(456, buffer[1]); 122 EXPECT_EQ(456, buffer[1]);
129 123
130 // Read from port 1. 124 // Read from port 1.
131 buffer[0] = 123; 125 buffer[0] = 123;
132 buffer[1] = 456; 126 buffer[1] = 456;
133 buffer_size = kBufferSize; 127 buffer_size = kBufferSize;
134 EXPECT_EQ(MOJO_RESULT_OK, 128 EXPECT_EQ(MOJO_RESULT_OK,
135 mp->ReadMessage(1, 129 mp->ReadMessage(1, UserPointer<void>(buffer),
136 buffer, &buffer_size, 130 MakeUserPointer(&buffer_size), 0, NULL,
137 0, NULL,
138 MOJO_READ_MESSAGE_FLAG_NONE)); 131 MOJO_READ_MESSAGE_FLAG_NONE));
139 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 132 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
140 EXPECT_EQ(123456789, buffer[0]); 133 EXPECT_EQ(123456789, buffer[0]);
141 EXPECT_EQ(456, buffer[1]); 134 EXPECT_EQ(456, buffer[1]);
142 135
143 // Read again from port 1. 136 // Read again from port 1.
144 buffer[0] = 123; 137 buffer[0] = 123;
145 buffer[1] = 456; 138 buffer[1] = 456;
146 buffer_size = kBufferSize; 139 buffer_size = kBufferSize;
147 EXPECT_EQ(MOJO_RESULT_OK, 140 EXPECT_EQ(MOJO_RESULT_OK,
148 mp->ReadMessage(1, 141 mp->ReadMessage(1, UserPointer<void>(buffer),
149 buffer, &buffer_size, 142 MakeUserPointer(&buffer_size), 0, NULL,
150 0, NULL,
151 MOJO_READ_MESSAGE_FLAG_NONE)); 143 MOJO_READ_MESSAGE_FLAG_NONE));
152 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 144 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
153 EXPECT_EQ(234567890, buffer[0]); 145 EXPECT_EQ(234567890, buffer[0]);
154 EXPECT_EQ(456, buffer[1]); 146 EXPECT_EQ(456, buffer[1]);
155 147
156 // Read again from port 1 -- it should be empty. 148 // Read again from port 1 -- it should be empty.
157 buffer_size = kBufferSize; 149 buffer_size = kBufferSize;
158 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 150 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
159 mp->ReadMessage(1, 151 mp->ReadMessage(1, UserPointer<void>(buffer),
160 buffer, &buffer_size, 152 MakeUserPointer(&buffer_size), 0, NULL,
161 0, NULL,
162 MOJO_READ_MESSAGE_FLAG_NONE)); 153 MOJO_READ_MESSAGE_FLAG_NONE));
163 154
164 // Write from port 0 (to port 1). 155 // Write from port 0 (to port 1).
165 buffer[0] = 345678901; 156 buffer[0] = 345678901;
166 buffer[1] = 0; 157 buffer[1] = 0;
167 EXPECT_EQ(MOJO_RESULT_OK, 158 EXPECT_EQ(MOJO_RESULT_OK,
168 mp->WriteMessage(0, 159 mp->WriteMessage(0,
169 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 160 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
170 NULL, 161 NULL,
171 MOJO_WRITE_MESSAGE_FLAG_NONE)); 162 MOJO_WRITE_MESSAGE_FLAG_NONE));
172 163
173 // Close port 0. 164 // Close port 0.
174 mp->Close(0); 165 mp->Close(0);
175 166
176 // Try to write from port 1 (to port 0). 167 // Try to write from port 1 (to port 0).
177 buffer[0] = 456789012; 168 buffer[0] = 456789012;
178 buffer[1] = 0; 169 buffer[1] = 0;
179 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 170 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
180 mp->WriteMessage(1, 171 mp->WriteMessage(1,
181 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 172 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
182 NULL, 173 NULL,
183 MOJO_WRITE_MESSAGE_FLAG_NONE)); 174 MOJO_WRITE_MESSAGE_FLAG_NONE));
184 175
185 // Read from port 1; should still get message (even though port 0 was closed). 176 // Read from port 1; should still get message (even though port 0 was closed).
186 buffer[0] = 123; 177 buffer[0] = 123;
187 buffer[1] = 456; 178 buffer[1] = 456;
188 buffer_size = kBufferSize; 179 buffer_size = kBufferSize;
189 EXPECT_EQ(MOJO_RESULT_OK, 180 EXPECT_EQ(MOJO_RESULT_OK,
190 mp->ReadMessage(1, 181 mp->ReadMessage(1, UserPointer<void>(buffer),
191 buffer, &buffer_size, 182 MakeUserPointer(&buffer_size), 0, NULL,
192 0, NULL,
193 MOJO_READ_MESSAGE_FLAG_NONE)); 183 MOJO_READ_MESSAGE_FLAG_NONE));
194 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 184 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
195 EXPECT_EQ(345678901, buffer[0]); 185 EXPECT_EQ(345678901, buffer[0]);
196 EXPECT_EQ(456, buffer[1]); 186 EXPECT_EQ(456, buffer[1]);
197 187
198 // Read again from port 1 -- it should be empty (and port 0 is closed). 188 // Read again from port 1 -- it should be empty (and port 0 is closed).
199 buffer_size = kBufferSize; 189 buffer_size = kBufferSize;
200 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 190 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
201 mp->ReadMessage(1, 191 mp->ReadMessage(1, UserPointer<void>(buffer),
202 buffer, &buffer_size, 192 MakeUserPointer(&buffer_size), 0, NULL,
203 0, NULL,
204 MOJO_READ_MESSAGE_FLAG_NONE)); 193 MOJO_READ_MESSAGE_FLAG_NONE));
205 194
206 mp->Close(1); 195 mp->Close(1);
207 } 196 }
208 197
209 TEST(MessagePipeTest, CloseWithQueuedIncomingMessages) { 198 TEST(MessagePipeTest, CloseWithQueuedIncomingMessages) {
210 scoped_refptr<MessagePipe> mp(new MessagePipe()); 199 scoped_refptr<MessagePipe> mp(new MessagePipe());
211 200
212 int32_t buffer[1]; 201 int32_t buffer[1];
213 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); 202 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer));
214 uint32_t buffer_size; 203 uint32_t buffer_size;
215 204
216 // Write some messages from port 1 (to port 0). 205 // Write some messages from port 1 (to port 0).
217 for (int32_t i = 0; i < 5; i++) { 206 for (int32_t i = 0; i < 5; i++) {
218 buffer[0] = i; 207 buffer[0] = i;
219 EXPECT_EQ(MOJO_RESULT_OK, 208 EXPECT_EQ(MOJO_RESULT_OK,
220 mp->WriteMessage(1, 209 mp->WriteMessage(1,
221 buffer, kBufferSize, 210 buffer, kBufferSize,
222 NULL, 211 NULL,
223 MOJO_WRITE_MESSAGE_FLAG_NONE)); 212 MOJO_WRITE_MESSAGE_FLAG_NONE));
224 } 213 }
225 214
226 // Port 0 shouldn't be empty. 215 // Port 0 shouldn't be empty.
227 buffer_size = 0; 216 buffer_size = 0;
228 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 217 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
229 mp->ReadMessage(0, 218 mp->ReadMessage(0, NullUserPointer(), MakeUserPointer(&buffer_size),
230 NULL, &buffer_size,
231 0, NULL, 219 0, NULL,
232 MOJO_READ_MESSAGE_FLAG_NONE)); 220 MOJO_READ_MESSAGE_FLAG_NONE));
233 EXPECT_EQ(kBufferSize, buffer_size); 221 EXPECT_EQ(kBufferSize, buffer_size);
234 222
235 // Close port 0 first, which should have outstanding (incoming) messages. 223 // Close port 0 first, which should have outstanding (incoming) messages.
236 mp->Close(0); 224 mp->Close(0);
237 mp->Close(1); 225 mp->Close(1);
238 } 226 }
239 227
240 TEST(MessagePipeTest, DiscardMode) { 228 TEST(MessagePipeTest, DiscardMode) {
241 scoped_refptr<MessagePipe> mp(new MessagePipe()); 229 scoped_refptr<MessagePipe> mp(new MessagePipe());
242 230
243 int32_t buffer[2]; 231 int32_t buffer[2];
244 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); 232 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer));
245 uint32_t buffer_size; 233 uint32_t buffer_size;
246 234
247 // Write from port 1 (to port 0). 235 // Write from port 1 (to port 0).
248 buffer[0] = 789012345; 236 buffer[0] = 789012345;
249 buffer[1] = 0; 237 buffer[1] = 0;
250 EXPECT_EQ(MOJO_RESULT_OK, 238 EXPECT_EQ(MOJO_RESULT_OK,
251 mp->WriteMessage(1, 239 mp->WriteMessage(1,
252 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 240 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
253 NULL, 241 NULL,
254 MOJO_WRITE_MESSAGE_FLAG_NONE)); 242 MOJO_WRITE_MESSAGE_FLAG_NONE));
255 243
256 // Read/discard from port 0 (no buffer); get size. 244 // Read/discard from port 0 (no buffer); get size.
257 buffer_size = 0; 245 buffer_size = 0;
258 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 246 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
259 mp->ReadMessage(0, 247 mp->ReadMessage(0, NullUserPointer(), MakeUserPointer(&buffer_size),
260 NULL, &buffer_size,
261 0, NULL, 248 0, NULL,
262 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 249 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
263 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 250 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
264 251
265 // Read again from port 0 -- it should be empty. 252 // Read again from port 0 -- it should be empty.
266 buffer_size = kBufferSize; 253 buffer_size = kBufferSize;
267 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 254 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
268 mp->ReadMessage(0, 255 mp->ReadMessage(0, UserPointer<void>(buffer),
269 buffer, &buffer_size, 256 MakeUserPointer(&buffer_size), 0, NULL,
270 0, NULL,
271 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 257 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
272 258
273 // Write from port 1 (to port 0). 259 // Write from port 1 (to port 0).
274 buffer[0] = 890123456; 260 buffer[0] = 890123456;
275 buffer[1] = 0; 261 buffer[1] = 0;
276 EXPECT_EQ(MOJO_RESULT_OK, 262 EXPECT_EQ(MOJO_RESULT_OK,
277 mp->WriteMessage(1, 263 mp->WriteMessage(1,
278 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 264 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
279 NULL, 265 NULL,
280 MOJO_WRITE_MESSAGE_FLAG_NONE)); 266 MOJO_WRITE_MESSAGE_FLAG_NONE));
281 267
282 // Read from port 0 (buffer big enough). 268 // Read from port 0 (buffer big enough).
283 buffer[0] = 123; 269 buffer[0] = 123;
284 buffer[1] = 456; 270 buffer[1] = 456;
285 buffer_size = kBufferSize; 271 buffer_size = kBufferSize;
286 EXPECT_EQ(MOJO_RESULT_OK, 272 EXPECT_EQ(MOJO_RESULT_OK,
287 mp->ReadMessage(0, 273 mp->ReadMessage(0, UserPointer<void>(buffer),
288 buffer, &buffer_size, 274 MakeUserPointer(&buffer_size), 0, NULL,
289 0, NULL,
290 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 275 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
291 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 276 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
292 EXPECT_EQ(890123456, buffer[0]); 277 EXPECT_EQ(890123456, buffer[0]);
293 EXPECT_EQ(456, buffer[1]); 278 EXPECT_EQ(456, buffer[1]);
294 279
295 // Read again from port 0 -- it should be empty. 280 // Read again from port 0 -- it should be empty.
296 buffer_size = kBufferSize; 281 buffer_size = kBufferSize;
297 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 282 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
298 mp->ReadMessage(0, 283 mp->ReadMessage(0, UserPointer<void>(buffer),
299 buffer, &buffer_size, 284 MakeUserPointer(&buffer_size), 0, NULL,
300 0, NULL,
301 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 285 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
302 286
303 // Write from port 1 (to port 0). 287 // Write from port 1 (to port 0).
304 buffer[0] = 901234567; 288 buffer[0] = 901234567;
305 buffer[1] = 0; 289 buffer[1] = 0;
306 EXPECT_EQ(MOJO_RESULT_OK, 290 EXPECT_EQ(MOJO_RESULT_OK,
307 mp->WriteMessage(1, 291 mp->WriteMessage(1,
308 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 292 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
309 NULL, 293 NULL,
310 MOJO_WRITE_MESSAGE_FLAG_NONE)); 294 MOJO_WRITE_MESSAGE_FLAG_NONE));
311 295
312 // Read/discard from port 0 (buffer too small); get size. 296 // Read/discard from port 0 (buffer too small); get size.
313 buffer_size = 1; 297 buffer_size = 1;
314 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 298 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
315 mp->ReadMessage(0, 299 mp->ReadMessage(0, UserPointer<void>(buffer),
316 buffer, &buffer_size, 300 MakeUserPointer(&buffer_size), 0, NULL,
317 0, NULL,
318 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 301 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
319 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 302 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
320 303
321 // Read again from port 0 -- it should be empty. 304 // Read again from port 0 -- it should be empty.
322 buffer_size = kBufferSize; 305 buffer_size = kBufferSize;
323 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 306 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
324 mp->ReadMessage(0, 307 mp->ReadMessage(0, UserPointer<void>(buffer),
325 buffer, &buffer_size, 308 MakeUserPointer(&buffer_size), 0, NULL,
326 0, NULL,
327 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 309 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
328 310
329 // Write from port 1 (to port 0). 311 // Write from port 1 (to port 0).
330 buffer[0] = 123456789; 312 buffer[0] = 123456789;
331 buffer[1] = 0; 313 buffer[1] = 0;
332 EXPECT_EQ(MOJO_RESULT_OK, 314 EXPECT_EQ(MOJO_RESULT_OK,
333 mp->WriteMessage(1, 315 mp->WriteMessage(1,
334 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 316 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
335 NULL, 317 NULL,
336 MOJO_WRITE_MESSAGE_FLAG_NONE)); 318 MOJO_WRITE_MESSAGE_FLAG_NONE));
337 319
338 // Discard from port 0. 320 // Discard from port 0.
339 buffer_size = 1; 321 buffer_size = 1;
340 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 322 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
341 mp->ReadMessage(0, 323 mp->ReadMessage(0, NullUserPointer(), NullUserPointer(), 0, NULL,
342 NULL, NULL,
343 0, NULL,
344 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 324 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
345 325
346 // Read again from port 0 -- it should be empty. 326 // Read again from port 0 -- it should be empty.
347 buffer_size = kBufferSize; 327 buffer_size = kBufferSize;
348 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 328 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
349 mp->ReadMessage(0, 329 mp->ReadMessage(0, UserPointer<void>(buffer),
350 buffer, &buffer_size, 330 MakeUserPointer(&buffer_size), 0, NULL,
351 0, NULL,
352 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 331 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
353 332
354 mp->Close(0); 333 mp->Close(0);
355 mp->Close(1); 334 mp->Close(1);
356 } 335 }
357 336
358 TEST(MessagePipeTest, BasicWaiting) { 337 TEST(MessagePipeTest, BasicWaiting) {
359 scoped_refptr<MessagePipe> mp(new MessagePipe()); 338 scoped_refptr<MessagePipe> mp(new MessagePipe());
360 Waiter waiter; 339 Waiter waiter;
361 340
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 395
417 // But it should still be readable. 396 // But it should still be readable.
418 waiter.Init(); 397 waiter.Init();
419 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 398 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
420 mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 5)); 399 mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 5));
421 400
422 // Read from port 1. 401 // Read from port 1.
423 buffer[0] = 0; 402 buffer[0] = 0;
424 buffer_size = kBufferSize; 403 buffer_size = kBufferSize;
425 EXPECT_EQ(MOJO_RESULT_OK, 404 EXPECT_EQ(MOJO_RESULT_OK,
426 mp->ReadMessage(1, 405 mp->ReadMessage(1, UserPointer<void>(buffer),
427 buffer, &buffer_size, 406 MakeUserPointer(&buffer_size), 0, NULL,
428 0, NULL,
429 MOJO_READ_MESSAGE_FLAG_NONE)); 407 MOJO_READ_MESSAGE_FLAG_NONE));
430 EXPECT_EQ(123456789, buffer[0]); 408 EXPECT_EQ(123456789, buffer[0]);
431 409
432 // Now port 1 should no longer be readable. 410 // Now port 1 should no longer be readable.
433 waiter.Init(); 411 waiter.Init();
434 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 412 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
435 mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 6)); 413 mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 6));
436 414
437 mp->Close(1); 415 mp->Close(1);
438 } 416 }
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 mp->CancelAllWaiters(1); 494 mp->CancelAllWaiters(1);
517 mp->Close(1); 495 mp->Close(1);
518 } // Joins |thread|. 496 } // Joins |thread|.
519 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result); 497 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result);
520 EXPECT_EQ(3u, context); 498 EXPECT_EQ(3u, context);
521 } 499 }
522 500
523 } // namespace 501 } // namespace
524 } // namespace system 502 } // namespace system
525 } // namespace mojo 503 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/system/message_pipe_endpoint.cc ('k') | mojo/system/multiprocess_message_pipe_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698