Skip to content

Commit

Permalink
test: add cmocka to perform unit-testing
Browse files Browse the repository at this point in the history
Signed-off-by: Daniel Skinstad Drabitzius <[email protected]>
  • Loading branch information
danielskinstad committed Aug 23, 2024
1 parent b872082 commit 9120eda
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 0 deletions.
24 changes: 24 additions & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,27 @@ test:smoke-build:
-DCONFIG_MENDER_PROVIDES_DEPENDS=ON
- cmake --build build --parallel $(nproc --all)
- ./build/mender-mcu-client.elf --help

test:unit:
stage: test
image: debian:12-slim
needs: []
before_script:
- apt-get update && apt-get install -y git cmake libcurl4-openssl-dev libcjson-dev libmbedtls-dev
script:
- cmake -B build tests
-DCONFIG_MENDER_PLATFORM_FLASH_TYPE="posix"
-DCONFIG_MENDER_PLATFORM_LOG_TYPE="posix"
-DCONFIG_MENDER_PLATFORM_NET_TYPE="generic/curl"
-DCONFIG_MENDER_PLATFORM_SCHEDULER_TYPE="posix"
-DCONFIG_MENDER_PLATFORM_STORAGE_TYPE="posix"
-DCONFIG_MENDER_PLATFORM_TLS_TYPE="generic/mbedtls"
-DCONFIG_MENDER_CLIENT_ADD_ON_INVENTORY=ON
-DCONFIG_MENDER_CLIENT_ADD_ON_CONFIGURE=OFF
-DCONFIG_MENDER_CLIENT_CONFIGURE_STORAGE=OFF
-DCONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT=OFF
-DCONFIG_MENDER_FULL_PARSE_ARTIFACT=ON
-DCONFIG_MENDER_PROVIDES_DEPENDS=ON
-DBUILD_TESTS=ON
- cmake --build build --parallel $(nproc --all)
- ctest --test-dir build/tests/
7 changes: 7 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,13 @@ if (CONFIG_MENDER_PLATFORM_TLS_TYPE STREQUAL "mbedtls")
endif()
endif()

# cmocka
if (BUILD_TESTS)
include(cmake/FetchCMocka.cmake)
enable_testing()
add_subdirectory(tests)
endif(BUILD_TESTS)

# Define version
file(STRINGS "${CMAKE_CURRENT_LIST_DIR}/VERSION" MENDER_CLIENT_VERSION)
add_definitions("-DMENDER_CLIENT_VERSION=\"${MENDER_CLIENT_VERSION}\"")
22 changes: 22 additions & 0 deletions tests/cmake/FetchCMocka.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#https://github.com/OlivierLDff/cmocka-cmake-example
include(FetchContent)

# Declare our target. We want the lastest stable version, not the master.
# Also specify GIT_SHALLOW to avoid cloning branch we don't care about
FetchContent_Declare(
cmocka
GIT_REPOSITORY https://git.cryptomilk.org/projects/cmocka.git
GIT_TAG cmocka-1.1.5
GIT_SHALLOW 1
)

# We want to link to cmocka-static, so we need to set this option before calling the FetchContent_MakeAvailable
# We also don't care about example and tests
set(WITH_STATIC_LIB ON CACHE BOOL "CMocka: Build with a static library" FORCE)
set(WITH_CMOCKERY_SUPPORT OFF CACHE BOOL "CMocka: Install a cmockery header" FORCE)
set(WITH_EXAMPLES OFF CACHE BOOL "CMocka: Build examples" FORCE)
set(UNIT_TESTING OFF CACHE BOOL "CMocka: Build with unit testing" FORCE)
set(PICKY_DEVELOPER OFF CACHE BOOL "CMocka: Build with picky developer flags" FORCE)

# Download cmocka, and execute its cmakelists.txt
FetchContent_MakeAvailable(cmocka)
15 changes: 15 additions & 0 deletions tests/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
include_directories(${CMAKE_CURRENT_LIST_DIR}/../../include)
set(MCU_LIBRARIES "mender-mcu-client;pthread;cjson;mbedtls;mbedx509;mbedcrypto")

# Add tests by adding the target name to this list
# Example:
# list(APPEND TEST_TARGETS mender_test_target)

foreach(TEST_TARGET IN LISTS TEST_TARGETS)
add_cmocka_test(
${TEST_TARGET}
SOURCES ${TEST_TARGET}.c
LINK_LIBRARIES ${CMOCKA_LIBRARIES} ${MCU_LIBRARIES})

target_link_libraries(${TEST_TARGET} PRIVATE cmocka-static)
endforeach()

0 comments on commit 9120eda

Please sign in to comment.