From c6fb7003c2e7406699e8364bebbe339ba75345bc Mon Sep 17 00:00:00 2001 From: Weronika Lewandowska <weronika.lewandowska@intel.com> Date: Mon, 12 Oct 2020 14:25:41 +0200 Subject: [PATCH] test: add tests for pmem2_source_get_handle/fd --- src/test/pmem2_source/TESTS.py | 24 +++++++ src/test/pmem2_source/pmem2_source.c | 99 ++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+) diff --git a/src/test/pmem2_source/TESTS.py b/src/test/pmem2_source/TESTS.py index 1d6f972bc..d4308dd95 100755 --- a/src/test/pmem2_source/TESTS.py +++ b/src/test/pmem2_source/TESTS.py @@ -94,3 +94,27 @@ class TEST11(PMEM2_SOURCE): def run(self, ctx): ctx.exec('pmem2_source', self.test_case, ctx.testdir) + + +@t.windows_only +class TEST12(PMEM2_SOURCE): + """get handle from the source""" + test_case = "test_get_handle" + + +@t.windows_exclude +class TEST13(PMEM2_SOURCE): + """get file descriptor from the source""" + test_case = "test_get_fd" + + +@t.windows_only +class TEST14(PMEM2_SOURCE_NO_DIR): + """get handle from the invalid source type""" + test_case = "test_get_handle_inval_type" + + +@t.windows_exclude +class TEST15(PMEM2_SOURCE_NO_DIR): + """get file descriptor from the invalid source type""" + test_case = "test_get_fd_inval_type" diff --git a/src/test/pmem2_source/pmem2_source.c b/src/test/pmem2_source/pmem2_source.c index 6e1b836f0..cfc40b272 100644 --- a/src/test/pmem2_source/pmem2_source.c +++ b/src/test/pmem2_source/pmem2_source.c @@ -293,6 +293,54 @@ test_set_mutex_handle(const struct test_case *tc, int argc, char *argv[]) return 0; } + +/* + * test_get_handle - test getting handle value + */ +static int +test_get_handle(const struct test_case *tc, int argc, char *argv[]) +{ + if (argc < 1) + UT_FATAL("usage: test_get_handle <file>"); + + char *file = argv[0]; + HANDLE h = CreateFile(file, GENERIC_READ | GENERIC_WRITE, + 0, NULL, OPEN_ALWAYS, 0, NULL); + UT_ASSERTne(h, INVALID_HANDLE_VALUE); + + struct pmem2_source *src; + int ret = pmem2_source_from_handle(&src, h); + UT_PMEM2_EXPECT_RETURN(ret, 0); + + HANDLE handle_from_pmem2; + ret = pmem2_source_get_handle(src, &handle_from_pmem2); + UT_ASSERTeq(handle_from_pmem2, h); + UT_PMEM2_EXPECT_RETURN(ret, 0); + + CloseHandle(h); + pmem2_source_delete(&src); + + return 1; +} + +/* + * test_get_handle_inval_type - test getting handle value from invalid type + */ +static int +test_get_handle_inval_type(const struct test_case *tc, int argc, char *argv[]) +{ + struct pmem2_source *src; + int ret = pmem2_source_from_anon(&src, 0); + UT_PMEM2_EXPECT_RETURN(ret, 0); + + HANDLE handle_from_pmem2; + ret = pmem2_source_get_handle(src, &handle_from_pmem2); + UT_PMEM2_EXPECT_RETURN(ret, PMEM2_E_FILE_HANDLE_NOT_SET); + + pmem2_source_delete(&src); + + return 0; +} #else /* * test_set_directory_handle - test setting directory's fd @@ -315,6 +363,53 @@ test_set_directory_fd(const struct test_case *tc, int argc, char *argv[]) return 1; } + +/* + * test_get_fd - test getting file descriptor value + */ +static int +test_get_fd(const struct test_case *tc, int argc, char *argv[]) +{ + if (argc < 1) + UT_FATAL("usage: test_get_fd <file>"); + + char *file = argv[0]; + int fd = OPEN(file, O_RDONLY); + UT_ASSERTne(fd, -1); + + struct pmem2_source *src; + int ret = pmem2_source_from_fd(&src, fd); + UT_PMEM2_EXPECT_RETURN(ret, 0); + + int fd_from_pmem2; + ret = pmem2_source_get_fd(src, &fd_from_pmem2); + UT_ASSERTeq(fd_from_pmem2, fd); + UT_PMEM2_EXPECT_RETURN(ret, 0); + + CLOSE(fd); + pmem2_source_delete(&src); + + return 1; +} + +/* + * test_get_fd_inval_type - test getting fd value from invalid type + */ +static int +test_get_fd_inval_type(const struct test_case *tc, int argc, char *argv[]) +{ + struct pmem2_source *src; + int ret = pmem2_source_from_anon(&src, 0); + UT_PMEM2_EXPECT_RETURN(ret, 0); + + int fd_from_pmem2; + ret = pmem2_source_get_fd(src, &fd_from_pmem2); + UT_PMEM2_EXPECT_RETURN(ret, PMEM2_E_FILE_DESCRIPTOR_NOT_SET); + + pmem2_source_delete(&src); + + return 0; +} #endif /* @@ -333,8 +428,12 @@ static struct test_case test_cases[] = { TEST_CASE(test_set_invalid_handle), TEST_CASE(test_set_directory_handle), TEST_CASE(test_set_mutex_handle), + TEST_CASE(test_get_handle), + TEST_CASE(test_get_handle_inval_type), #else TEST_CASE(test_set_directory_fd), + TEST_CASE(test_get_fd), + TEST_CASE(test_get_fd_inval_type), #endif }; -- GitLab