summaryrefslogtreecommitdiffstats
path: root/src/tests/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/CMakeLists.txt')
-rw-r--r--src/tests/CMakeLists.txt245
1 files changed, 245 insertions, 0 deletions
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
new file mode 100644
index 0000000..7d2a6b0
--- /dev/null
+++ b/src/tests/CMakeLists.txt
@@ -0,0 +1,245 @@
+# Copyright (c) 2018-2020 Ribose Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+if (BUILD_TESTING_GENERATORS)
+ add_subdirectory(data/test_key_validity)
+endif()
+
+# fixture to copy the test data directory
+add_test(
+ NAME setupTestData
+ COMMAND "${CMAKE_COMMAND}" -E copy_directory
+ "${CMAKE_CURRENT_SOURCE_DIR}/data" "${CMAKE_CURRENT_BINARY_DIR}/data"
+)
+set_tests_properties(setupTestData PROPERTIES FIXTURES_SETUP testdata)
+
+# rnp_tests
+include(GoogleTest)
+if (GTEST_SOURCES)
+ # use Googletest sources if specified
+ add_subdirectory(${GTEST_SOURCES}
+ ${CMAKE_CURRENT_BINARY_DIR}/googletest-build
+ EXCLUDE_FROM_ALL)
+ set(GTestMain gtest_main)
+elseif (NOT DOWNLOAD_GTEST)
+ # use preinstalled googletest
+ find_package(GTest REQUIRED)
+ set(GTestMain GTest::Main)
+else()
+ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS_EQUAL "4.8.5")
+ set(GTEST_GIT_TAG "c43f710")
+ else()
+ set(GTEST_GIT_TAG "HEAD")
+ endif()
+ # download and build googletest
+ FetchContent_Declare(googletest
+ GIT_REPOSITORY https://github.com/google/googletest.git
+ GIT_TAG "${GTEST_GIT_TAG}"
+ )
+ # maintain compiler/linker settings on Windows
+ set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
+ # explicitly disable unneeded gmock build
+ set(BUILD_GMOCK OFF CACHE BOOL "" FORCE)
+ FetchContent_MakeAvailable(googletest)
+ set(GTestMain gtest_main)
+endif()
+
+find_package(JSON-C 0.11 REQUIRED)
+if (CRYPTO_BACKEND_LOWERCASE STREQUAL "botan")
+ find_package(Botan2 2.14.0 REQUIRED)
+endif()
+if (CRYPTO_BACKEND_LOWERCASE STREQUAL "openssl")
+ find_package(OpenSSL 1.1.1 REQUIRED)
+endif()
+
+add_executable(rnp_tests
+ ../rnp/rnpcfg.cpp
+ ../rnp/fficli.cpp
+ ../rnp/rnp.cpp
+ ../rnpkeys/rnpkeys.cpp
+ ../rnpkeys/main.cpp
+ ../rnpkeys/tui.cpp
+ ../fuzzing/keyring.c
+ ../fuzzing/keyring_g10.cpp
+ ../fuzzing/keyring_kbx.c
+ ../fuzzing/keyimport.c
+ ../fuzzing/sigimport.c
+ ../fuzzing/dump.c
+ ../fuzzing/verify_detached.c
+ ../fuzzing/verify.c
+ cipher.cpp
+ cipher_cxx.cpp
+ cli.cpp
+ exportkey.cpp
+ ffi.cpp
+ ffi-enc.cpp
+ ffi-uid.cpp
+ ffi-key-sig.cpp
+ ffi-key-prop.cpp
+ ffi-key.cpp
+ file-utils.cpp
+ generatekey.cpp
+ kbx-nsigs-test.cpp
+ key-add-userid.cpp
+ key-grip.cpp
+ key-prefs.cpp
+ key-protect.cpp
+ key-store-search.cpp
+ key-unlock.cpp
+ key-validate.cpp
+ large-packet.cpp
+ large-mpi.cpp
+ load-g10.cpp
+ load-g23.cpp
+ load-pgp.cpp
+ log-switch.cpp
+ partial-length.cpp
+ pipe.cpp
+ rnp_tests.cpp
+ rng-randomness.cpp
+ s2k-iterations.cpp
+ streams.cpp
+ support.cpp
+ user-prefs.cpp
+ utils-hex2bin.cpp
+ utils-rnpcfg.cpp
+ issues/1030.cpp
+ issues/1115.cpp
+ issues/1171.cpp
+ issues/oss-fuzz-25489.cpp
+ fuzz_keyring.cpp
+ fuzz_keyring_g10.cpp
+ fuzz_keyring_kbx.cpp
+ fuzz_keyimport.cpp
+ fuzz_sigimport.cpp
+ fuzz_dump.cpp
+ fuzz_verify_detached.cpp
+ fuzz_verify.cpp
+)
+if(MSVC)
+ find_package(WindowsSDK)
+ GetUMWindowsSDKLibraryDir(WIN_LIBRARY_DIR)
+ message (STATUS "WIN_LIBRARY_DIR: ${WIN_LIBRARY_DIR}")
+ find_library(SHLWAPI_LIBRARY
+ PATHS
+ ${WIN_LIBRARY_DIR}
+ NAMES shlwapi)
+
+ find_path(GETOPT_INCLUDE_DIR
+ NAMES getopt.h
+ )
+ find_library(GETOPT_LIBRARY
+ NAMES getopt
+ )
+ find_path(DIRENT_INCLUDE_DIR
+ NAMES dirent.h
+ )
+ target_include_directories(rnp_tests
+ PRIVATE
+ "${GETOPT_INCLUDE_DIR}"
+ "${DIRENT_INCLUDE_DIR}"
+ )
+ target_link_libraries(rnp_tests
+ PRIVATE
+ "${SHLWAPI_LIBRARY}"
+ "${GETOPT_LIBRARY}"
+ )
+endif()
+target_include_directories(rnp_tests
+ PRIVATE
+ "${PROJECT_SOURCE_DIR}/src"
+ "${PROJECT_SOURCE_DIR}/src/lib"
+ "${BOTAN2_INCLUDE_DIRS}"
+)
+target_link_libraries(rnp_tests
+ PRIVATE
+ librnp-static
+ JSON-C::JSON-C
+ sexp
+ ${GTestMain}
+)
+if (CRYPTO_BACKEND_LOWERCASE STREQUAL "openssl")
+ target_link_libraries(rnp_tests PRIVATE OpenSSL::Crypto)
+endif()
+
+target_compile_definitions(rnp_tests
+ PRIVATE
+ RNP_RUN_TESTS
+ RNP_STATIC
+)
+
+# Centos 7 with CLang 7.0.1 reports strange memory leak in GoogleTest, maybe there is a better solution
+if (NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0.1)
+ set_target_properties(rnp_tests PROPERTIES CXX_VISIBILITY_PRESET hidden)
+endif()
+
+gtest_discover_tests(rnp_tests
+ PROPERTIES
+ FIXTURES_REQUIRED testdata
+ TIMEOUT 3000
+ ENVIRONMENT "RNP_TEST_DATA=${CMAKE_CURRENT_SOURCE_DIR}/data"
+)
+
+# cli_tests
+# Note that we do this call early because Google Test will also do
+# this but with less strict version requirements, which will cause
+# problems for us.
+find_package(Python3 COMPONENTS Interpreter)
+find_package(GnuPG 2.2 COMPONENTS gpg gpgconf)
+function(add_cli_test suite)
+ set(_test_name cli_tests-${suite})
+ add_test(
+ NAME ${_test_name}
+ COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/cli_tests.py" -v -d "${suite}"
+ )
+ set(_env)
+ list(APPEND _env
+ "RNP_TESTS_RNP_PATH=$<TARGET_FILE:rnp>"
+ "RNP_TESTS_RNPKEYS_PATH=$<TARGET_FILE:rnpkeys>"
+ "RNP_TESTS_GPG_PATH=${GPG_EXECUTABLE}"
+ "RNP_TESTS_GPGCONF_PATH=${GPGCONF_EXECUTABLE}"
+ )
+ set_tests_properties(${_test_name} PROPERTIES
+ TIMEOUT 3000
+ FIXTURES_REQUIRED testdata
+ ENVIRONMENT "${_env}"
+ )
+endfunction()
+# get a list of test suites
+execute_process(
+ COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/cli_tests.py" -ls
+ RESULT_VARIABLE _ec
+ OUTPUT_VARIABLE suitelist
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+if (NOT _ec EQUAL 0)
+ message(FATAL_ERROR "Failed to retrieve test suite list for cli_tests")
+endif()
+# convert to a CMake list
+string(REGEX REPLACE ";" "\\\\;" suitelist "${suitelist}")
+string(REGEX REPLACE "\n" ";" suitelist "${suitelist}")
+# create a CTest test for each suite
+foreach(suite IN LISTS suitelist)
+ add_cli_test("${suite}")
+endforeach()