blob: 19dcabb1b3ddfd098c62f8147b4a06bcc0f02aab [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
option(ENABLE_MULTITHREAD_TEST "Enable multithread test. Note that this test is very unstable,
it is mostly designed to ensure that we don't crash immediately if exit is called in a thread" OFF)
# Components required by all tests
add_library(testingFramework STATIC abts.cpp appenderskeletontestcase.cpp logunit.cpp vectorappender.cpp writerappendertestcase.cpp )
target_compile_definitions(testingFramework PRIVATE ${LOG4CXX_COMPILE_DEFINITIONS} ${APR_COMPILE_DEFINITIONS} ${APR_UTIL_COMPILE_DEFINITIONS} )
target_include_directories(testingFramework PRIVATE ${CMAKE_CURRENT_LIST_DIR} $<TARGET_PROPERTY:log4cxx,INCLUDE_DIRECTORIES>)
add_subdirectory(util)
target_sources(testingUtilities PRIVATE xml/xlevel.cpp)
set( LOG4CXX_TEST_PROGRAM_PATH "" CACHE PATH "Extra path for test programs" )
set( CMAKE_PROGRAM_PATH "${LOG4CXX_TEST_PROGRAM_PATH};${CMAKE_PROGRAM_PATH}" )
# sed, zip, and gzip are needed for the tests to work properly
# Note: option 'required' not available until cmake 3.18, however adding
# it does not cause an issue
find_program(SED_APP sed REQUIRED)
find_program(ZIP_APP zip REQUIRED)
find_program(GZIP_APP gzip REQUIRED)
# Tests defined in this directory
set(ALL_LOG4CXX_TESTS
autoconfiguretestcase
asyncappendertestcase
consoleappendertestcase
decodingtest
encodingtest
fileappendertest
filetestcase
hexdumptestcase
hierarchytest
hierarchythresholdtestcase
jsonlayouttest
l7dtestcase
leveltestcase
levelchangetestcase
loggertestcase
mdctestcase
minimumtestcase
ndctestcase
patternlayouttest
propertyconfiguratortest
rollingfileappendertestcase
streamtestcase
locationtest
locationdisabledtest
terminationtestcase
)
if(${ENABLE_FMT_LAYOUT})
set(ALL_LOG4CXX_TESTS ${ALL_LOG4CXX_TESTS} fmttest)
endif()
if(${ENABLE_MULTITHREAD_TEST})
set(ALL_LOG4CXX_TESTS ${ALL_LOG4CXX_TESTS} multithreadtest)
endif()
if(${LOG4CXX_EVENTS_AT_EXIT})
set(ALL_LOG4CXX_TESTS ${ALL_LOG4CXX_TESTS} eventsatexittest)
endif()
foreach(fileName IN LISTS ALL_LOG4CXX_TESTS)
add_executable(${fileName} "${fileName}.cpp")
endforeach()
target_sources(rollingfileappendertestcase PRIVATE fileappendertestcase.cpp)
# Tests defined in subdirectories
add_subdirectory(helpers)
if(LOG4CXX_DOMCONFIGURATOR_SUPPORT)
add_subdirectory(customlogger)
add_subdirectory(xml)
endif()
if(HAS_ODBC)
add_subdirectory(db)
endif()
add_subdirectory(defaultinit)
add_subdirectory(filter)
add_subdirectory(net)
if(WIN32)
add_subdirectory(nt)
endif()
add_subdirectory(pattern)
add_subdirectory(rolling)
add_subdirectory(varia)
add_subdirectory(throughput)
add_subdirectory(benchmark)
if( WIN32 )
include(win32_target_environment_path)
get_target_environment_path(ESCAPED_PATH)
elseif(CMAKE_BUILD_TYPE)
string(TOUPPER ${CMAKE_BUILD_TYPE} UPPER_BUILD_TYPE)
if (UPPER_BUILD_TYPE STREQUAL "DEBUG")
set(TEST_COMPILE_DEFINITIONS _DEBUG)
endif()
else()
set(TEST_COMPILE_DEFINITIONS _DEBUG)
endif()
get_filename_component(UNIT_TEST_WORKING_DIR ../resources ABSOLUTE)
if(LOG4CXX_CFSTRING)
set(CFSTR_TESTS filetestcase messagebuffertest leveltestcase streamtestcase transcodertestcase)
endif()
foreach(testName IN LISTS ALL_LOG4CXX_TESTS)
if (${testName} IN_LIST CFSTR_TESTS)
if(APPLE)
target_compile_options(${testName} PRIVATE "-fconstant-cfstrings")
target_link_libraries(${testName} PRIVATE "-framework CoreFoundation")
else()
target_link_libraries(${testName} PRIVATE MockCoreFoundation)
endif()
endif()
target_compile_definitions(${testName} PRIVATE ${TEST_COMPILE_DEFINITIONS} ${LOG4CXX_COMPILE_DEFINITIONS} ${APR_COMPILE_DEFINITIONS} ${APR_UTIL_COMPILE_DEFINITIONS} )
target_include_directories(${testName} PRIVATE ${CMAKE_CURRENT_LIST_DIR} $<TARGET_PROPERTY:log4cxx,INCLUDE_DIRECTORIES>)
target_link_libraries(${testName} PRIVATE testingFramework testingUtilities log4cxx ${APR_LIBRARIES} ${APR_SYSTEM_LIBS} Threads::Threads ${ODBC_LIBRARIES} )
if(HAS_LIBESMTP)
target_link_libraries(${testName} PRIVATE ${ESMTP_LIBRARIES})
endif()
add_test(NAME ${testName}
COMMAND ${testName} -v
WORKING_DIRECTORY ${UNIT_TEST_WORKING_DIR}
)
set_tests_properties( ${testName} PROPERTIES TIMEOUT 120 )
if(WIN32)
set_target_properties(${testName} PROPERTIES
VS_DEBUGGER_WORKING_DIRECTORY ${UNIT_TEST_WORKING_DIR}
FOLDER UnitTests
)
set_target_properties(${testName} PROPERTIES
VS_DEBUGGER_COMMAND_ARGUMENTS "-v"
)
if(${testName} STREQUAL socketservertestcase)
set_target_properties(${testName} PROPERTIES
VS_DEBUGGER_ENVIRONMENT "SOCKET_SERVER_PARAMETER_FILE=${START_SOCKET_SERVER_PARAMETER_FILE}\nPATH=${ESCAPED_PATH}"
)
set_tests_properties(socketservertestcase PROPERTIES
ENVIRONMENT "SOCKET_SERVER_PARAMETER_FILE=${START_SOCKET_SERVER_PARAMETER_FILE};PATH=${ESCAPED_PATH}"
)
elseif(${testName} STREQUAL optionconvertertestcase)
set_target_properties(${testName} PROPERTIES
VS_DEBUGGER_ENVIRONMENT "TOTO=wonderful\nkey1=value1\nkey2=value2\nPATH=${ESCAPED_PATH}"
)
set_tests_properties(${testName} PROPERTIES
ENVIRONMENT "TOTO=wonderful;key1=value1;key2=value2;PATH=${ESCAPED_PATH}"
)
else()
set_target_properties(${testName} PROPERTIES
VS_DEBUGGER_ENVIRONMENT "key1=value1\nkey2=value2\nPATH=${ESCAPED_PATH}"
)
set_tests_properties(${testName} PROPERTIES
ENVIRONMENT "key1=value1;key2=value2;PATH=${ESCAPED_PATH}"
)
endif()
if(NOT BUILD_SHARED_LIBS)
# cmake selects a multi-threaded dynamically-linked runtime library by default
# (i.e. MSVC_RUNTIME_LIBRARY target property default value is "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
# APR static libraries specify the MSVC statically-linked runtime as the default library
# Use the MSVC statically-linked runtime to prevent the warning message 'LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs'
set_target_properties(${testName} PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
else()
if(${testName} STREQUAL socketservertestcase)
set_tests_properties(socketservertestcase PROPERTIES
ENVIRONMENT "SOCKET_SERVER_PARAMETER_FILE=${START_SOCKET_SERVER_PARAMETER_FILE}"
)
elseif(${testName} STREQUAL optionconvertertestcase)
set_tests_properties(optionconvertertestcase PROPERTIES
ENVIRONMENT "TOTO=wonderful;key1=value1;key2=value2"
)
else()
set_tests_properties(${testName} PROPERTIES
ENVIRONMENT "key1=value1;key2=value2"
)
endif()
endif()
endforeach()
target_compile_definitions(locationdisabledtest PRIVATE LOG4CXX_DISABLE_LOCATION_INFO)