Skip to content

Commit

Permalink
Add test executables for different configurations
Browse files Browse the repository at this point in the history
The same tests are compiled with different defines to make sure
that combinations of different configurations work properly.
  • Loading branch information
LukasWoodtli committed Nov 21, 2023
1 parent bd896d3 commit f306a29
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 23 deletions.
10 changes: 10 additions & 0 deletions .cmake-format
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,13 @@ with section("format"):
with section("markup"):
# What character to use for bulleted lists
bullet_char = '-'

additional_commands = {
"add_test_variant": {
"kwargs": {
"TARGET_NAME": '*',
"SOURCE_FILES": '*',
"COMPILE_DEFINITIONS": '*',
}
}
}
90 changes: 68 additions & 22 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ cmake_minimum_required(VERSION 3.13)
project(lwm2munittests C)

include(../wakaama.cmake)
include(tests.cmake)

add_executable(
lwm2munittests
set(TEST_SOURCES
block1tests.c
block2tests.c
cbor_tests.c
Expand All @@ -22,30 +22,76 @@ add_executable(
uritests.c
)

include(FindPkgConfig)
pkg_search_module(CUNIT REQUIRED IMPORTED_TARGET cunit)
target_link_libraries(lwm2munittests PkgConfig::CUNIT)
add_test_variant(
TARGET_NAME lwm2munittests
SOURCE_FILES ${TEST_SOURCES}
COMPILE_DEFINITIONS LWM2M_CLIENT_MODE
)

add_test_variant(
TARGET_NAME lwm2munittests_client_lwm2m_1_0
SOURCE_FILES ${TEST_SOURCES}
COMPILE_DEFINITIONS LWM2M_CLIENT_MODE LWM2M_VERSION_1_0
)

add_test_variant(
TARGET_NAME lwm2munittests_client_bootstrap
SOURCE_FILES ${TEST_SOURCES}
COMPILE_DEFINITIONS LWM2M_CLIENT_MODE LWM2M_BOOTSTRAP
)

add_test_variant(
TARGET_NAME lwm2munittests_server
SOURCE_FILES ${TEST_SOURCES}
COMPILE_DEFINITIONS LWM2M_SERVER_MODE LWM2M_WITH_LOGS
)

target_compile_definitions(
lwm2munittests PRIVATE LWM2M_CLIENT_MODE LWM2M_SERVER_MODE LWM2M_SUPPORT_TLV LWM2M_SUPPORT_JSON
LWM2M_SUPPORT_SENML_CBOR
add_test_variant(
TARGET_NAME lwm2munittests_server_formats
SOURCE_FILES ${TEST_SOURCES}
COMPILE_DEFINITIONS LWM2M_SERVER_MODE LWM2M_OLD_CONTENT_FORMAT_SUPPORT LWM2M_SUPPORT_SENML_JSON
)

# Our tests are designed for POSIX systems
target_compile_definitions(lwm2munittests PRIVATE _POSIX_C_SOURCE=200809)
add_test_variant(
TARGET_NAME lwm2munittests_bootstrap_server
SOURCE_FILES ${TEST_SOURCES}
COMPILE_DEFINITIONS LWM2M_BOOTSTRAP_SERVER_MODE
)

target_sources_wakaama(lwm2munittests)
target_sources_shared(lwm2munittests)
add_test_variant(
TARGET_NAME lwm2munittests_server_and_bootstrap_server
SOURCE_FILES ${TEST_SOURCES}
COMPILE_DEFINITIONS LWM2M_SERVER_MODE LWM2M_BOOTSTRAP_SERVER_MODE
)

if(SANITIZER)
target_compile_options(lwm2munittests PRIVATE -fsanitize=${SANITIZER} -fno-sanitize-recover=all)
target_link_options(lwm2munittests PRIVATE -fsanitize=${SANITIZER} -fno-sanitize-recover=all)
endif()
add_test_variant(
TARGET_NAME lwm2munittests_server_blocksize_16
SOURCE_FILES ${TEST_SOURCES}
COMPILE_DEFINITIONS LWM2M_CLIENT_MODE COAP_DEFAULT_BLOCK_SIZE=16
)

if(COVERAGE)
target_compile_options(lwm2munittests PRIVATE --coverage)
target_link_options(lwm2munittests PRIVATE --coverage)
endif()
add_test_variant(
TARGET_NAME lwm2munittests_server_blocksize_64
SOURCE_FILES ${TEST_SOURCES}
COMPILE_DEFINITIONS LWM2M_SERVER_MODE COAP_DEFAULT_BLOCK_SIZE=64
)

# Add our unit tests to the "test" target
add_test(NAME lwm2munittests_test COMMAND lwm2munittests)
add_test_variant(
TARGET_NAME lwm2munittests_server_blocksize_1024
SOURCE_FILES ${TEST_SOURCES}
COMPILE_DEFINITIONS LWM2M_SERVER_MODE COAP_DEFAULT_BLOCK_SIZE=1024
)

add_test_variant(
TARGET_NAME lwm2munittests_client_server_bootstrap_all_formats
SOURCE_FILES ${TEST_SOURCES}
COMPILE_DEFINITIONS
LWM2M_CLIENT_MODE
LWM2M_SERVER_MODE
LWM2M_BOOTSTRAP_SERVER_MODE
LWM2M_SERVER_MODE
LWM2M_WITH_LOGS
LWM2M_OLD_CONTENT_FORMAT_SUPPORT
LWM2M_SUPPORT_SENML_JSON
COAP_DEFAULT_BLOCK_SIZE=32
)
48 changes: 48 additions & 0 deletions tests/tests.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Run the unit tests with different configurations (defines)
# ~~~
# TARGET_NAME: The name of the test executable target
# SOURCE_FILES: Source files used for the test
# COMPILE_DEFINITIONS: Defines set for this test variant
function(add_test_variant)
set(oneValueArgs TARGET_NAME)
set(multiValueArgs SOURCE_FILES COMPILE_DEFINITIONS)
cmake_parse_arguments(ADD_TEST_VARIANT_ARG "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

add_executable(${ADD_TEST_VARIANT_ARG_TARGET_NAME})
target_sources(${ADD_TEST_VARIANT_ARG_TARGET_NAME} PRIVATE ${ADD_TEST_VARIANT_ARG_SOURCE_FILES})

# link CUnit
include(FindPkgConfig)
pkg_search_module(CUNIT
REQUIRED
IMPORTED_TARGET
cunit)
target_link_libraries(${ADD_TEST_VARIANT_ARG_TARGET_NAME} PkgConfig::CUNIT)

# Currently we require that TLV and JSON is available in all tests
target_compile_definitions(${ADD_TEST_VARIANT_ARG_TARGET_NAME} PRIVATE LWM2M_SUPPORT_TLV LWM2M_SUPPORT_JSON)
target_compile_definitions(${ADD_TEST_VARIANT_ARG_TARGET_NAME} PRIVATE ${ADD_TEST_VARIANT_ARG_COMPILE_DEFINITIONS})

# Our tests are designed for POSIX systems
target_compile_definitions(${ADD_TEST_VARIANT_ARG_TARGET_NAME} PRIVATE _POSIX_C_SOURCE=200809)

target_sources_wakaama(${ADD_TEST_VARIANT_ARG_TARGET_NAME})
target_sources_shared(${ADD_TEST_VARIANT_ARG_TARGET_NAME})

if(SANITIZER)
target_compile_options(
${ADD_TEST_VARIANT_ARG_TARGET_NAME} PRIVATE -fsanitize=${SANITIZER} -fno-sanitize-recover=all
)
target_link_options(
${ADD_TEST_VARIANT_ARG_TARGET_NAME} PRIVATE -fsanitize=${SANITIZER} -fno-sanitize-recover=all
)
endif()

if(COVERAGE)
target_compile_options(${ADD_TEST_VARIANT_ARG_TARGET_NAME} PRIVATE --coverage)
target_link_options(${ADD_TEST_VARIANT_ARG_TARGET_NAME} PRIVATE --coverage)
endif()

# Add our unit tests to the "test" target
add_test(NAME ${ADD_TEST_VARIANT_ARG_TARGET_NAME}_test COMMAND ${ADD_TEST_VARIANT_ARG_TARGET_NAME})
endfunction()
2 changes: 1 addition & 1 deletion tools/ci/run_ci.sh
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ function run_build() {
}

function run_tests() {
build-wakaama/tests/lwm2munittests
${OPT_WRAPPER_CMD} cmake --build build-wakaama --target test

mkdir -p "${REPO_ROOT_DIR}/build-wakaama/coverage"

Expand Down

0 comments on commit f306a29

Please sign in to comment.