Skip to content

Commit 38a0e79

Browse files
authored
Merge pull request #801 from vinser52/svinogra_ipc_tests
Add new IPC test: openInTwoPools
2 parents 673b844 + ded84af commit 38a0e79

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

test/ipcFixtures.hpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,59 @@ TEST_P(umfIpcTest, AllocFreeAllocTest) {
335335
EXPECT_EQ(stat.openCount, stat.closeCount);
336336
}
337337

338+
TEST_P(umfIpcTest, openInTwoPools) {
339+
constexpr size_t SIZE = 100;
340+
std::vector<int> expected_data(SIZE);
341+
umf::pool_unique_handle_t pool1 = makePool();
342+
umf::pool_unique_handle_t pool2 = makePool();
343+
void *ptr = umfPoolMalloc(pool1.get(), sizeof(expected_data[0]) * SIZE);
344+
EXPECT_NE(ptr, nullptr);
345+
346+
std::iota(expected_data.begin(), expected_data.end(), 0);
347+
memAccessor->copy(ptr, expected_data.data(), SIZE * sizeof(int));
348+
349+
umf_ipc_handle_t ipcHandle = nullptr;
350+
size_t handleSize = 0;
351+
umf_result_t ret = umfGetIPCHandle(ptr, &ipcHandle, &handleSize);
352+
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
353+
354+
void *openedPtr1 = nullptr;
355+
ret = umfOpenIPCHandle(pool1.get(), ipcHandle, &openedPtr1);
356+
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
357+
358+
void *openedPtr2 = nullptr;
359+
ret = umfOpenIPCHandle(pool2.get(), ipcHandle, &openedPtr2);
360+
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
361+
362+
ret = umfPutIPCHandle(ipcHandle);
363+
EXPECT_EQ(ret, UMF_RESULT_SUCCESS);
364+
365+
std::vector<int> actual_data(SIZE);
366+
memAccessor->copy(actual_data.data(), openedPtr1, SIZE * sizeof(int));
367+
ASSERT_TRUE(std::equal(expected_data.begin(), expected_data.end(),
368+
actual_data.begin()));
369+
370+
ret = umfCloseIPCHandle(openedPtr1);
371+
EXPECT_EQ(ret, UMF_RESULT_SUCCESS);
372+
373+
memAccessor->copy(actual_data.data(), openedPtr2, SIZE * sizeof(int));
374+
ASSERT_TRUE(std::equal(expected_data.begin(), expected_data.end(),
375+
actual_data.begin()));
376+
377+
ret = umfCloseIPCHandle(openedPtr2);
378+
EXPECT_EQ(ret, UMF_RESULT_SUCCESS);
379+
380+
ret = umfPoolFree(pool1.get(), ptr);
381+
EXPECT_EQ(ret, UMF_RESULT_SUCCESS);
382+
383+
pool1.reset(nullptr);
384+
pool2.reset(nullptr);
385+
EXPECT_EQ(stat.getCount, 1);
386+
EXPECT_EQ(stat.putCount, stat.getCount);
387+
EXPECT_EQ(stat.openCount, 2);
388+
EXPECT_EQ(stat.closeCount, stat.openCount);
389+
}
390+
338391
TEST_P(umfIpcTest, ConcurrentGetPutHandles) {
339392
std::vector<void *> ptrs;
340393
constexpr size_t ALLOC_SIZE = 100;

0 commit comments

Comments
 (0)