From: Ackerley Tng <[email protected]>

Refactor hugepage-mmap.c to use the kselftest harness so that a later patch
can add a different setup flow.

Use a fixture for managing the hugetlbfs-backed memfd lifecycle (setup and
teardown).

Signed-off-by: Ackerley Tng <[email protected]>
---
 tools/testing/selftests/mm/hugepage-mmap.c | 67 ++++++++++++++++--------------
 1 file changed, 36 insertions(+), 31 deletions(-)

diff --git a/tools/testing/selftests/mm/hugepage-mmap.c 
b/tools/testing/selftests/mm/hugepage-mmap.c
index 64f7d28a97fdf..9c8a0638d04b8 100644
--- a/tools/testing/selftests/mm/hugepage-mmap.c
+++ b/tools/testing/selftests/mm/hugepage-mmap.c
@@ -15,49 +15,54 @@
 #include <unistd.h>
 #include <sys/mman.h>
 #include <fcntl.h>
-#include "kselftest.h"
+#include "kselftest_harness.h"
 
 #define LENGTH (256UL*1024*1024)
 #define PROTECTION (PROT_READ | PROT_WRITE)
 
-int main(void)
+FIXTURE(hugepage_mmap)
 {
-       void *addr;
-       int fd, ret = 0;
-       unsigned long i;
-
-       ksft_print_header();
-       ksft_set_plan(1);
+       int fd;
+       char *addr;
+};
 
-       fd = memfd_create("hugepage-mmap", MFD_HUGETLB);
-       if (fd < 0)
-               ksft_exit_fail_msg("memfd_create() failed: %s\n", 
strerror(errno));
+FIXTURE_SETUP(hugepage_mmap)
+{
+       self->fd = memfd_create("hugepage-mmap", MFD_HUGETLB);
+       ASSERT_GE(self->fd, 0) {
+               TH_LOG("memfd_create() failed: %s", strerror(errno));
+       }
 
-       addr = mmap(NULL, LENGTH, PROTECTION, MAP_SHARED, fd, 0);
-       if (addr == MAP_FAILED) {
-               close(fd);
-               ksft_exit_fail_msg("mmap(): %s\n", strerror(errno));
+       self->addr = mmap(NULL, LENGTH, PROTECTION, MAP_SHARED, self->fd, 0);
+       ASSERT_NE(MAP_FAILED, self->addr) {
+               TH_LOG("mmap(): %s", strerror(errno));
+               close(self->fd);
        }
+       TH_LOG("Returned address is %p", self->addr);
+}
 
-       ksft_print_msg("Returned address is %p\n", addr);
-       ksft_print_msg("First hex is %x\n", *((unsigned int *)addr));
+FIXTURE_TEARDOWN(hugepage_mmap)
+{
+       munmap(self->addr, LENGTH);
+       close(self->fd);
+}
 
-       for (i = 0; i < LENGTH; i++)
-               *(char *)(addr + i) = (char)i;
+TEST_F(hugepage_mmap, read_write)
+{
+       unsigned long i;
 
-       ksft_print_msg("First hex is %x\n", *((unsigned int *)addr));
-       for (i = 0; i < LENGTH; i++) {
-               if (*(char *)(addr + i) != (char)i) {
-                       ksft_print_msg("Error: Mismatch at %lu\n", i);
-                       ret = 1;
-                       break;
-               }
-       }
+       TH_LOG("First hex is %x", *((unsigned int *)self->addr));
 
-       munmap(addr, LENGTH);
-       close(fd);
+       for (i = 0; i < LENGTH; i++)
+               self->addr[i] = (char)i;
 
-       ksft_test_result(!ret, "Read same data\n");
+       TH_LOG("First hex is %x", *((unsigned int *)self->addr));
 
-       ksft_exit(!ret);
+       for (i = 0; i < LENGTH; i++) {
+               ASSERT_EQ(self->addr[i], (char)i) {
+                       TH_LOG("Error: Mismatch at %lu\n", i);
+               };
+       }
 }
+
+TEST_HARNESS_MAIN

-- 
2.54.0.563.g4f69b47b94-goog



Reply via email to