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 #include "mojo/public/system/core_cpp.h" | 5 #include "mojo/public/system/core_cpp.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 | 8 |
9 #include "mojo/public/system/macros.h" | 9 #include "mojo/public/system/macros.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 | 82 |
83 EXPECT_EQ(kInvalidHandleValue, h.get().value()); | 83 EXPECT_EQ(kInvalidHandleValue, h.get().value()); |
84 | 84 |
85 // This should be a no-op. | 85 // This should be a no-op. |
86 Close(h.Pass()); | 86 Close(h.Pass()); |
87 | 87 |
88 // It should still be invalid. | 88 // It should still be invalid. |
89 EXPECT_EQ(kInvalidHandleValue, h.get().value()); | 89 EXPECT_EQ(kInvalidHandleValue, h.get().value()); |
90 | 90 |
91 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 91 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
92 Wait(h, MOJO_WAIT_FLAG_EVERYTHING, 1000000)); | 92 Wait(h.get(), MOJO_WAIT_FLAG_EVERYTHING, 1000000)); |
93 | 93 |
94 std::vector<Handle> wh; | 94 std::vector<Handle> wh; |
95 wh.push_back(h); | 95 wh.push_back(h.get()); |
96 std::vector<MojoWaitFlags> wf; | 96 std::vector<MojoWaitFlags> wf; |
97 wf.push_back(MOJO_WAIT_FLAG_EVERYTHING); | 97 wf.push_back(MOJO_WAIT_FLAG_EVERYTHING); |
98 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 98 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
99 WaitMany(wh, wf, MOJO_DEADLINE_INDEFINITE)); | 99 WaitMany(wh, wf, MOJO_DEADLINE_INDEFINITE)); |
100 } | 100 } |
101 | 101 |
102 // |MessagePipeHandle|/|ScopedMessagePipeHandle| functions: | 102 // |MessagePipeHandle|/|ScopedMessagePipeHandle| functions: |
103 { | 103 { |
104 MessagePipeHandle h_invalid; | 104 MessagePipeHandle h_invalid; |
105 EXPECT_FALSE(h_invalid.is_valid()); | 105 EXPECT_FALSE(h_invalid.is_valid()); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 CreateMessagePipe(&h_0, &h_1); | 137 CreateMessagePipe(&h_0, &h_1); |
138 EXPECT_TRUE(h_0.get().is_valid()); | 138 EXPECT_TRUE(h_0.get().is_valid()); |
139 EXPECT_TRUE(h_1.get().is_valid()); | 139 EXPECT_TRUE(h_1.get().is_valid()); |
140 EXPECT_NE(h_0.get().value(), h_1.get().value()); | 140 EXPECT_NE(h_0.get().value(), h_1.get().value()); |
141 // Save the handle values, so we can check that things got closed | 141 // Save the handle values, so we can check that things got closed |
142 // correctly. | 142 // correctly. |
143 hv_0 = h_0.get().value(); | 143 hv_0 = h_0.get().value(); |
144 MojoHandle hv_1 = h_1.get().value(); | 144 MojoHandle hv_1 = h_1.get().value(); |
145 | 145 |
146 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, | 146 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
147 Wait(h_0, MOJO_WAIT_FLAG_READABLE, 0)); | 147 Wait(h_0.get(), MOJO_WAIT_FLAG_READABLE, 0)); |
148 std::vector<Handle> wh; | 148 std::vector<Handle> wh; |
149 wh.push_back(h_0); | 149 wh.push_back(h_0.get()); |
150 wh.push_back(h_1); | 150 wh.push_back(h_1.get()); |
151 std::vector<MojoWaitFlags> wf; | 151 std::vector<MojoWaitFlags> wf; |
152 wf.push_back(MOJO_WAIT_FLAG_READABLE); | 152 wf.push_back(MOJO_WAIT_FLAG_READABLE); |
153 wf.push_back(MOJO_WAIT_FLAG_WRITABLE); | 153 wf.push_back(MOJO_WAIT_FLAG_WRITABLE); |
154 EXPECT_EQ(1, WaitMany(wh, wf, 1000)); | 154 EXPECT_EQ(1, WaitMany(wh, wf, 1000)); |
155 | 155 |
156 // Test closing |h_1| explicitly. | 156 // Test closing |h_1| explicitly. |
157 Close(h_1.Pass()); | 157 Close(h_1.Pass()); |
158 EXPECT_FALSE(h_1.get().is_valid()); | 158 EXPECT_FALSE(h_1.get().is_valid()); |
159 | 159 |
160 // Make sure |h_1| is closed. | 160 // Make sure |h_1| is closed. |
161 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 161 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
162 MojoWait(hv_1, | 162 MojoWait(hv_1, |
163 MOJO_WAIT_FLAG_EVERYTHING, | 163 MOJO_WAIT_FLAG_EVERYTHING, |
164 MOJO_DEADLINE_INDEFINITE)); | 164 MOJO_DEADLINE_INDEFINITE)); |
165 | 165 |
166 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 166 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
167 Wait(h_0, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 167 Wait(h_0.get(), MOJO_WAIT_FLAG_READABLE, |
| 168 MOJO_DEADLINE_INDEFINITE)); |
168 } | 169 } |
169 // |hv_0| should have been closed when |h_0| went out of scope, so this | 170 // |hv_0| should have been closed when |h_0| went out of scope, so this |
170 // close should fail. | 171 // close should fail. |
171 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(hv_0)); | 172 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(hv_0)); |
172 | 173 |
173 // Actually test writing/reading messages. | 174 // Actually test writing/reading messages. |
174 { | 175 { |
175 ScopedMessagePipeHandle h_0; | 176 ScopedMessagePipeHandle h_0; |
176 ScopedMessagePipeHandle h_1; | 177 ScopedMessagePipeHandle h_1; |
177 CreateMessagePipe(&h_0, &h_1); | 178 CreateMessagePipe(&h_0, &h_1); |
178 | 179 |
179 const char kHello[] = "hello"; | 180 const char kHello[] = "hello"; |
180 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello)); | 181 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello)); |
181 EXPECT_EQ(MOJO_RESULT_OK, | 182 EXPECT_EQ(MOJO_RESULT_OK, |
182 WriteMessageRaw(h_0, | 183 WriteMessageRaw(h_0.get(), |
183 kHello, kHelloSize, | 184 kHello, kHelloSize, |
184 NULL, 0, | 185 NULL, 0, |
185 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 186 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
186 EXPECT_EQ(MOJO_RESULT_OK, | 187 EXPECT_EQ(MOJO_RESULT_OK, |
187 Wait(h_1, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 188 Wait(h_1.get(), MOJO_WAIT_FLAG_READABLE, |
| 189 MOJO_DEADLINE_INDEFINITE)); |
188 char buffer[10] = { 0 }; | 190 char buffer[10] = { 0 }; |
189 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 191 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
190 EXPECT_EQ(MOJO_RESULT_OK, | 192 EXPECT_EQ(MOJO_RESULT_OK, |
191 ReadMessageRaw(h_1, | 193 ReadMessageRaw(h_1.get(), |
192 buffer, &buffer_size, | 194 buffer, &buffer_size, |
193 NULL, NULL, | 195 NULL, NULL, |
194 MOJO_READ_MESSAGE_FLAG_NONE)); | 196 MOJO_READ_MESSAGE_FLAG_NONE)); |
195 EXPECT_EQ(kHelloSize, buffer_size); | 197 EXPECT_EQ(kHelloSize, buffer_size); |
196 EXPECT_STREQ(kHello, buffer); | 198 EXPECT_STREQ(kHello, buffer); |
197 | 199 |
198 // Send a handle over the previously-establish |MessagePipe|. | 200 // Send a handle over the previously-establish |MessagePipe|. |
199 ScopedMessagePipeHandle h_2; | 201 ScopedMessagePipeHandle h_2; |
200 ScopedMessagePipeHandle h_3; | 202 ScopedMessagePipeHandle h_3; |
201 CreateMessagePipe(&h_2, &h_3); | 203 CreateMessagePipe(&h_2, &h_3); |
202 | 204 |
203 // Write a message to |h_2|, before we send |h_3|. | 205 // Write a message to |h_2|, before we send |h_3|. |
204 const char kWorld[] = "world!"; | 206 const char kWorld[] = "world!"; |
205 const uint32_t kWorldSize = static_cast<uint32_t>(sizeof(kWorld)); | 207 const uint32_t kWorldSize = static_cast<uint32_t>(sizeof(kWorld)); |
206 EXPECT_EQ(MOJO_RESULT_OK, | 208 EXPECT_EQ(MOJO_RESULT_OK, |
207 WriteMessageRaw(h_2, | 209 WriteMessageRaw(h_2.get(), |
208 kWorld, kWorldSize, | 210 kWorld, kWorldSize, |
209 NULL, 0, | 211 NULL, 0, |
210 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 212 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
211 | 213 |
212 // Send |h_3| over |h_1| to |h_0|. | 214 // Send |h_3| over |h_1| to |h_0|. |
213 MojoHandle handles[5]; | 215 MojoHandle handles[5]; |
214 handles[0] = h_3.release().value(); | 216 handles[0] = h_3.release().value(); |
215 EXPECT_NE(kInvalidHandleValue, handles[0]); | 217 EXPECT_NE(kInvalidHandleValue, handles[0]); |
216 EXPECT_FALSE(h_3.get().is_valid()); | 218 EXPECT_FALSE(h_3.get().is_valid()); |
217 uint32_t handles_count = 1; | 219 uint32_t handles_count = 1; |
218 EXPECT_EQ(MOJO_RESULT_OK, | 220 EXPECT_EQ(MOJO_RESULT_OK, |
219 WriteMessageRaw(h_1, | 221 WriteMessageRaw(h_1.get(), |
220 kHello, kHelloSize, | 222 kHello, kHelloSize, |
221 handles, handles_count, | 223 handles, handles_count, |
222 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 224 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
223 // |handles[0]| should actually be invalid now. | 225 // |handles[0]| should actually be invalid now. |
224 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(handles[0])); | 226 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(handles[0])); |
225 | 227 |
226 // Read "hello" and the sent handle. | 228 // Read "hello" and the sent handle. |
227 EXPECT_EQ(MOJO_RESULT_OK, | 229 EXPECT_EQ(MOJO_RESULT_OK, |
228 Wait(h_0, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 230 Wait(h_0.get(), MOJO_WAIT_FLAG_READABLE, |
| 231 MOJO_DEADLINE_INDEFINITE)); |
229 memset(buffer, 0, sizeof(buffer)); | 232 memset(buffer, 0, sizeof(buffer)); |
230 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 233 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
231 for (size_t i = 0; i < MOJO_ARRAYSIZE(handles); i++) | 234 for (size_t i = 0; i < MOJO_ARRAYSIZE(handles); i++) |
232 handles[i] = kInvalidHandleValue; | 235 handles[i] = kInvalidHandleValue; |
233 handles_count = static_cast<uint32_t>(MOJO_ARRAYSIZE(handles)); | 236 handles_count = static_cast<uint32_t>(MOJO_ARRAYSIZE(handles)); |
234 EXPECT_EQ(MOJO_RESULT_OK, | 237 EXPECT_EQ(MOJO_RESULT_OK, |
235 ReadMessageRaw(h_0, | 238 ReadMessageRaw(h_0.get(), |
236 buffer, &buffer_size, | 239 buffer, &buffer_size, |
237 handles, &handles_count, | 240 handles, &handles_count, |
238 MOJO_READ_MESSAGE_FLAG_NONE)); | 241 MOJO_READ_MESSAGE_FLAG_NONE)); |
239 EXPECT_EQ(kHelloSize, buffer_size); | 242 EXPECT_EQ(kHelloSize, buffer_size); |
240 EXPECT_STREQ(kHello, buffer); | 243 EXPECT_STREQ(kHello, buffer); |
241 EXPECT_EQ(1u, handles_count); | 244 EXPECT_EQ(1u, handles_count); |
242 EXPECT_NE(kInvalidHandleValue, handles[0]); | 245 EXPECT_NE(kInvalidHandleValue, handles[0]); |
243 | 246 |
244 // Read from the sent/received handle. | 247 // Read from the sent/received handle. |
245 h_3.reset(MessagePipeHandle(handles[0])); | 248 h_3.reset(MessagePipeHandle(handles[0])); |
246 // Save |handles[0]| to check that it gets properly closed. | 249 // Save |handles[0]| to check that it gets properly closed. |
247 hv_0 = handles[0]; | 250 hv_0 = handles[0]; |
248 EXPECT_EQ(MOJO_RESULT_OK, | 251 EXPECT_EQ(MOJO_RESULT_OK, |
249 Wait(h_3, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 252 Wait(h_3.get(), MOJO_WAIT_FLAG_READABLE, |
| 253 MOJO_DEADLINE_INDEFINITE)); |
250 memset(buffer, 0, sizeof(buffer)); | 254 memset(buffer, 0, sizeof(buffer)); |
251 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 255 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
252 for (size_t i = 0; i < MOJO_ARRAYSIZE(handles); i++) | 256 for (size_t i = 0; i < MOJO_ARRAYSIZE(handles); i++) |
253 handles[i] = kInvalidHandleValue; | 257 handles[i] = kInvalidHandleValue; |
254 handles_count = static_cast<uint32_t>(MOJO_ARRAYSIZE(handles)); | 258 handles_count = static_cast<uint32_t>(MOJO_ARRAYSIZE(handles)); |
255 EXPECT_EQ(MOJO_RESULT_OK, | 259 EXPECT_EQ(MOJO_RESULT_OK, |
256 ReadMessageRaw(h_3, | 260 ReadMessageRaw(h_3.get(), |
257 buffer, &buffer_size, | 261 buffer, &buffer_size, |
258 handles, &handles_count, | 262 handles, &handles_count, |
259 MOJO_READ_MESSAGE_FLAG_NONE)); | 263 MOJO_READ_MESSAGE_FLAG_NONE)); |
260 EXPECT_EQ(kWorldSize, buffer_size); | 264 EXPECT_EQ(kWorldSize, buffer_size); |
261 EXPECT_STREQ(kWorld, buffer); | 265 EXPECT_STREQ(kWorld, buffer); |
262 EXPECT_EQ(0u, handles_count); | 266 EXPECT_EQ(0u, handles_count); |
263 } | 267 } |
264 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(hv_0)); | 268 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(hv_0)); |
265 } | 269 } |
266 | 270 |
(...skipping 11 matching lines...) Expand all Loading... |
278 | 282 |
279 // Send a handle over the previously-establish |MessagePipe|. | 283 // Send a handle over the previously-establish |MessagePipe|. |
280 ScopedMessagePipeHandle h_2; | 284 ScopedMessagePipeHandle h_2; |
281 ScopedMessagePipeHandle h_3; | 285 ScopedMessagePipeHandle h_3; |
282 CreateMessagePipe(&h_2, &h_3); | 286 CreateMessagePipe(&h_2, &h_3); |
283 | 287 |
284 // Write a message to |h_2|, before we send |h_3|. | 288 // Write a message to |h_2|, before we send |h_3|. |
285 const char kWorld[] = "world!"; | 289 const char kWorld[] = "world!"; |
286 const uint32_t kWorldSize = static_cast<uint32_t>(sizeof(kWorld)); | 290 const uint32_t kWorldSize = static_cast<uint32_t>(sizeof(kWorld)); |
287 EXPECT_EQ(MOJO_RESULT_OK, | 291 EXPECT_EQ(MOJO_RESULT_OK, |
288 WriteMessageRaw(h_2, | 292 WriteMessageRaw(h_2.get(), |
289 kWorld, kWorldSize, | 293 kWorld, kWorldSize, |
290 NULL, 0, | 294 NULL, 0, |
291 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 295 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
292 // And also a message to |h_3|. | 296 // And also a message to |h_3|. |
293 EXPECT_EQ(MOJO_RESULT_OK, | 297 EXPECT_EQ(MOJO_RESULT_OK, |
294 WriteMessageRaw(h_3, | 298 WriteMessageRaw(h_3.get(), |
295 kWorld, kWorldSize, | 299 kWorld, kWorldSize, |
296 NULL, 0, | 300 NULL, 0, |
297 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 301 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
298 | 302 |
299 // Send |h_3| over |h_1| to |h_0|. | 303 // Send |h_3| over |h_1| to |h_0|. |
300 const char kHello[] = "hello"; | 304 const char kHello[] = "hello"; |
301 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello)); | 305 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello)); |
302 MojoHandle h_3_value; | 306 MojoHandle h_3_value; |
303 h_3_value = h_3.release().value(); | 307 h_3_value = h_3.release().value(); |
304 EXPECT_NE(kInvalidHandleValue, h_3_value); | 308 EXPECT_NE(kInvalidHandleValue, h_3_value); |
305 EXPECT_FALSE(h_3.get().is_valid()); | 309 EXPECT_FALSE(h_3.get().is_valid()); |
306 EXPECT_EQ(MOJO_RESULT_OK, | 310 EXPECT_EQ(MOJO_RESULT_OK, |
307 WriteMessageRaw(h_1, | 311 WriteMessageRaw(h_1.get(), |
308 kHello, kHelloSize, | 312 kHello, kHelloSize, |
309 &h_3_value, 1, | 313 &h_3_value, 1, |
310 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 314 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
311 // |h_3_value| should actually be invalid now. | 315 // |h_3_value| should actually be invalid now. |
312 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(h_3_value)); | 316 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(h_3_value)); |
313 | 317 |
314 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h_0.release().value())); | 318 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h_0.release().value())); |
315 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h_1.release().value())); | 319 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h_1.release().value())); |
316 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h_2.release().value())); | 320 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h_2.release().value())); |
317 } | 321 } |
318 | 322 |
319 // Do this in a different order: make the enqueued |MessagePipe| handle only | 323 // Do this in a different order: make the enqueued |MessagePipe| handle only |
320 // half-alive. | 324 // half-alive. |
321 { | 325 { |
322 ScopedMessagePipeHandle h_0; | 326 ScopedMessagePipeHandle h_0; |
323 ScopedMessagePipeHandle h_1; | 327 ScopedMessagePipeHandle h_1; |
324 CreateMessagePipe(&h_0, &h_1); | 328 CreateMessagePipe(&h_0, &h_1); |
325 | 329 |
326 // Send a handle over the previously-establish |MessagePipe|. | 330 // Send a handle over the previously-establish |MessagePipe|. |
327 ScopedMessagePipeHandle h_2; | 331 ScopedMessagePipeHandle h_2; |
328 ScopedMessagePipeHandle h_3; | 332 ScopedMessagePipeHandle h_3; |
329 CreateMessagePipe(&h_2, &h_3); | 333 CreateMessagePipe(&h_2, &h_3); |
330 | 334 |
331 // Write a message to |h_2|, before we send |h_3|. | 335 // Write a message to |h_2|, before we send |h_3|. |
332 const char kWorld[] = "world!"; | 336 const char kWorld[] = "world!"; |
333 const uint32_t kWorldSize = static_cast<uint32_t>(sizeof(kWorld)); | 337 const uint32_t kWorldSize = static_cast<uint32_t>(sizeof(kWorld)); |
334 EXPECT_EQ(MOJO_RESULT_OK, | 338 EXPECT_EQ(MOJO_RESULT_OK, |
335 WriteMessageRaw(h_2, | 339 WriteMessageRaw(h_2.get(), |
336 kWorld, kWorldSize, | 340 kWorld, kWorldSize, |
337 NULL, 0, | 341 NULL, 0, |
338 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 342 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
339 // And also a message to |h_3|. | 343 // And also a message to |h_3|. |
340 EXPECT_EQ(MOJO_RESULT_OK, | 344 EXPECT_EQ(MOJO_RESULT_OK, |
341 WriteMessageRaw(h_3, | 345 WriteMessageRaw(h_3.get(), |
342 kWorld, kWorldSize, | 346 kWorld, kWorldSize, |
343 NULL, 0, | 347 NULL, 0, |
344 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 348 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
345 | 349 |
346 // Send |h_3| over |h_1| to |h_0|. | 350 // Send |h_3| over |h_1| to |h_0|. |
347 const char kHello[] = "hello"; | 351 const char kHello[] = "hello"; |
348 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello)); | 352 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello)); |
349 MojoHandle h_3_value; | 353 MojoHandle h_3_value; |
350 h_3_value = h_3.release().value(); | 354 h_3_value = h_3.release().value(); |
351 EXPECT_NE(kInvalidHandleValue, h_3_value); | 355 EXPECT_NE(kInvalidHandleValue, h_3_value); |
352 EXPECT_FALSE(h_3.get().is_valid()); | 356 EXPECT_FALSE(h_3.get().is_valid()); |
353 EXPECT_EQ(MOJO_RESULT_OK, | 357 EXPECT_EQ(MOJO_RESULT_OK, |
354 WriteMessageRaw(h_1, | 358 WriteMessageRaw(h_1.get(), |
355 kHello, kHelloSize, | 359 kHello, kHelloSize, |
356 &h_3_value, 1, | 360 &h_3_value, 1, |
357 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 361 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
358 // |h_3_value| should actually be invalid now. | 362 // |h_3_value| should actually be invalid now. |
359 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(h_3_value)); | 363 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(h_3_value)); |
360 | 364 |
361 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h_2.release().value())); | 365 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h_2.release().value())); |
362 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h_0.release().value())); | 366 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h_0.release().value())); |
363 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h_1.release().value())); | 367 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h_1.release().value())); |
364 } | 368 } |
365 } | 369 } |
366 | 370 |
367 } // namespace | 371 } // namespace |
368 } // namespace mojo | 372 } // namespace mojo |
OLD | NEW |