Just a happy path test. Signed-off-by: Dorjoy Chowdhury --- .../testing/selftests/openat2/openat2_test.c | 46 ++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/openat2/openat2_test.c b/tools/testing/selftests/openat2/openat2_test.c index 0e161ef9e9e4..238de9cff291 100644 --- a/tools/testing/selftests/openat2/openat2_test.c +++ b/tools/testing/selftests/openat2/openat2_test.c @@ -320,8 +320,51 @@ void test_openat2_flags(void) } } +#ifndef OPENAT2_REGULAR +#define OPENAT2_REGULAR 040000000 +#endif + +#ifndef EFTYPE +#define EFTYPE 134 +#endif + +void test_openat2_regular_flag(void) +{ + if (!openat2_supported) { + ksft_test_result_skip("Skipping %s as openat2 is not supported\n", __func__); + return; + } + + struct open_how how = { + .flags = OPENAT2_REGULAR | O_RDONLY + }; + + int fd = sys_openat2(AT_FDCWD, "/dev/null", &how); + + if (fd == -ENOENT) { + ksft_test_result_skip("Skipping %s as there is no /dev/null\n", __func__); + return; + } + + if (fd != -EFTYPE) { + ksft_test_result_fail("openat2 should return EFTYPE\n"); + return; + } + + how.flags = OPENAT2_REGULAR | O_DIRECTORY | O_RDONLY; + + fd = sys_openat2(AT_FDCWD, "/dev", &how); + + if (fd < 0) { + ksft_test_result_fail("openat2 should open directory with both O_DIRECTORY and OPENAT2_REGULAR\n"); + return; + } + + ksft_test_result_pass("%s succeeded\n", __func__); +} + #define NUM_TESTS (NUM_OPENAT2_STRUCT_VARIATIONS * NUM_OPENAT2_STRUCT_TESTS + \ - NUM_OPENAT2_FLAG_TESTS) + NUM_OPENAT2_FLAG_TESTS + 1) int main(int argc, char **argv) { @@ -330,6 +373,7 @@ int main(int argc, char **argv) test_openat2_struct(); test_openat2_flags(); + test_openat2_regular_flag(); if (ksft_get_fail_cnt() + ksft_get_error_cnt() > 0) ksft_exit_fail(); -- 2.53.0