cmake: Support running the tests with AddressSanitizer
authorAndreas Schneider <asn@samba.org>
Fri, 31 Jan 2020 12:32:46 +0000 (13:32 +0100)
committerAndreas Schneider <asn@samba.org>
Fri, 31 Jan 2020 13:17:09 +0000 (14:17 +0100)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
tests/CMakeLists.txt

index e40341da5196fee9be3c138b1deab8c8ce49a1cc..494e511358a6180ba92c83b096c6ec77dce4b522 100644 (file)
@@ -22,12 +22,46 @@ configure_file(services/matrix_py.in ${CMAKE_CURRENT_BINARY_DIR}/services/matrix
 
 configure_file(services/pwrap_get_set.in ${CMAKE_CURRENT_BINARY_DIR}/services/pwrap_get_set @ONLY)
 
-if (OSX)
-       set(TEST_ENVIRONMENT DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${PAM_WRAPPER_LOCATION};PAM_WRAPPER=1;PAM_WRAPPER_SERVICE_DIR=${CMAKE_CURRENT_BINARY_DIR}/services})
-       add_definitions(-DOSX)
-else ()
-       set(TEST_ENVIRONMENT LD_PRELOAD=${PAM_WRAPPER_LOCATION};PAM_WRAPPER=1;PAM_WRAPPER_SERVICE_DIR=${CMAKE_CURRENT_BINARY_DIR}/services)
-endif ()
+function(ADD_CMOCKA_TEST_ENVIRONMENT _TEST_NAME)
+    if (CMAKE_BUILD_TYPE)
+        string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
+        if (CMAKE_BUILD_TYPE_LOWER STREQUAL "addresssanitizer")
+            find_library(ASAN_LIBRARY
+                         NAMES asan)
+            if (NOT ASAN_LIBRARY)
+                foreach(version RANGE 10 1)
+                    if (NOT ASAN_LIBRARY)
+                        find_library(ASAN_LIBRARY libasan.so.${version})
+                    endif()
+                endforeach()
+            endif()
+        endif()
+    endif()
+
+    if (ASAN_LIBRARY)
+        list(APPEND PRELOAD_LIBRARIES ${ASAN_LIBRARY})
+    endif()
+    list(APPEND PRELOAD_LIBRARIES ${PAM_WRAPPER_LOCATION})
+
+    if (OSX)
+        set(TORTURE_ENVIRONMENT "DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${RESOLV_WRAPPER_LOCATION}:${SOCKET_WRAPPER_LIBRARY}")
+    else ()
+        string(REPLACE ";" ":" _TMP_ENV "${PRELOAD_LIBRARIES}")
+        set(TORTURE_ENVIRONMENT "LD_PRELOAD=${_TMP_ENV}")
+    endif()
+
+    list(APPEND TORTURE_ENVIRONMENT PAM_WRAPPER=1)
+    list(APPEND TORTURE_ENVIRONMENT PAM_WRAPPER_SERVICE_DIR=${CMAKE_CURRENT_BINARY_DIR}/services)
+
+    foreach(_arg ${ARGN})
+        list(APPEND TORTURE_ENVIRONMENT ${_arg})
+    endforeach()
+
+    set_property(TEST
+                    ${_TEST_NAME}
+                PROPERTY
+                    ENVIRONMENT "${TORTURE_ENVIRONMENT}")
+endfunction()
 
 set(PAM_LIBRARIES pam)
 if (HAVE_PAM_MISC)
@@ -44,11 +78,7 @@ add_cmocka_test(test_pam_wrapper
                 SOURCES test_pam_wrapper.c
                 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS}
                 LINK_LIBRARIES ${TEST_LIBRARIES})
-set_property(
-    TEST
-        test_pam_wrapper
-    PROPERTY
-        ENVIRONMENT ${TEST_ENVIRONMENT})
+add_cmocka_test_environment(test_pam_wrapper)
 
 if (PYTHON2_EXECUTABLE)
     add_test(NAME
@@ -56,10 +86,7 @@ if (PYTHON2_EXECUTABLE)
              COMMAND
                 ${PYTHON2_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/pypamtest_test.py)
 
-    set_property(TEST
-                    py2pamtest_test
-                 PROPERTY
-                    ENVIRONMENT ${TEST_ENVIRONMENT})
+    add_cmocka_test_environment(py2pamtest_test)
 endif()
 
 if (PYTHON3_EXECUTABLE)
@@ -68,8 +95,5 @@ if (PYTHON3_EXECUTABLE)
              COMMAND
                 ${PYTHON3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/pypamtest_test.py)
 
-    set_property(TEST
-                    py3pamtest_test
-                 PROPERTY
-                    ENVIRONMENT ${TEST_ENVIRONMENT})
+    add_cmocka_test_environment(py3pamtest_test)
 endif()