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

