tests: Move set(re)uid function to own test
authorAndreas Schneider <asn@samba.org>
Fri, 14 Aug 2015 06:11:58 +0000 (08:11 +0200)
committerAndreas Schneider <asn@samba.org>
Mon, 17 Aug 2015 08:44:21 +0000 (10:44 +0200)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
tests/CMakeLists.txt
tests/test_uid.c [new file with mode: 0644]
tests/testsuite.c

index 6e59940b2c24f4f4af252930a6eda8591c421028..aa6fd01670ee65d4a9bf9c7547ad12de3439e905 100644 (file)
@@ -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 (file)
index 0000000..68b3724
--- /dev/null
@@ -0,0 +1,134 @@
+#include "config.h"
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <pwd.h>
+
+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;
+}
index 332b73ffd4b4b248b91f079e0f260525cbb639ae..162e367afbaa1de73f2aecd411df006f90e6ccd4 100644 (file)
 #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),