aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnderson Toshiyuki Sasaki <ansasaki@redhat.com>2018-09-21 13:10:54 +0200
committerAndreas Schneider <asn@cryptomilk.org>2018-09-26 16:27:22 +0200
commit667fb5f9a9c96f210583dbfb11755c43250c5e55 (patch)
treedde81b96bc6d2012913a652ad84358f1dce26f5c
parent14f5624ff53819f3707fe8da1aa465d8d171b37d (diff)
downloadlibssh-667fb5f9a9c96f210583dbfb11755c43250c5e55.tar.gz
libssh-667fb5f9a9c96f210583dbfb11755c43250c5e55.tar.xz
libssh-667fb5f9a9c96f210583dbfb11755c43250c5e55.zip
cmake: Rewritten AddCMockaTest.cmake
This changes add_cmocka_test() to receive compiler options, the libraries to be linked to the test, and the linker options. The way the tests are declared in tests/unittests and tests/client were updated. Signed-off-by: Anderson Toshiyuki Sasaki <ansasaki@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
-rw-r--r--cmake/Modules/AddCMockaTest.cmake106
-rw-r--r--tests/client/CMakeLists.txt7
-rw-r--r--tests/unittests/CMakeLists.txt152
3 files changed, 174 insertions, 91 deletions
diff --git a/cmake/Modules/AddCMockaTest.cmake b/cmake/Modules/AddCMockaTest.cmake
index db565fd9..4b0c2dad 100644
--- a/cmake/Modules/AddCMockaTest.cmake
+++ b/cmake/Modules/AddCMockaTest.cmake
@@ -1,11 +1,63 @@
-# - add_cmocka_test(test_name test_source linklib1 ... linklibN)
-
+#
# Copyright (c) 2007 Daniel Gollub <dgollub@suse.de>
# Copyright (c) 2007-2018 Andreas Schneider <asn@cryptomilk.org>
+# Copyright (c) 2018 Anderson Toshiyuki Sasaki <ansasaki@redhat.com>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+#.rst:
+# AddCMockaTest
+# -------------
+#
+# This file provides a function to add a test
+#
+# Functions provided
+# ------------------
+#
+# ::
+#
+# add_cmocka_test(target_name
+# SOURCES src1 src2 ... srcN
+# [COMPILE_OPTIONS opt1 opt2 ... optN]
+# [LINK_LIBRARIES lib1 lib2 ... libN]
+# [LINK_OPTIONS lopt1 lop2 .. loptN]
+# )
+#
+# ``target_name``:
+# Required, expects the name of the test which will be used to define a target
+#
+# ``SOURCES``:
+# Required, expects one or more source files names
+#
+# ``COMPILE_OPTIONS``:
+# Optional, expects one or more options to be passed to the compiler
+#
+# ``LINK_LIBRARIES``:
+# Optional, expects one or more libraries to be linked with the test
+# executable.
+#
+# ``LINK_OPTIONS``:
+# Optional, expects one or more options to be passed to the linker
+#
+#
+# Example:
+#
+# .. code-block:: cmake
+#
+# add_cmocka_test(my_test
+# SOURCES my_test.c other_source.c
+# COMPILE_OPTIONS -g -Wall
+# LINK_LIBRARIES mylib
+# LINK_OPTIONS -Wl,--enable-syscall-fixup
+# )
+#
+# Where ``my_test`` is the name of the test, ``my_test.c`` and
+# ``other_source.c`` are sources for the binary, ``-g -Wall`` are compiler
+# options to be used, ``mylib`` is a target of a library to be linked, and
+# ``-Wl,--enable-syscall-fixup`` is an option passed to the linker.
+#
+
enable_testing()
include(CTest)
@@ -17,10 +69,52 @@ if (CMAKE_CROSSCOMPILING)
endif()
endif()
-function(ADD_CMOCKA_TEST _testName _testSource)
- add_executable(${_testName} ${_testSource})
+function(ADD_CMOCKA_TEST _TARGET_NAME)
+
+ set(one_value_arguments
+ )
+
+ set(multi_value_arguments
+ SOURCES
+ COMPILE_OPTIONS
+ LINK_LIBRARIES
+ LINK_OPTIONS
+ )
+
+ cmake_parse_arguments(_add_cmocka_test
+ ""
+ "${one_value_arguments}"
+ "${multi_value_arguments}"
+ ${ARGN}
+ )
+
+ if (NOT DEFINED _add_cmocka_test_SOURCES)
+ message(FATAL_ERROR "No sources provided for target ${_TARGET_NAME}")
+ endif()
+
+ add_executable(${_TARGET_NAME} ${_add_cmocka_test_SOURCES})
+
+ if (DEFINED _add_cmocka_test_COMPILE_OPTIONS)
+ target_compile_options(${_TARGET_NAME}
+ PRIVATE ${_add_cmocka_test_COMPILE_OPTIONS}
+ )
+ endif()
+
+ if (DEFINED _add_cmocka_test_LINK_LIBRARIES)
+ target_link_libraries(${_TARGET_NAME}
+ PRIVATE ${_add_cmocka_test_LINK_LIBRARIES}
+ )
+ endif()
+
+ if (DEFINED _add_cmocka_test_LINK_OPTIONS)
+ set_target_properties(${_TARGET_NAME}
+ PROPERTIES LINK_FLAGS
+ ${_add_cmocka_test_LINK_OPTIONS}
+ )
+ endif()
- target_link_libraries(${_testName} ${ARGN})
+ add_test(${_TARGET_NAME}
+ ${TARGET_SYSTEM_EMULATOR} ${_TARGET_NAME}
+ )
- add_test(${_testName} ${TARGET_SYSTEM_EMULATOR} ${CMAKE_CURRENT_BINARY_DIR}/${_testName}${CMAKE_EXECUTABLE_SUFFIX})
endfunction (ADD_CMOCKA_TEST)
diff --git a/tests/client/CMakeLists.txt b/tests/client/CMakeLists.txt
index 5e92c646..b55dfb28 100644
--- a/tests/client/CMakeLists.txt
+++ b/tests/client/CMakeLists.txt
@@ -30,8 +30,11 @@ if (WITH_SFTP)
endif (WITH_SFTP)
foreach(_CLI_TEST ${LIBSSH_CLIENT_TESTS})
- add_cmocka_test(${_CLI_TEST} ${_CLI_TEST}.c ${TORTURE_LIBRARY})
- target_compile_options(${_CLI_TEST} PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
+ add_cmocka_test(${_CLI_TEST}
+ SOURCES ${_CLI_TEST}.c
+ COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS}
+ LINK_LIBRARIES ${TORTURE_LIBRARY}
+ )
if (OSX)
set_property(
diff --git a/tests/unittests/CMakeLists.txt b/tests/unittests/CMakeLists.txt
index 397ebd05..c67d6273 100644
--- a/tests/unittests/CMakeLists.txt
+++ b/tests/unittests/CMakeLists.txt
@@ -2,95 +2,81 @@ project(unittests C)
include_directories(${OPENSSL_INCLUDE_DIR})
-add_cmocka_test(torture_buffer torture_buffer.c ${TEST_TARGET_LIBRARIES})
-target_compile_options(torture_buffer PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
-
-add_cmocka_test(torture_callbacks torture_callbacks.c ${TEST_TARGET_LIBRARIES})
-target_compile_options(torture_callbacks PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
-
-add_cmocka_test(torture_crypto torture_crypto.c ${TEST_TARGET_LIBRARIES})
-target_compile_options(torture_crypto PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
-
-add_cmocka_test(torture_init torture_init.c ${TEST_TARGET_LIBRARIES})
-target_compile_options(torture_init PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
-
-add_cmocka_test(torture_list torture_list.c ${TEST_TARGET_LIBRARIES})
-target_compile_options(torture_list PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
-
-add_cmocka_test(torture_misc torture_misc.c ${TEST_TARGET_LIBRARIES})
-target_compile_options(torture_misc PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
-
-add_cmocka_test(torture_config torture_config.c ${TEST_TARGET_LIBRARIES})
-target_compile_options(torture_config PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
-
-add_cmocka_test(torture_options torture_options.c ${TEST_TARGET_LIBRARIES})
-target_compile_options(torture_options PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
-
-add_cmocka_test(torture_isipaddr torture_isipaddr.c ${TEST_TARGET_LIBRARIES})
-target_compile_options(torture_isipaddr PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
-
-add_cmocka_test(torture_knownhosts_parsing torture_knownhosts_parsing.c ${TEST_TARGET_LIBRARIES})
-target_compile_options(torture_knownhosts_parsing PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
-
-add_cmocka_test(torture_hashes torture_hashes.c ${TEST_TARGET_LIBRARIES})
-target_compile_options(torture_hashes PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
-
-if (CMAKE_USE_PTHREADS_INIT)
- add_cmocka_test(torture_rand torture_rand.c ${TEST_TARGET_LIBRARIES})
- target_compile_options(torture_rand PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
- target_link_libraries(torture_rand Threads::Threads)
-
- add_cmocka_test(torture_threads_init torture_threads_init.c ${TEST_TARGET_LIBRARIES})
- target_compile_options(torture_threads_init PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
- target_link_libraries(torture_threads_init Threads::Threads)
-
- add_cmocka_test(torture_threads_buffer torture_threads_buffer.c ${TEST_TARGET_LIBRARIES})
- target_compile_options(torture_threads_buffer PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
- target_link_libraries(torture_threads_buffer Threads::Threads)
-
- add_cmocka_test(torture_threads_crypto torture_threads_crypto.c ${TEST_TARGET_LIBRARIES})
- target_compile_options(torture_threads_crypto PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
- target_link_libraries(torture_threads_crypto Threads::Threads)
-endif ()
+set(LIBSSH_UNIT_TESTS
+ torture_buffer
+ torture_callbacks
+ torture_crypto
+ torture_init
+ torture_list
+ torture_misc
+ torture_config
+ torture_options
+ torture_isipaddr
+ torture_knownhosts_parsing
+ torture_hashes
+)
+
+set(LIBSSH_THREAD_UNIT_TESTS
+ torture_rand
+ torture_threads_init
+ torture_threads_buffer
+ torture_threads_crypto
+)
if (UNIX AND NOT WIN32)
- # this uses a socketpair
- add_cmocka_test(torture_packet torture_packet.c ${TEST_TARGET_LIBRARIES})
- target_compile_options(torture_packet PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
-
- # requires ssh-keygen
- add_cmocka_test(torture_keyfiles torture_keyfiles.c ${TEST_TARGET_LIBRARIES})
-
- add_cmocka_test(torture_pki torture_pki.c ${TEST_TARGET_LIBRARIES})
- target_compile_options(torture_pki PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
-
- add_cmocka_test(torture_pki_rsa torture_pki_rsa.c ${TEST_TARGET_LIBRARIES})
- target_compile_options(torture_pki_rsa PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
-
- add_cmocka_test(torture_pki_ed25519 torture_pki_ed25519.c ${TEST_TARGET_LIBRARIES})
- target_compile_options(torture_pki_ed25519 PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
+ set(LIBSSH_UNIT_TESTS
+ ${LIBSSH_UNIT_TESTS}
+ # this uses a socketpair
+ torture_packet
+ # requires ssh-keygen
+ torture_keyfiles
+ torture_pki
+ torture_pki_rsa
+ torture_pki_ed25519
+ # requires /dev/null
+ torture_channel
+ )
if (HAVE_DSA)
- add_cmocka_test(torture_pki_dsa torture_pki_dsa.c ${TEST_TARGET_LIBRARIES})
- target_compile_options(torture_pki_dsa PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
+ set(LIBSSH_UNIT_TESTS
+ ${LIBSSH_UNIT_TESTS}
+ torture_pki_dsa
+ )
endif()
+
if (HAVE_ECC)
- add_cmocka_test(torture_pki_ecdsa torture_pki_ecdsa.c ${TEST_TARGET_LIBRARIES})
- target_compile_options(torture_pki_ecdsa PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
+ set(LIBSSH_UNIT_TESTS
+ ${LIBSSH_UNIT_TESTS}
+ torture_pki_ecdsa
+ )
endif()
- # requires /dev/null
- add_cmocka_test(torture_channel torture_channel.c ${TEST_TARGET_LIBRARIES})
- target_compile_options(torture_channel PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
- # requires pthread
- if (CMAKE_USE_PTHREADS_INIT)
- add_cmocka_test(torture_threads_pki_rsa torture_threads_pki_rsa.c ${TEST_TARGET_LIBRARIES})
- target_compile_options(torture_threads_pki_rsa PRIVATE ${DEFAULT_C_COMPILE_FLAGS})
- target_link_libraries(torture_threads_pki_rsa Threads::Threads)
-
- # Not working correctly
- #if (WITH_SERVER)
- # add_cmocka_test(torture_server_x11 torture_server_x11.c ${TEST_TARGET_LIBRARIES})
- #endif (WITH_SERVER)
- endif ()
+ set(LIBSSH_THREAD_UNIT_TESTS
+ ${LIBSSH_THREAD_UNIT_TESTS}
+ # requires pthread
+ torture_threads_pki_rsa
+ )
+ # Not working correctly
+ #if (WITH_SERVER)
+ # add_cmocka_test(torture_server_x11 torture_server_x11.c ${TEST_TARGET_LIBRARIES})
+ #endif (WITH_SERVER)
endif (UNIX AND NOT WIN32)
+
+foreach(_UNIT_TEST ${LIBSSH_UNIT_TESTS})
+ add_cmocka_test(${_UNIT_TEST}
+ SOURCES ${_UNIT_TEST}.c
+ COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS}
+ LINK_LIBRARIES ${TEST_TARGET_LIBRARIES}
+ )
+endforeach()
+
+if (CMAKE_USE_PTHREADS_INIT)
+ foreach(_UNIT_TEST ${LIBSSH_THREAD_UNIT_TESTS})
+ add_cmocka_test(${_UNIT_TEST}
+ SOURCES ${_UNIT_TEST}.c
+ COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS}
+ LINK_LIBRARIES ${TEST_TARGET_LIBRARIES} Threads::Threads
+ )
+ endforeach()
+endif ()
+