From cf86be4c1ff0c37b05ff85fa6d5c0560e75c050e Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Fri, 14 Aug 2015 08:11:58 +0200 Subject: [PATCH] tests: Move set(re)uid function to own test Signed-off-by: Andreas Schneider Reviewed-by: Stefan Metzmacher --- tests/CMakeLists.txt | 52 +++++++++++------ tests/test_uid.c | 134 +++++++++++++++++++++++++++++++++++++++++++ tests/testsuite.c | 116 +------------------------------------ 3 files changed, 168 insertions(+), 134 deletions(-) create mode 100644 tests/test_uid.c diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 6e59940..aa6fd01 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -6,45 +6,59 @@ include_directories( ${CMOCKA_INCLUDE_DIR} ) +set(PRELOAD_LIBS ${UID_WRAPPER_LOCATION}) + if (OSX) - set(TEST_ENVIRONMENT DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${UID_WRAPPER_LOCATION};UID_WRAPPER=1) + set(TEST_ENVIRONMENT DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${PRELOAD_LIBS};UID_WRAPPER=1) add_definitions(-DOSX) else () - set(TEST_ENVIRONMENT LD_PRELOAD=${UID_WRAPPER_LOCATION};UID_WRAPPER=1) + set(TEST_ENVIRONMENT LD_PRELOAD=${PRELOAD_LIBS}) endif () -add_cmocka_test(testsuite testsuite.c ${CMOCKA_LIBRARY}) -set_property( - TEST - testsuite - PROPERTY - ENVIRONMENT ${TEST_ENVIRONMENT}) +set(TESTSUITE_LIBRARIES ${UWRAP_REQUIRED_LIBRARIES} ${CMOCKA_LIBRARY}) +set(UWRAP_TESTS + testsuite + test_uid) + +foreach(_UWRAP_TEST ${UWRAP_TESTS}) + add_cmocka_test(${_UWRAP_TEST} ${_UWRAP_TEST}.c ${TESTSUITE_LIBRARIES}) + + set_property( + TEST + ${_UWRAP_TEST} + PROPERTY + ENVIRONMENT ${TEST_ENVIRONMENT};UID_WRAPPER=1) +endforeach() + +# helper library implementing uid_wrapper_enabled() add_library(uwrap_enabled SHARED uwrap_enabled.c) + add_cmocka_test(test_uwrap_enabled test_uwrap_enabled.c ${CMOCKA_LIBRARY} uwrap_enabled) set_property( TEST test_uwrap_enabled PROPERTY - ENVIRONMENT ${TEST_ENVIRONMENT}) + ENVIRONMENT ${TEST_ENVIRONMENT};UID_WRAPPER=1) -if (LINUX OR OSX) -add_cmocka_test(test_glibc_thread_support test_glibc_thread_support.c ${CMOCKA_LIBRARY}) -target_link_libraries(test_glibc_thread_support ${CMAKE_THREAD_LIBS_INIT}) +add_cmocka_test(test_uwrap_disabled test_uwrap_disabled.c ${CMOCKA_LIBRARY}) set_property( TEST - test_glibc_thread_support + test_uwrap_disabled PROPERTY ENVIRONMENT ${TEST_ENVIRONMENT}) + +if (LINUX OR OSX) + add_cmocka_test(test_glibc_thread_support test_glibc_thread_support.c ${CMOCKA_LIBRARY}) + target_link_libraries(test_glibc_thread_support ${CMAKE_THREAD_LIBS_INIT}) + set_property( + TEST + test_glibc_thread_support + PROPERTY + ENVIRONMENT ${TEST_ENVIRONMENT};UID_WRAPPER=1) endif(LINUX OR OSX) if (LINUX) add_executable(getuids getuids.c) endif (LINUX) -add_cmocka_test(test_uwrap_disabled test_uwrap_disabled.c ${CMOCKA_LIBRARY}) -set_property( - TEST - test_uwrap_disabled - PROPERTY - ENVIRONMENT LD_PRELOAD=${CMAKE_BINARY_DIR}/src/libuid_wrapper.so) diff --git a/tests/test_uid.c b/tests/test_uid.c new file mode 100644 index 0000000..68b3724 --- /dev/null +++ b/tests/test_uid.c @@ -0,0 +1,134 @@ +#include "config.h" + +#include +#include +#include +#include + +#include +#include + +#include + +static void test_uwrap_setuid(void **state) +{ + int rc; + uid_t u; + + (void) state; /* unused */ + + rc = setuid(-1); + assert_int_equal(rc, -1); + + rc = setuid(42); + assert_int_equal(rc, 0); + + u = getuid(); + assert_int_equal(u, 42); +} + +static void test_uwrap_seteuid(void **state) +{ + int rc; + uid_t u; + + (void) state; /* unused */ + + rc = seteuid(-1); + assert_int_equal(rc, -1); + + rc = seteuid(0); + assert_int_equal(rc, 0); + + u = geteuid(); + assert_int_equal(u, 0); + + rc = setuid(42); + assert_int_equal(rc, 0); + + u = getuid(); + assert_int_equal(u, 42); +} + +#ifdef HAVE_SETREUID +static void test_uwrap_setreuid(void **state) +{ + int rc; + uid_t u; + + (void) state; /* unused */ + + rc = setreuid(1, 2); + assert_int_equal(rc, 0); + + u = getuid(); + assert_int_equal(u, 1); + + u = geteuid(); + assert_int_equal(u, 2); +} +#endif + +#ifdef HAVE_SETRESUID +static void test_uwrap_setresuid(void **state) +{ + int rc; + uid_t u; + + (void) state; /* unused */ + + rc = setresuid(1, 2, -1); + assert_int_equal(rc, 0); + + u = getuid(); + assert_int_equal(u, 1); + + u = geteuid(); + assert_int_equal(u, 2); +} +#endif + +#ifdef HAVE_GETRESUID +static void test_uwrap_getresuid(void **state) +{ + int rc; + uid_t ru, eu, su; + + (void) state; /* unused */ + + rc = setresuid(1, 2, -1); + assert_int_equal(rc, 0); + + ru = getuid(); + assert_int_equal(ru, 1); + + eu = geteuid(); + assert_int_equal(eu, 2); + + rc = getresuid(&ru, &eu, &su); + assert_int_equal(ru, 1); + assert_int_equal(eu, 2); +} +#endif + +int main(void) { + int rc; + + const struct CMUnitTest uwrap_tests[] = { + cmocka_unit_test(test_uwrap_setuid), + cmocka_unit_test(test_uwrap_seteuid), +#ifdef HAVE_SETREUID + cmocka_unit_test(test_uwrap_setreuid), +#endif +#ifdef HAVE_SETRESUID + cmocka_unit_test(test_uwrap_setresuid), +#endif +#ifdef HAVE_GETRESUID + cmocka_unit_test(test_uwrap_getresuid), +#endif + }; + + rc = cmocka_run_group_tests(uwrap_tests, NULL, NULL); + + return rc; +} diff --git a/tests/testsuite.c b/tests/testsuite.c index 332b73f..162e367 100644 --- a/tests/testsuite.c +++ b/tests/testsuite.c @@ -27,109 +27,6 @@ #define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x)) #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) -static void test_uwrap_seteuid(void **state) -{ - int rc; - uid_t u; - - (void) state; /* unused */ - - rc = seteuid(-1); - assert_int_equal(rc, -1); - - rc = seteuid(0); - assert_int_equal(rc, 0); - - u = geteuid(); -#ifdef SYS_geteuid /* not available on Solaris */ - assert_int_equal(u, syscall(SYS_geteuid)); -#endif - - rc = setuid(42); - assert_int_equal(rc, 0); - - u = getuid(); - assert_int_equal(u, 42); -} - -#ifdef HAVE_SETREUID -static void test_uwrap_setreuid(void **state) -{ - int rc; - uid_t u; - - (void) state; /* unused */ - - rc = setreuid(1, 2); - assert_int_equal(rc, 0); - - u = getuid(); - assert_int_equal(u, 1); - - u = geteuid(); - assert_int_equal(u, 2); -} -#endif - -#ifdef HAVE_SETRESUID -static void test_uwrap_setresuid(void **state) -{ - int rc; - uid_t u; - - (void) state; /* unused */ - - rc = setresuid(1, 2, -1); - assert_int_equal(rc, 0); - - u = getuid(); - assert_int_equal(u, 1); - - u = geteuid(); - assert_int_equal(u, 2); -} -#endif - -#ifdef HAVE_GETRESUID -static void test_uwrap_getresuid(void **state) -{ - int rc; - uid_t ru, eu, su; - - (void) state; /* unused */ - - rc = setresuid(1, 2, -1); - assert_int_equal(rc, 0); - - ru = getuid(); - assert_int_equal(ru, 1); - - eu = geteuid(); - assert_int_equal(eu, 2); - - rc = getresuid(&ru, &eu, &su); - assert_int_equal(ru, 1); - assert_int_equal(eu, 2); -} -#endif - -static void test_uwrap_setuid(void **state) -{ - int rc; - uid_t u; - - (void) state; /* unused */ - - rc = setuid(-1); - assert_int_equal(rc, -1); - - rc = setuid(42); - assert_int_equal(rc, 0); - - u = getuid(); - assert_int_equal(u, 42); -} - static void test_uwrap_setegid(void **state) { int rc; @@ -278,7 +175,7 @@ static void test_uwrap_syscall_setresuid(void **state) (void) state; /* unused */ - rc = syscall(SYS_setresuid, -1, 0, -1); + rc = syscall(SYS_setresuid, 42, 0, -1); assert_int_equal(rc, 0); u = geteuid(); @@ -459,17 +356,6 @@ int main(void) { cmocka_unit_test(test_uwrap_syscall), cmocka_unit_test(test_uwrap_getgroups), - cmocka_unit_test(test_uwrap_seteuid), -#ifdef HAVE_SETREUID - cmocka_unit_test(test_uwrap_setreuid), -#endif -#ifdef HAVE_SETRESUID - cmocka_unit_test(test_uwrap_setresuid), -#endif -#ifdef HAVE_GETRESUID - cmocka_unit_test(test_uwrap_getresuid), -#endif - cmocka_unit_test(test_uwrap_setuid), cmocka_unit_test(test_uwrap_setegid), #ifdef HAVE_SETREGID cmocka_unit_test(test_uwrap_setregid), -- 2.34.1