1
1
cmake_minimum_required (VERSION 3.5 )
2
2
if (ESP_PLATFORM )
3
+ # Used for reconfiguration of the project
4
+ # Executed by idf.py reconfigure
3
5
set (EXTRA_COMPONENT_DIRS ../../ )
4
6
include ($ENV{IDF_PATH} /tools/cmake/project.cmake )
5
7
project (mdns_host_unit_test_config )
6
8
return ()
7
- endif ()
9
+ endif ()
8
10
9
11
project (mdns_host_unit_test C )
10
12
13
+ # Set ENABLE_UNIT_TESTS with a default of OFF
14
+ if (NOT DEFINED UNIT_TESTS )
15
+ set (UNIT_TESTS "OFF" CACHE STRING "Unit tests: OFF, test_receiver, test_sender" )
16
+ else ()
17
+ set (ENABLE_UNIT_TESTS 1 )
18
+ message (STATUS "Unit testing enabled with UNIT_TESTS=${UNIT_TESTS} " )
19
+ endif ()
20
+
11
21
# Set variables for directories
12
22
set (TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR} )
23
+ set (STUB_DIR ${TEST_DIR} /stubs )
24
+ set (MDNS_DIR ${TEST_DIR} /../../ )
13
25
set (COMPONENT_DIR ${CMAKE_CURRENT_SOURCE_DIR} /../../ )
14
26
set (ESP_NETIF_LINUX_DIR ${CMAKE_CURRENT_SOURCE_DIR} /../host_test/components/esp_netif_linux/include )
15
27
set (COMMON_COMPONENTS_DIR ${CMAKE_CURRENT_SOURCE_DIR} /../../../../common_components/linux_compat/ )
16
28
set (IDF_COMPONENTS_DIR "$ENV{IDF_PATH} /components" )
17
29
18
- # Debug prints to see directory values
19
- message (STATUS "TEST_DIR: ${TEST_DIR} " )
20
- message (STATUS "COMPONENT_DIR: ${COMPONENT_DIR} " )
21
-
22
- # Include directories for the test files and other required files
23
30
include_directories (
24
31
${TEST_DIR}
25
- ${TEST_DIR} /stubs
32
+ ${STUB_DIR}
26
33
${TEST_DIR} /build/config
27
34
${COMMON_COMPONENTS_DIR} /freertos/include
28
35
${COMMON_COMPONENTS_DIR} /esp_timer/include
@@ -40,175 +47,39 @@ include_directories(
40
47
${COMPONENT_DIR} /private_include
41
48
)
42
49
43
- # Unity testing framework
44
- set (UNITY_DIR "$ENV{IDF_PATH} /components/unity" )
45
- include_directories (${UNITY_DIR} /unity/src )
46
-
47
- # Add option to enable unit testing
48
- option (ENABLE_UNIT_TESTS "Enable Unity-based unit tests" OFF )
49
-
50
- # Add preprocessor definition based on the option
51
- if (ENABLE_UNIT_TESTS )
52
- add_definitions (-DENABLE_UNIT_TESTS )
53
- endif ()
54
-
55
- # Add CMock options
56
- if (ENABLE_UNIT_TESTS )
57
- # CMock paths
58
- set (CMOCK_DIR "$ENV{IDF_PATH} /components/cmock" )
59
-
60
- # Use ruby command directly instead of looking for ruby.exe
61
- find_program (RUBY_EXECUTABLE ruby )
62
- if (NOT RUBY_EXECUTABLE )
63
- message (FATAL_ERROR "Ruby is required for CMock but was not found!" )
64
- endif ()
65
-
66
- # Define list of files to mock
67
- set (MOCK_FILES
68
- "mdns_pcb"
69
- "mdns_send"
70
- # Add more files here as needed, without .h extension
71
- )
72
-
73
- # Verify headers exist and create mock commands for each
74
- foreach (mock_file ${MOCK_FILES} )
75
- set (header_path "${COMPONENT_DIR} /private_include/${mock_file} .h" )
76
- if (NOT EXISTS ${header_path} )
77
- message (FATAL_ERROR "Cannot find ${mock_file} .h at ${header_path} " )
78
- endif ()
79
-
80
- list (APPEND MOCK_OUTPUTS
81
- ${CMAKE_CURRENT_BINARY_DIR} /mocks/mock_${mock_file}.c
82
- ${CMAKE_CURRENT_BINARY_DIR} /mocks/mock_${mock_file}.h
83
- )
84
-
85
- add_custom_command (
86
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /mocks/mock_${mock_file}.c
87
- ${CMAKE_CURRENT_BINARY_DIR} /mocks/mock_${mock_file}.h
88
- COMMAND ${RUBY_EXECUTABLE}
89
- ${CMOCK_DIR} /CMock/lib/cmock.rb
90
- -o${CMAKE_CURRENT_SOURCE_DIR}/cmock_config.yml
91
- ${header_path}
92
- DEPENDS ${header_path}
93
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
94
- COMMENT "Generating mock for ${mock_file} .h"
95
- )
96
- endforeach ()
97
-
98
- # Include CMock headers
99
- include_directories (
100
- ${CMOCK_DIR} /CMock/src
101
- ${CMAKE_CURRENT_BINARY_DIR} /mocks
102
- ${UNITY_DIR} /unity/src
103
- ${UNITY_DIR} /include
104
- )
105
-
106
- # Create directory for generated mocks
107
- file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /mocks )
108
-
109
- # Create CMock config file if it doesn't exist
110
- if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR} /cmock_config.yml )
111
- file (WRITE ${CMAKE_CURRENT_SOURCE_DIR} /cmock_config.yml
112
- "---
113
- :cmock:
114
- :mock_prefix: mock_
115
- :plugins:
116
- - :callback
117
- - :ignore
118
- - :expect_any_args
119
- - :array
120
- - :return_thru_ptr
121
- :strippables:
122
- - '(?:extern|static)\\ s+'
123
- :treat_as:
124
- uint8_t: HEX8
125
- uint16_t: HEX16
126
- uint32_t: UINT32
127
- int8_t: INT8
128
- bool: UINT8"
129
- )
130
- endif ()
131
- endif ()
132
-
133
50
# Source files
134
51
set (SOURCES
135
- ${CMAKE_CURRENT_SOURCE_DIR} /main.c
136
- ${CMAKE_CURRENT_SOURCE_DIR} /stubs/mdns_mem_caps.c
137
- ${CMAKE_CURRENT_SOURCE_DIR} /stubs/esp_idf.c
138
- ${CMAKE_CURRENT_SOURCE_DIR} /stubs/mdns_networking.c
139
- ${CMAKE_CURRENT_SOURCE_DIR} /stubs/mdns_engine.c
140
- ${CMAKE_CURRENT_SOURCE_DIR} /../../mdns_receive.c
141
- ${CMAKE_CURRENT_SOURCE_DIR} /../../mdns_utils.c
142
- ${CMAKE_CURRENT_SOURCE_DIR} /../../mdns_browser.c
143
- ${CMAKE_CURRENT_SOURCE_DIR} /../../mdns_querier.c
144
- ${CMAKE_CURRENT_SOURCE_DIR} /../../mdns_responder.c
145
- ${CMAKE_CURRENT_SOURCE_DIR} /../../mdns_send.c
146
- ${CMAKE_CURRENT_SOURCE_DIR} /../../mdns_pcb.c
147
- ${CMAKE_CURRENT_SOURCE_DIR} /../../mdns_netif.c
52
+ ${STUB_DIR} /mdns_mem_caps.c
53
+ ${STUB_DIR} /esp_idf.c
54
+ ${STUB_DIR} /mdns_networking.c
55
+ ${STUB_DIR} /mdns_engine.c
56
+ ${MDNS_DIR} /mdns_receive.c
57
+ ${MDNS_DIR} /mdns_utils.c
58
+ ${MDNS_DIR} /mdns_browser.c
59
+ ${MDNS_DIR} /mdns_querier.c
60
+ ${MDNS_DIR} /mdns_responder.c
61
+ ${MDNS_DIR} /mdns_send.c
62
+ ${MDNS_DIR} /mdns_pcb.c
63
+ ${MDNS_DIR} /mdns_netif.c
148
64
)
149
65
150
66
if (ENABLE_UNIT_TESTS )
151
- # Remove real implementations of mocked files
152
- foreach (mock_file ${MOCK_FILES} )
153
- list (REMOVE_ITEM SOURCES ${CMAKE_CURRENT_SOURCE_DIR} /../../${mock_file}.c )
154
- endforeach ()
155
-
156
- # Add test-related sources
157
- list (APPEND SOURCES
158
- ${UNITY_DIR} /unity/src/unity.c
159
- ${CMOCK_DIR} /CMock/src/cmock.c
160
- )
161
-
162
- # Add all generated mock files
163
- foreach (mock_file ${MOCK_FILES} )
164
- list (APPEND SOURCES ${CMAKE_CURRENT_BINARY_DIR} /mocks/mock_${mock_file}.c )
165
- endforeach ()
67
+ include (unity/unit_test.cmake )
68
+ else ()
69
+ list (APPEND SOURCES main.c )
166
70
endif ()
167
71
168
- # Enable sanitizers
169
- #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
170
- #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
171
-
172
- # Setting C flags with debug symbols and disable optimization for better debugging
173
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0" )
174
-
175
- # Create the test executable
176
72
add_executable (${PROJECT_NAME} ${SOURCES} )
177
73
74
+ # Add libbsd if available
178
75
find_library (LIB_BSD bsd )
179
76
if (LIB_BSD )
180
77
target_link_libraries (${PROJECT_NAME} PRIVATE ${LIB_BSD} )
181
78
elseif (NOT CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin" )
182
79
message (WARNING "Missing LIBBSD library. Install libbsd-dev package and/or check linker directories." )
183
80
endif ()
184
- # Setting C flags
185
- #set_target_properties(${PROJECT_NAME} PROPERTIES
186
- # C_STANDARD 99
187
- # COMPILE_FLAGS "-Wall -Werror"
188
- #)
189
81
190
82
# Enable testing if unit tests are enabled
191
83
if (ENABLE_UNIT_TESTS )
192
- enable_testing ()
193
- add_test (NAME ${PROJECT_NAME} COMMAND ${PROJECT_NAME} --test )
194
- endif ()
195
-
196
- # Add libbsd dependency
197
- #find_package(PkgConfig REQUIRED)
198
- #pkg_check_modules(LIBBSD REQUIRED libbsd-overlay)
199
-
200
- # Link against libbsd for strlcat
201
- #target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBBSD_LIBRARIES})
202
- #target_link_options(${PROJECT_NAME} PRIVATE -fsanitize=address -fsanitize=undefined)
203
- #target_compile_options(${PROJECT_NAME} PRIVATE -fsanitize=address -fsanitize=undefined)
204
-
205
- # Add include directories if needed
206
- #target_include_directories(${PROJECT_NAME} PRIVATE ${LIBBSD_INCLUDE_DIRS})
207
-
208
- # Add mock generation as dependency
209
- if (ENABLE_UNIT_TESTS )
210
- add_custom_target (generate_mocks
211
- DEPENDS ${MOCK_OUTPUTS}
212
- )
213
- add_dependencies (${PROJECT_NAME} generate_mocks )
84
+ include (unity/enable_testing.cmake )
214
85
endif ()
0 commit comments