OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 // This file tests the C API, but using the explicit MojoSystemImpl parameter. | 5 // This file tests the C API, but using the explicit MojoSystemImpl parameter. |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include "mojo/public/c/system/core.h" | 9 #include "mojo/public/c/system/core.h" |
10 #include "mojo/public/platform/native/system_impl_private.h" | 10 #include "mojo/public/platform/native/system_impl_private.h" |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 | 255 |
256 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys1, hc)); | 256 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys1, hc)); |
257 | 257 |
258 // TODO(vtl): Test the other way around -- closing the consumer should make | 258 // TODO(vtl): Test the other way around -- closing the consumer should make |
259 // the producer never-writable? | 259 // the producer never-writable? |
260 | 260 |
261 // 2 SystemImpls are leaked... | 261 // 2 SystemImpls are leaked... |
262 } | 262 } |
263 | 263 |
264 TEST(SystemImplTest, BasicSharedBuffer) { | 264 TEST(SystemImplTest, BasicSharedBuffer) { |
| 265 const uint64_t kSize = 100u; |
| 266 |
265 MojoSystemImpl sys0 = MojoSystemImplCreateImpl(); | 267 MojoSystemImpl sys0 = MojoSystemImplCreateImpl(); |
266 MojoSystemImpl sys1 = MojoSystemImplCreateImpl(); | 268 MojoSystemImpl sys1 = MojoSystemImplCreateImpl(); |
267 EXPECT_NE(sys0, sys1); | 269 EXPECT_NE(sys0, sys1); |
268 | 270 |
269 MojoHandle h0, h1; | 271 MojoHandle h0, h1; |
270 void* pointer; | 272 void* pointer; |
271 | 273 |
272 // Create a shared buffer (|h0|). | 274 // Create a shared buffer (|h0|). |
273 h0 = MOJO_HANDLE_INVALID; | 275 h0 = MOJO_HANDLE_INVALID; |
274 EXPECT_EQ(MOJO_RESULT_OK, | 276 EXPECT_EQ(MOJO_RESULT_OK, |
275 MojoSystemImplCreateSharedBuffer(sys0, nullptr, 100, &h0)); | 277 MojoSystemImplCreateSharedBuffer(sys0, nullptr, kSize, &h0)); |
276 EXPECT_NE(h0, MOJO_HANDLE_INVALID); | 278 EXPECT_NE(h0, MOJO_HANDLE_INVALID); |
277 | 279 |
| 280 // Check the buffer information. |
| 281 { |
| 282 MojoBufferInformation info = {}; |
| 283 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetBufferInformation( |
| 284 sys0, h0, &info, sizeof(info))); |
| 285 EXPECT_EQ(sizeof(info), info.struct_size); |
| 286 EXPECT_EQ(MOJO_BUFFER_INFORMATION_FLAG_NONE, info.flags); |
| 287 EXPECT_EQ(kSize, info.num_bytes); |
| 288 } |
| 289 |
278 // Map everything. | 290 // Map everything. |
279 pointer = nullptr; | 291 pointer = nullptr; |
280 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplMapBuffer(sys0, h0, 0, 100, &pointer, | 292 EXPECT_EQ(MOJO_RESULT_OK, |
281 MOJO_MAP_BUFFER_FLAG_NONE)); | 293 MojoSystemImplMapBuffer(sys0, h0, 0u, kSize, &pointer, |
| 294 MOJO_MAP_BUFFER_FLAG_NONE)); |
282 ASSERT_TRUE(pointer); | 295 ASSERT_TRUE(pointer); |
283 static_cast<char*>(pointer)[50] = 'x'; | 296 static_cast<char*>(pointer)[kSize / 2] = 'x'; |
284 | 297 |
285 // Duplicate |h0| to |h1|. | 298 // Duplicate |h0| to |h1|. |
286 h1 = MOJO_HANDLE_INVALID; | 299 h1 = MOJO_HANDLE_INVALID; |
287 EXPECT_EQ(MOJO_RESULT_OK, | 300 EXPECT_EQ(MOJO_RESULT_OK, |
288 MojoSystemImplDuplicateBufferHandle(sys0, h0, nullptr, &h1)); | 301 MojoSystemImplDuplicateBufferHandle(sys0, h0, nullptr, &h1)); |
289 EXPECT_NE(h1, MOJO_HANDLE_INVALID); | 302 EXPECT_NE(h1, MOJO_HANDLE_INVALID); |
290 | 303 |
291 // Move the other end of the pipe to a different SystemImpl. | 304 // Move the other end of the pipe to a different SystemImpl. |
292 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, h1, sys1, &h1)); | 305 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, h1, sys1, &h1)); |
293 EXPECT_NE(h1, MOJO_HANDLE_INVALID); | 306 EXPECT_NE(h1, MOJO_HANDLE_INVALID); |
294 | 307 |
295 // Close |h0|. | 308 // Close |h0|. |
296 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys0, h0)); | 309 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys0, h0)); |
297 | 310 |
298 // The mapping should still be good. | 311 // The mapping should still be good. |
299 static_cast<char*>(pointer)[51] = 'y'; | 312 static_cast<char*>(pointer)[kSize / 2 + 1] = 'y'; |
300 | 313 |
301 // Unmap it. | 314 // Unmap it. |
302 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplUnmapBuffer(sys0, pointer)); | 315 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplUnmapBuffer(sys0, pointer)); |
303 | 316 |
| 317 // Check the buffer information on |h1|. |
| 318 { |
| 319 MojoBufferInformation info = {}; |
| 320 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetBufferInformation( |
| 321 sys1, h1, &info, sizeof(info))); |
| 322 EXPECT_EQ(sizeof(info), info.struct_size); |
| 323 EXPECT_EQ(MOJO_BUFFER_INFORMATION_FLAG_NONE, info.flags); |
| 324 EXPECT_EQ(kSize, info.num_bytes); |
| 325 } |
| 326 |
304 // Map half of |h1|. | 327 // Map half of |h1|. |
305 pointer = nullptr; | 328 pointer = nullptr; |
306 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplMapBuffer(sys1, h1, 50, 50, &pointer, | 329 EXPECT_EQ(MOJO_RESULT_OK, |
307 MOJO_MAP_BUFFER_FLAG_NONE)); | 330 MojoSystemImplMapBuffer(sys1, h1, kSize / 2, kSize / 2, &pointer, |
| 331 MOJO_MAP_BUFFER_FLAG_NONE)); |
308 ASSERT_TRUE(pointer); | 332 ASSERT_TRUE(pointer); |
309 | 333 |
310 // It should have what we wrote. | 334 // It should have what we wrote. |
311 EXPECT_EQ('x', static_cast<char*>(pointer)[0]); | 335 EXPECT_EQ('x', static_cast<char*>(pointer)[0]); |
312 EXPECT_EQ('y', static_cast<char*>(pointer)[1]); | 336 EXPECT_EQ('y', static_cast<char*>(pointer)[1]); |
313 | 337 |
314 // Unmap it. | 338 // Unmap it. |
315 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplUnmapBuffer(sys1, pointer)); | 339 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplUnmapBuffer(sys1, pointer)); |
316 | 340 |
317 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys1, h1)); | 341 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys1, h1)); |
318 | 342 |
319 // 2 SystemImpls are leaked... | 343 // 2 SystemImpls are leaked... |
320 } | 344 } |
321 | 345 |
322 } // namespace | 346 } // namespace |
323 } // namespace mojo | 347 } // namespace mojo |
OLD | NEW |