* Moves cmake scripts for testing into test/cmake.
* Separates out related add_tests into separate cmake scripts.
* Moves building test binaries into CMakeLists.txt in test directory.
if(ZLIB_ENABLE_TESTS)
enable_testing()
- if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.12)
- add_subdirectory(test)
- if(WITH_BENCHMARKS)
- add_subdirectory(test/benchmarks)
- endif()
- else()
- message(WARNING "Minimum cmake version of 3.12 not met for GoogleTest or benchmarks!")
- endif()
-
- macro(configure_test_executable target)
- target_include_directories(${target} PUBLIC
- "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
- "$<INSTALL_INTERFACE:include>")
- if(NOT WITH_GZFILEOP)
- target_compile_definitions(${target} PUBLIC -DWITH_GZFILEOP)
- target_sources(${target} PRIVATE ${ZLIB_GZFILE_PRIVATE_HDRS} ${ZLIB_GZFILE_SRCS})
- endif()
- endmacro()
-
- macro(add_simple_test_executable target)
- add_executable(${target} test/${target}.c)
- configure_test_executable(${target})
- target_link_libraries(${target} zlib)
- add_test(NAME ${target} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:${target}>)
- endmacro()
-
- add_simple_test_executable(example)
-
- set(MINIGZIP_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:minigzip>)
- add_executable(minigzip test/minigzip.c)
- configure_test_executable(minigzip)
- if(NOT DEFINED BUILD_SHARED_LIBS)
- target_link_libraries(minigzip zlibstatic)
- else()
- target_link_libraries(minigzip zlib)
- endif()
- if(BASEARCH_S360_FOUND)
- if(WITH_DFLTCC_DEFLATE OR WITH_DFLTCC_INFLATE)
- set_source_files_properties(test/minigzip.c PROPERTIES COMPILE_DEFINITIONS BUFLEN=262144)
- endif()
- endif()
-
- set(MINIDEFLATE_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:minideflate>)
- add_executable(minideflate test/minideflate.c)
- configure_test_executable(minideflate)
- target_link_libraries(minideflate zlib)
-
- if(INSTALL_UTILS)
- install(TARGETS minigzip minideflate
- RUNTIME DESTINATION "${BIN_INSTALL_DIR}"
- ARCHIVE DESTINATION "${LIB_INSTALL_DIR}"
- LIBRARY DESTINATION "${LIB_INSTALL_DIR}")
- endif()
-
- set(SWITCHLEVELS_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:switchlevels>)
- add_executable(switchlevels test/switchlevels.c)
- configure_test_executable(switchlevels)
- target_link_libraries(switchlevels zlib)
-
- add_simple_test_executable(infcover)
- if(NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS)
- target_sources(infcover PRIVATE inftrees.c)
- endif()
-
- add_executable(makefixed tools/makefixed.c inftrees.c)
- target_include_directories(makefixed PUBLIC
- "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
- "$<INSTALL_INTERFACE:include>")
-
- set(MAKEFIXED_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:makefixed>)
- add_test(NAME makefixed
- COMMAND ${CMAKE_COMMAND}
- "-DCOMMAND=${MAKEFIXED_COMMAND}"
- -DOUTPUT=${CMAKE_CURRENT_BINARY_DIR}/Testing/Temporary/inffixed_tbl._h
- -DCOMPARE=${CMAKE_CURRENT_SOURCE_DIR}/inffixed_tbl.h
- -DIGNORE_LINE_ENDINGS=ON
- -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/run-and-compare.cmake)
-
- add_executable(maketrees tools/maketrees.c trees.c zutil.c)
- target_include_directories(maketrees PUBLIC
- "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
- "$<INSTALL_INTERFACE:include>")
-
- set(MAKETREES_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:maketrees>)
- add_test(NAME maketrees
- COMMAND ${CMAKE_COMMAND}
- "-DCOMMAND=${MAKETREES_COMMAND}"
- -DOUTPUT=${CMAKE_CURRENT_BINARY_DIR}/Testing/Temporary/trees_tbl._h
- -DCOMPARE=${CMAKE_CURRENT_SOURCE_DIR}/trees_tbl.h
- -DIGNORE_LINE_ENDINGS=ON
- -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/run-and-compare.cmake)
-
- add_executable(makecrct tools/makecrct.c)
- target_include_directories(makecrct PUBLIC
- "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
- "$<INSTALL_INTERFACE:include>")
-
- set(MAKECRCT_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:makecrct>)
- add_test(NAME makecrct
- COMMAND ${CMAKE_COMMAND}
- "-DCOMMAND=${MAKECRCT_COMMAND}"
- -DOUTPUT=${CMAKE_CURRENT_BINARY_DIR}/Testing/Temporary/crc32_braid_tbl._h
- -DCOMPARE=${CMAKE_CURRENT_SOURCE_DIR}/crc32_braid_tbl.h
- -DIGNORE_LINE_ENDINGS=ON
- -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/run-and-compare.cmake)
-
- if(WITH_FUZZERS)
- add_subdirectory(test/fuzz)
- endif()
-
- macro(test_minigzip name path)
- # Construct compression arguments for minigzip
- set(compress_args -k -c)
- foreach(extra_arg IN ITEMS "${ARGN}")
- list(APPEND compress_args ${extra_arg})
- endforeach()
-
- # Create unique friendly string for test
- string(REPLACE ";" "" arg_list "${ARGN}")
- string(REPLACE " " "" arg_list "${arg_list}")
- string(REPLACE "-" "" arg_list "${arg_list}")
-
- set(test_id minigzip-${name}-${arg_list})
-
- if(NOT TEST ${test_id})
- add_test(NAME ${test_id}
- COMMAND ${CMAKE_COMMAND}
- "-DTARGET=${MINIGZIP_COMMAND}"
- "-DCOMPRESS_ARGS=${compress_args}"
- "-DDECOMPRESS_ARGS=-d;-c"
- -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/${path}
- -DTEST_NAME=${test_id}
- -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
- endif()
- endmacro()
-
- set(TEST_CONFIGS
- -R # Z_RLE
- -h # Z_HUFFMAN_ONLY
- -T # Direct store
- -0 # No compression
- -1 # Deflate quick
- -4 # Deflate medium (lazy matches)
- "-5;-F" # Deflate medium (Z_FIXED)
- -6 # Deflate medium
- -9 # Deflate slow
- "-9;-f" # Deflate slow (Z_FILTERED)
- )
-
- file(GLOB_RECURSE TEST_FILE_PATHS
- LIST_DIRECTORIES false
- RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}/test/data/*)
-
- foreach(TEST_FILE_PATH ${TEST_FILE_PATHS})
- if("${TEST_FILE_PATH}" MATCHES ".gz$" OR "${TEST_FILE_PATH}" MATCHES ".out$" OR
- "${TEST_FILE_PATH}" MATCHES "/.git/" OR "${TEST_FILE_PATH}" MATCHES ".md$")
- continue()
- endif()
- foreach(TEST_CONFIG ${TEST_CONFIGS})
- get_filename_component(TEST_NAME ${TEST_FILE_PATH} NAME)
- if (TEST_NAME STREQUAL "")
- continue()
- endif()
- test_minigzip(${TEST_NAME} ${TEST_FILE_PATH} ${TEST_CONFIG})
- endforeach()
- endforeach()
-
- test_minigzip("detect-text" "test/data/lcet10.txt" -A)
- test_minigzip("detect-binary" "test/data/paper-100k.pdf" -A)
-
- set(CVES CVE-2002-0059 CVE-2004-0797 CVE-2005-1849 CVE-2005-2096)
- foreach(CVE ${CVES})
- set(CVE_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:minigzip> -d)
- add_test(NAME ${CVE}
- COMMAND ${CMAKE_COMMAND}
- "-DCOMMAND=${CVE_COMMAND}"
- -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/${CVE}/test.gz
- "-DSUCCESS_EXIT=0;1"
- -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/run-and-redirect.cmake)
- endforeach()
-
- set(TEST_LEVELS 6 1 2)
- foreach(TEST_LEVEL ${TEST_LEVELS})
- add_test(NAME CVE-2018-25032-fixed-level-${TEST_LEVEL}
- COMMAND ${CMAKE_COMMAND}
- "-DTARGET=${MINIDEFLATE_COMMAND}"
- "-DCOMPRESS_ARGS=-c;-k;-m;1;-w;-15;-s;4;-F;-${TEST_LEVEL}"
- "-DDECOMPRESS_ARGS=-c;-k;-d;-m;1;-w;-15;-${TEST_LEVEL}"
- -DGZIP_VERIFY=OFF
- -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/CVE-2018-25032/fixed.txt
- -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
-
- add_test(NAME CVE-2018-25032-default-level-${TEST_LEVEL}
- COMMAND ${CMAKE_COMMAND}
- "-DTARGET=${MINIDEFLATE_COMMAND}"
- "-DCOMPRESS_ARGS=-c;-k;-m;1;-w;-15;-s;4;-${TEST_LEVEL}"
- "-DDECOMPRESS_ARGS=-c;-k;-d;-m;1;-w;-15;-${TEST_LEVEL}"
- -DGZIP_VERIFY=OFF
- -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/CVE-2018-25032/default.txt
- -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
- endforeach()
-
- # Run tests targeting tools
- include(cmake/test-tools.cmake)
-
- add_test(NAME GH-361
- COMMAND ${CMAKE_COMMAND}
- "-DTARGET=${MINIGZIP_COMMAND}"
- "-DCOMPRESS_ARGS=-c;-k;-4"
- -DTEST_NAME=GH-361-test-txt
- -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/GH-361/test.txt
- -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
-
- add_test(NAME GH-364
- COMMAND ${CMAKE_COMMAND}
- "-DCOMPRESS_TARGET=${SWITCHLEVELS_COMMAND}"
- "-DCOMPRESS_ARGS=1;5;9;3"
- "-DDECOMPRESS_TARGET=${MINIGZIP_COMMAND}"
- -DTEST_NAME=GH-364-test-bin
- -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/GH-364/test.bin
- -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
-
- add_test(NAME GH-382
- COMMAND ${CMAKE_COMMAND}
- "-DTARGET=${MINIDEFLATE_COMMAND}"
- "-DCOMPRESS_ARGS=-c;-m;1;-w;-15;-1;-s;4"
- "-DDECOMPRESS_ARGS=-c;-d;-m;1;-w;-15"
- -DGZIP_VERIFY=OFF
- -DTEST_NAME=GH-382-defneg3-dat
- -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/GH-382/defneg3.dat
- -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
-
- add_test(NAME GH-536-segfault
- COMMAND ${CMAKE_COMMAND}
- "-DCOMPRESS_TARGET=${SWITCHLEVELS_COMMAND}"
- "-DCOMPRESS_ARGS=6;9744;1;91207"
- "-DDECOMPRESS_TARGET=${MINIGZIP_COMMAND}"
- -DCOMPARE=OFF
- -DGZIP_VERIFY=OFF
- -DTEST_NAME=GH-536-segfault-lcet10-txt
- -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/data/lcet10.txt
- -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
-
- add_test(NAME GH-536-incomplete-read
- COMMAND ${CMAKE_COMMAND}
- "-DCOMPRESS_TARGET=${SWITCHLEVELS_COMMAND}"
- "-DCOMPRESS_ARGS=6;88933;1;195840;2;45761"
- "-DDECOMPRESS_TARGET=${MINIGZIP_COMMAND}"
- -DCOMPARE=OFF
- -DGZIP_VERIFY=OFF
- -DTEST_NAME=GH-536-incomplete-read-lcet10-txt
- -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/data/lcet10.txt
- -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
-
- add_test(NAME GH-536-zero-stored-block
- COMMAND ${CMAKE_COMMAND}
- "-DCOMPRESS_TARGET=${SWITCHLEVELS_COMMAND}"
- "-DCOMPRESS_ARGS=6;15248;1;1050;2;25217"
- "-DDECOMPRESS_TARGET=${MINIGZIP_COMMAND}"
- -DCOMPARE=OFF
- -DGZIP_VERIFY=OFF
- -DTEST_NAME=GH-536-zero-stored-block-lcet10-txt
- -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/data/lcet10.txt
- -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
-
- add_test(NAME GH-751
- COMMAND ${CMAKE_COMMAND}
- "-DTARGET=${MINIGZIP_COMMAND}"
- -DTEST_NAME=GH-751-test-txt
- -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/GH-751/test.txt
- -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
+ add_subdirectory(test)
endif()
add_feature_info(WITH_GZFILEOP WITH_GZFILEOP "Compile with support for gzFile related functions")
-cmake_minimum_required(VERSION 3.12)
+cmake_minimum_required(VERSION 3.5.1)
+
+macro(configure_test_executable target)
+ target_include_directories(${target} PRIVATE ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
+ set_target_properties(${target} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
+ if(NOT WITH_GZFILEOP)
+ target_compile_definitions(${target} PRIVATE -DWITH_GZFILEOP)
+ target_sources(${target} PRIVATE ${ZLIB_GZFILE_PRIVATE_HDRS} ${ZLIB_GZFILE_SRCS})
+ endif()
+endmacro()
+
+add_executable(example example.c)
+configure_test_executable(example)
+target_link_libraries(example zlib)
+add_test(NAME example COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:example>)
+
+add_executable(minigzip minigzip.c)
+configure_test_executable(minigzip)
+if(NOT DEFINED BUILD_SHARED_LIBS)
+ target_link_libraries(minigzip zlibstatic)
+else()
+ target_link_libraries(minigzip zlib)
+endif()
+if(BASEARCH_S360_FOUND)
+ if(WITH_DFLTCC_DEFLATE OR WITH_DFLTCC_INFLATE)
+ set_source_files_properties(minigzip.c PROPERTIES COMPILE_DEFINITIONS BUFLEN=262144)
+ endif()
+endif()
+set(MINIGZIP_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:minigzip>)
+
+add_executable(minideflate minideflate.c)
+configure_test_executable(minideflate)
+target_link_libraries(minideflate zlib)
+set(MINIDEFLATE_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:minideflate>)
+
+if(INSTALL_UTILS)
+ install(TARGETS minigzip minideflate
+ RUNTIME DESTINATION "${BIN_INSTALL_DIR}"
+ ARCHIVE DESTINATION "${LIB_INSTALL_DIR}"
+ LIBRARY DESTINATION "${LIB_INSTALL_DIR}")
+endif()
+
+add_executable(switchlevels switchlevels.c)
+configure_test_executable(switchlevels)
+target_link_libraries(switchlevels zlib)
+set(SWITCHLEVELS_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:switchlevels>)
-include(FetchContent)
+add_executable(infcover infcover.c)
+configure_test_executable(infcover)
+target_link_libraries(infcover zlib)
+if(NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS)
+ target_sources(infcover PRIVATE ${CMAKE_SOURCE_DIR}/inftrees.c)
+endif()
+add_test(NAME infcover COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:infcover>)
-enable_language(CXX)
+add_executable(makefixed ${CMAKE_SOURCE_DIR}/tools/makefixed.c ${CMAKE_SOURCE_DIR}/inftrees.c)
+configure_test_executable(makefixed)
+set(MAKEFIXED_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:makefixed>)
-# Google test requires at least C++11
-set(CMAKE_CXX_STANDARD 11)
+add_executable(maketrees ${CMAKE_SOURCE_DIR}/tools/maketrees.c ${CMAKE_SOURCE_DIR}/trees.c ${CMAKE_SOURCE_DIR}/zutil.c)
+configure_test_executable(maketrees)
+set(MAKETREES_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:maketrees>)
-# Google test requires MSAN instrumented LLVM C++ libraries
-if(WITH_SANITIZER STREQUAL "Memory")
- if(NOT DEFINED ENV{LLVM_BUILD_DIR})
- message(FATAL_ERROR "MSAN instrumented C++ libraries required!")
- endif()
+add_executable(makecrct ${CMAKE_SOURCE_DIR}/tools/makecrct.c)
+configure_test_executable(makecrct)
+set(MAKECRCT_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:makecrct>)
- # Must set include and compile options before fetching googletest
- include_directories($ENV{LLVM_BUILD_DIR}/include $ENV{LLVM_BUILD_DIR}/include/c++/v1)
- add_compile_options(-stdlib=libc++ -g)
+# Runs tests targeting CVEs
+include(cmake/test-cves.cmake)
+
+# Run tests with data files
+include(cmake/test-data.cmake)
+
+# Run tests targeting GitHub issues
+include(cmake/test-issues.cmake)
+
+# Run tests targeting tools
+include(cmake/test-tools.cmake)
+
+if(WITH_FUZZERS)
+ add_subdirectory(fuzz)
endif()
-if(NOT TARGET GTest::GTest)
- # Prevent overriding the parent project's compiler/linker settings for Windows
- set(gtest_force_shared_crt ON CACHE BOOL
- "Use shared (DLL) run-time lib even when Google Test is built as static lib." FORCE)
+if(CMAKE_VERSION VERSION_LESS 3.12)
+ message(WARNING "Minimum cmake version of 3.12 not met for GoogleTest or benchmarks!")
+else()
+ enable_language(CXX)
- # Allow specifying alternative Google test repository
- if(NOT DEFINED GTEST_REPOSITORY)
- set(GTEST_REPOSITORY https://github.com/google/googletest.git)
+ include(FetchContent)
+
+ if(WITH_BENCHMARKS)
+ add_subdirectory(benchmarks)
endif()
- if(NOT DEFINED GTEST_TAG)
- # Use older version of Google test to support older versions of GCC
- if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS_EQUAL 5.3)
- set(GTEST_TAG release-1.10.0)
- else()
- set(GTEST_TAG release-1.11.0)
+
+ # Google test requires at least C++11
+ set(CMAKE_CXX_STANDARD 11)
+
+ # Google test requires MSAN instrumented LLVM C++ libraries
+ if(WITH_SANITIZER STREQUAL "Memory")
+ if(NOT DEFINED ENV{LLVM_BUILD_DIR})
+ message(FATAL_ERROR "MSAN instrumented C++ libraries required!")
endif()
+
+ # Must set include and compile options before fetching googletest
+ include_directories($ENV{LLVM_BUILD_DIR}/include $ENV{LLVM_BUILD_DIR}/include/c++/v1)
+ add_compile_options(-stdlib=libc++ -g)
endif()
- # Fetch Google test source code from official repository
- FetchContent_Declare(googletest
- GIT_REPOSITORY ${GTEST_REPOSITORY}
- GIT_TAG ${GTEST_TAG})
+ if(NOT TARGET GTest::GTest)
+ # Prevent overriding the parent project's compiler/linker settings for Windows
+ set(gtest_force_shared_crt ON CACHE BOOL
+ "Use shared (DLL) run-time lib even when Google Test is built as static lib." FORCE)
+
+ # Allow specifying alternative Google test repository
+ if(NOT DEFINED GTEST_REPOSITORY)
+ set(GTEST_REPOSITORY https://github.com/google/googletest.git)
+ endif()
+ if(NOT DEFINED GTEST_TAG)
+ # Use older version of Google test to support older versions of GCC
+ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS_EQUAL 5.3)
+ set(GTEST_TAG release-1.10.0)
+ else()
+ set(GTEST_TAG release-1.11.0)
+ endif()
+ endif()
+
+ # Fetch Google test source code from official repository
+ FetchContent_Declare(googletest
+ GIT_REPOSITORY ${GTEST_REPOSITORY}
+ GIT_TAG ${GTEST_TAG})
- FetchContent_GetProperties(googletest)
- if(NOT googletest_POPULATED)
- FetchContent_Populate(googletest)
- add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR} EXCLUDE_FROM_ALL)
+ FetchContent_GetProperties(googletest)
+ if(NOT googletest_POPULATED)
+ FetchContent_Populate(googletest)
+ add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR} EXCLUDE_FROM_ALL)
+ endif()
+ add_library(GTest::GTest ALIAS gtest)
endif()
- add_library(GTest::GTest ALIAS gtest)
-endif()
-set(TEST_SRCS
- test_adler32.cc
- test_aligned_alloc.cc
- test_compare256.cc
- test_compress.cc
- test_compress_bound.cc
- test_crc32.cc
- test_cve-2003-0107.cc
- test_deflate_bound.cc
- test_deflate_copy.cc
- test_deflate_dict.cc
- test_deflate_hash_head_0.cc
- test_deflate_header.cc
- test_deflate_params.cc
- test_deflate_pending.cc
- test_deflate_prime.cc
- test_deflate_quick_bi_valid.cc
- test_deflate_quick_block_open.cc
- test_deflate_tune.cc
- test_dict.cc
- test_inflate_adler32.cc
- test_inflate_sync.cc
- test_large_buffers.cc
- test_small_buffers.cc
- test_version.cc
- )
-
-if(WITH_GZFILEOP)
- list(APPEND TEST_SRCS test_gzio.cc)
-endif()
+ set(TEST_SRCS
+ test_adler32.cc
+ test_aligned_alloc.cc
+ test_compare256.cc
+ test_compress.cc
+ test_compress_bound.cc
+ test_crc32.cc
+ test_cve-2003-0107.cc
+ test_deflate_bound.cc
+ test_deflate_copy.cc
+ test_deflate_dict.cc
+ test_deflate_hash_head_0.cc
+ test_deflate_header.cc
+ test_deflate_params.cc
+ test_deflate_pending.cc
+ test_deflate_prime.cc
+ test_deflate_quick_bi_valid.cc
+ test_deflate_quick_block_open.cc
+ test_deflate_tune.cc
+ test_dict.cc
+ test_inflate_adler32.cc
+ test_inflate_sync.cc
+ test_large_buffers.cc
+ test_small_buffers.cc
+ test_version.cc
+ )
+
+ if(WITH_GZFILEOP)
+ list(APPEND TEST_SRCS test_gzio.cc)
+ endif()
-add_executable(gtest_zlib test_main.cc ${TEST_SRCS})
+ add_executable(gtest_zlib test_main.cc ${TEST_SRCS})
+ configure_test_executable(gtest_zlib)
-target_include_directories(gtest_zlib PRIVATE
- ${CMAKE_SOURCE_DIR}
- ${CMAKE_BINARY_DIR})
+ if(WITH_SANITIZER STREQUAL "Memory")
+ target_link_directories(gtest_zlib PRIVATE $ENV{LLVM_BUILD_DIR}/lib)
+ target_link_options(gtest_zlib PRIVATE
+ -stdlib=libc++
+ -lc++abi
+ -fsanitize=memory
+ -fsanitize-memory-track-origins)
+ endif()
-if(WITH_SANITIZER STREQUAL "Memory")
- target_link_directories(gtest_zlib PRIVATE $ENV{LLVM_BUILD_DIR}/lib)
- target_link_options(gtest_zlib PRIVATE
- -stdlib=libc++
- -lc++abi
- -fsanitize=memory
- -fsanitize-memory-track-origins)
-endif()
+ if(ZLIB_DUAL_LINK AND NOT ZLIB_COMPAT)
+ find_package(ZLIB)
+ if(ZLIB_FOUND)
+ message(STATUS "Added dual linking tests against zlib")
+ message(STATUS " Zlib include dir: ${ZLIB_INCLUDE_DIR}")
+ message(STATUS " Zlib libraries: ${ZLIB_LIBRARIES}")
-if(ZLIB_DUAL_LINK AND NOT ZLIB_COMPAT)
- find_package(ZLIB)
- if(ZLIB_FOUND)
- message(STATUS "Added dual linking tests against zlib")
- message(STATUS " Zlib include dir: ${ZLIB_INCLUDE_DIR}")
- message(STATUS " Zlib libraries: ${ZLIB_LIBRARIES}")
-
- target_sources(gtest_zlib PRIVATE test_compress_dual.cc)
- target_include_directories(gtest_zlib PRIVATE ${ZLIB_INCLUDE_DIR})
- target_link_libraries(gtest_zlib ${ZLIB_LIBRARIES})
- else()
- message(WARNING "Zlib not found, skipping dual linking tests")
+ target_sources(gtest_zlib PRIVATE test_compress_dual.cc)
+ target_include_directories(gtest_zlib PRIVATE ${ZLIB_INCLUDE_DIR})
+ target_link_libraries(gtest_zlib ${ZLIB_LIBRARIES})
+ else()
+ message(WARNING "Zlib not found, skipping dual linking tests")
+ endif()
endif()
-endif()
-target_link_libraries(gtest_zlib zlibstatic GTest::GTest)
+ target_link_libraries(gtest_zlib zlibstatic GTest::GTest)
-find_package(Threads)
-if(Threads_FOUND)
- target_sources(gtest_zlib PRIVATE test_deflate_concurrency.cc)
- if(UNIX AND NOT APPLE)
- # On Linux, use a workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52590
- target_link_libraries(gtest_zlib -Wl,--whole-archive -lpthread -Wl,--no-whole-archive)
+ find_package(Threads)
+ if(Threads_FOUND)
+ target_sources(gtest_zlib PRIVATE test_deflate_concurrency.cc)
+ if(UNIX AND NOT APPLE)
+ # On Linux, use a workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52590
+ target_link_libraries(gtest_zlib -Wl,--whole-archive -lpthread -Wl,--no-whole-archive)
+ endif()
+ target_link_libraries(gtest_zlib Threads::Threads)
endif()
- target_link_libraries(gtest_zlib Threads::Threads)
-endif()
-if(ZLIB_ENABLE_TESTS)
add_test(NAME gtest_zlib
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:gtest_zlib>)
endif()
-# test-compress.cmake -- Runs a test against an input file to make sure that the specified
-# targets are able to to compress and then decompress it successfully. Optionally verify
+# compress-and-verify.cmake -- Runs a test against an input file to make sure that the specified
+# targets are able to to compress and then decompress successfully. Optionally verify
# the results with gzip. Output files are generated with unique names to prevent parallel
# tests from corrupting one another. Default target arguments are compatible with minigzip.
--- /dev/null
+# test-cves.cmake -- Tests targeting common vulnerabilities and exposures
+
+set(CVES CVE-2002-0059 CVE-2004-0797 CVE-2005-1849 CVE-2005-2096)
+foreach(cve ${CVES})
+ set(CVE_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:minigzip> -d)
+ add_test(NAME ${cve}
+ COMMAND ${CMAKE_COMMAND}
+ "-DCOMMAND=${CVE_COMMAND}"
+ -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/${cve}/test.gz
+ "-DSUCCESS_EXIT=0;1"
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/run-and-redirect.cmake)
+endforeach()
+
+set(CVE_COMPRESS_LEVELS 6 1 2)
+foreach(cve_compress_level ${CVE_COMPRESS_LEVELS})
+ add_test(NAME CVE-2018-25032-fixed-level-${cve_compress_level}
+ COMMAND ${CMAKE_COMMAND}
+ "-DTARGET=${MINIDEFLATE_COMMAND}"
+ "-DCOMPRESS_ARGS=-c;-k;-m;1;-w;-15;-s;4;-F;-${cve_compress_level}"
+ "-DDECOMPRESS_ARGS=-c;-k;-d;-m;1;-w;-15;-${cve_compress_level}"
+ -DGZIP_VERIFY=OFF
+ -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/CVE-2018-25032/fixed.txt
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compress-and-verify.cmake)
+
+ add_test(NAME CVE-2018-25032-default-level-${cve_compress_level}
+ COMMAND ${CMAKE_COMMAND}
+ "-DTARGET=${MINIDEFLATE_COMMAND}"
+ "-DCOMPRESS_ARGS=-c;-k;-m;1;-w;-15;-s;4;-${cve_compress_level}"
+ "-DDECOMPRESS_ARGS=-c;-k;-d;-m;1;-w;-15;-${cve_compress_level}"
+ -DGZIP_VERIFY=OFF
+ -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/CVE-2018-25032/default.txt
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compress-and-verify.cmake)
+endforeach()
--- /dev/null
+# test-data.cmake - Tests targeting data files in the data directory
+
+# Test compress and verify test against data file using extra args
+macro(test_minigzip name path)
+ # Construct compression arguments for minigzip
+ set(compress_args -k -c)
+ foreach(extra_arg IN ITEMS "${ARGN}")
+ list(APPEND compress_args ${extra_arg})
+ endforeach()
+
+ # Create unique friendly string for test
+ string(REPLACE ";" "" arg_list "${ARGN}")
+ string(REPLACE " " "" arg_list "${arg_list}")
+ string(REPLACE "-" "" arg_list "${arg_list}")
+
+ set(test_id minigzip-${name}-${arg_list})
+
+ if(NOT TEST ${test_id})
+ add_test(NAME ${test_id}
+ COMMAND ${CMAKE_COMMAND}
+ "-DTARGET=${MINIGZIP_COMMAND}"
+ "-DCOMPRESS_ARGS=${compress_args}"
+ "-DDECOMPRESS_ARGS=-d;-c"
+ -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/${path}
+ -DTEST_NAME=${test_id}
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compress-and-verify.cmake)
+ endif()
+endmacro()
+
+# List of arg combinations to use during compression
+set(TEST_CONFIGS
+ -R # Z_RLE
+ -h # Z_HUFFMAN_ONLY
+ -T # Direct store
+ -0 # No compression
+ -1 # Deflate quick
+ -4 # Deflate medium (lazy matches)
+ "-5;-F" # Deflate medium (Z_FIXED)
+ -6 # Deflate medium
+ -9 # Deflate slow
+ "-9;-f" # Deflate slow (Z_FILTERED)
+)
+
+# Enumerate all files in data directory to run tests against
+file(GLOB_RECURSE TEST_FILE_PATHS
+ LIST_DIRECTORIES false
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/data/*)
+
+# For all files in the data directory, run tests against them
+foreach(test_file_path ${TEST_FILE_PATHS})
+ if("${test_file_path}" MATCHES ".gz$" OR "${test_file_path}" MATCHES ".out$" OR
+ "${test_file_path}" MATCHES "/.git/" OR "${test_file_path}" MATCHES ".md$")
+ continue()
+ endif()
+ foreach(test_config ${TEST_CONFIGS})
+ get_filename_component(test_name ${test_file_path} NAME)
+ if (test_name STREQUAL "")
+ continue()
+ endif()
+ test_minigzip(${test_name} ${test_file_path} ${test_config})
+ endforeach()
+endforeach()
+
+# Additional tests to verify with automatic data type detection arg
+test_minigzip("detect-text" "data/lcet10.txt" -A)
+test_minigzip("detect-binary" "data/paper-100k.pdf" -A)
--- /dev/null
+# test-issues.cmake -- Tests targeting specific GitHub issues
+
+add_test(NAME GH-361
+ COMMAND ${CMAKE_COMMAND}
+ "-DTARGET=${MINIGZIP_COMMAND}"
+ "-DCOMPRESS_ARGS=-c;-k;-4"
+ -DTEST_NAME=GH-361-test-txt
+ -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/GH-361/test.txt
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compress-and-verify.cmake)
+
+add_test(NAME GH-364
+ COMMAND ${CMAKE_COMMAND}
+ "-DCOMPRESS_TARGET=${SWITCHLEVELS_COMMAND}"
+ "-DCOMPRESS_ARGS=1;5;9;3"
+ "-DDECOMPRESS_TARGET=${MINIGZIP_COMMAND}"
+ -DTEST_NAME=GH-364-test-bin
+ -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/GH-364/test.bin
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compress-and-verify.cmake)
+
+add_test(NAME GH-382
+ COMMAND ${CMAKE_COMMAND}
+ "-DTARGET=${MINIDEFLATE_COMMAND}"
+ "-DCOMPRESS_ARGS=-c;-m;1;-w;-15;-1;-s;4"
+ "-DDECOMPRESS_ARGS=-c;-d;-m;1;-w;-15"
+ -DGZIP_VERIFY=OFF
+ -DTEST_NAME=GH-382-defneg3-dat
+ -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/GH-382/defneg3.dat
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compress-and-verify.cmake)
+
+add_test(NAME GH-536-segfault
+ COMMAND ${CMAKE_COMMAND}
+ "-DCOMPRESS_TARGET=${SWITCHLEVELS_COMMAND}"
+ "-DCOMPRESS_ARGS=6;9744;1;91207"
+ "-DDECOMPRESS_TARGET=${MINIGZIP_COMMAND}"
+ -DCOMPARE=OFF
+ -DGZIP_VERIFY=OFF
+ -DTEST_NAME=GH-536-segfault-lcet10-txt
+ -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/data/lcet10.txt
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compress-and-verify.cmake)
+
+add_test(NAME GH-536-incomplete-read
+ COMMAND ${CMAKE_COMMAND}
+ "-DCOMPRESS_TARGET=${SWITCHLEVELS_COMMAND}"
+ "-DCOMPRESS_ARGS=6;88933;1;195840;2;45761"
+ "-DDECOMPRESS_TARGET=${MINIGZIP_COMMAND}"
+ -DCOMPARE=OFF
+ -DGZIP_VERIFY=OFF
+ -DTEST_NAME=GH-536-incomplete-read-lcet10-txt
+ -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/data/lcet10.txt
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compress-and-verify.cmake)
+
+add_test(NAME GH-536-zero-stored-block
+ COMMAND ${CMAKE_COMMAND}
+ "-DCOMPRESS_TARGET=${SWITCHLEVELS_COMMAND}"
+ "-DCOMPRESS_ARGS=6;15248;1;1050;2;25217"
+ "-DDECOMPRESS_TARGET=${MINIGZIP_COMMAND}"
+ -DCOMPARE=OFF
+ -DGZIP_VERIFY=OFF
+ -DTEST_NAME=GH-536-zero-stored-block-lcet10-txt
+ -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/data/lcet10.txt
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compress-and-verify.cmake)
+
+add_test(NAME GH-751
+ COMMAND ${CMAKE_COMMAND}
+ "-DTARGET=${MINIGZIP_COMMAND}"
+ -DTEST_NAME=GH-751-test-txt
+ -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/GH-751/test.txt
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compress-and-verify.cmake)
COMMAND ${CMAKE_COMMAND}
"-DCOMMAND=${TEST_COMMAND}"
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/run-and-redirect.cmake)
+
+# Test generated crc32 tables match tables in source directory
+add_test(NAME makecrct
+ COMMAND ${CMAKE_COMMAND}
+ "-DCOMMAND=${MAKECRCT_COMMAND}"
+ -DOUTPUT=${CMAKE_BINARY_DIR}/Testing/Temporary/crc32_braid_tbl._h
+ -DCOMPARE=${CMAKE_SOURCE_DIR}/crc32_braid_tbl.h
+ -DIGNORE_LINE_ENDINGS=ON
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/run-and-compare.cmake)
+
+# Test generated inflate tables match tables in source directory
+add_test(NAME makefixed
+ COMMAND ${CMAKE_COMMAND}
+ "-DCOMMAND=${MAKEFIXED_COMMAND}"
+ -DOUTPUT=${CMAKE_BINARY_DIR}/Testing/Temporary/inffixed_tbl._h
+ -DCOMPARE=${CMAKE_SOURCE_DIR}/inffixed_tbl.h
+ -DIGNORE_LINE_ENDINGS=ON
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/run-and-compare.cmake)
+
+# Test generated tree tables match tables in source directory
+add_test(NAME maketrees
+ COMMAND ${CMAKE_COMMAND}
+ "-DCOMMAND=${MAKETREES_COMMAND}"
+ -DOUTPUT=${CMAKE_BINARY_DIR}/Testing/Temporary/trees_tbl._h
+ -DCOMPARE=${CMAKE_SOURCE_DIR}/trees_tbl.h
+ -DIGNORE_LINE_ENDINGS=ON
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/run-and-compare.cmake)
"-DDECOMPRESS_ARGS=-d;-c"
-DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/${path}
-DTEST_NAME=${test_id}
- -P ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/test-compress.cmake)
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/compress-and-verify.cmake)
endif()
endmacro()