blob: cc2cf0604fe226b1947a79099adbaa37f348f005 [file] [log] [blame]
Minos Galanakis6aab5b72024-07-25 14:24:37 +01001# components-configuration.sh
2#
3# Copyright The Mbed TLS Contributors
4# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
5
Minos Galanakis609f7492024-07-31 16:39:28 +01006# This file contains test components that are executed by all.sh
Minos Galanakis6aab5b72024-07-25 14:24:37 +01007
8################################################################
9#### Configuration Testing
10################################################################
11
Minos Galanakis31b7a0c2024-07-26 17:24:23 +010012component_test_default_out_of_box () {
13 msg "build: make, default config (out-of-box)" # ~1min
14 make
15 # Disable fancy stuff
16 unset MBEDTLS_TEST_OUTCOME_FILE
17
18 msg "test: main suites make, default config (out-of-box)" # ~10s
19 make test
20
21 msg "selftest: make, default config (out-of-box)" # ~10s
22 programs/test/selftest
23
24 msg "program demos: make, default config (out-of-box)" # ~10s
25 tests/scripts/run_demos.py
26}
27
28component_test_default_cmake_gcc_asan () {
29 msg "build: cmake, gcc, ASan" # ~ 1 min 50s
30 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan .
31 make
32
33 msg "test: main suites (inc. selftests) (ASan build)" # ~ 50s
34 make test
35
36 msg "program demos (ASan build)" # ~10s
37 tests/scripts/run_demos.py
38
39 msg "test: selftest (ASan build)" # ~ 10s
40 programs/test/selftest
41
42 msg "test: metatests (GCC, ASan build)"
43 tests/scripts/run-metatests.sh any asan poison
44
45 msg "test: ssl-opt.sh (ASan build)" # ~ 1 min
46 tests/ssl-opt.sh
47
48 msg "test: compat.sh (ASan build)" # ~ 6 min
49 tests/compat.sh
50
51 msg "test: context-info.sh (ASan build)" # ~ 15 sec
52 tests/context-info.sh
53}
54
55component_test_default_cmake_gcc_asan_new_bignum () {
56 msg "build: cmake, gcc, ASan" # ~ 1 min 50s
57 scripts/config.py set MBEDTLS_ECP_WITH_MPI_UINT
58 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan .
59 make
60
61 msg "test: main suites (inc. selftests) (ASan build)" # ~ 50s
62 make test
63
64 msg "test: selftest (ASan build)" # ~ 10s
65 programs/test/selftest
66
67 msg "test: ssl-opt.sh (ASan build)" # ~ 1 min
68 tests/ssl-opt.sh
69
70 msg "test: compat.sh (ASan build)" # ~ 6 min
71 tests/compat.sh
72
73 msg "test: context-info.sh (ASan build)" # ~ 15 sec
74 tests/context-info.sh
75}
76
77component_test_full_cmake_gcc_asan () {
78 msg "build: full config, cmake, gcc, ASan"
79 scripts/config.py full
80 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan .
81 make
82
83 msg "test: main suites (inc. selftests) (full config, ASan build)"
84 make test
85
86 msg "test: selftest (full config, ASan build)" # ~ 10s
87 programs/test/selftest
88
89 msg "test: ssl-opt.sh (full config, ASan build)"
90 tests/ssl-opt.sh
91
92 # Note: the next two invocations cover all compat.sh test cases.
93 # We should use the same here and in basic-build-test.sh.
94 msg "test: compat.sh: default version (full config, ASan build)"
95 tests/compat.sh -e 'ARIA\|CHACHA'
96
97 msg "test: compat.sh: next: ARIA, Chacha (full config, ASan build)"
98 env OPENSSL="$OPENSSL_NEXT" tests/compat.sh -e '^$' -f 'ARIA\|CHACHA'
99
100 msg "test: context-info.sh (full config, ASan build)" # ~ 15 sec
101 tests/context-info.sh
102}
103
104component_test_full_cmake_gcc_asan_new_bignum () {
105 msg "build: full config, cmake, gcc, ASan"
106 scripts/config.py full
107 scripts/config.py set MBEDTLS_ECP_WITH_MPI_UINT
108 CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan .
109 make
110
111 msg "test: main suites (inc. selftests) (full config, new bignum, ASan)"
112 make test
113
114 msg "test: selftest (full config, new bignum, ASan)" # ~ 10s
115 programs/test/selftest
116
117 msg "test: ssl-opt.sh (full config, new bignum, ASan)"
118 tests/ssl-opt.sh
119
120 # Note: the next two invocations cover all compat.sh test cases.
121 # We should use the same here and in basic-build-test.sh.
122 msg "test: compat.sh: default version (full config, new bignum, ASan)"
123 tests/compat.sh -e 'ARIA\|CHACHA'
124
125 msg "test: compat.sh: next: ARIA, Chacha (full config, new bignum, ASan)"
126 env OPENSSL="$OPENSSL_NEXT" tests/compat.sh -e '^$' -f 'ARIA\|CHACHA'
127
128 msg "test: context-info.sh (full config, new bignum, ASan)" # ~ 15 sec
129 tests/context-info.sh
130}
131
Minos Galanakis31b7a0c2024-07-26 17:24:23 +0100132component_test_full_cmake_clang () {
133 msg "build: cmake, full config, clang" # ~ 50s
134 scripts/config.py full
135 CC=clang CXX=clang cmake -D CMAKE_BUILD_TYPE:String=Release -D ENABLE_TESTING=On -D TEST_CPP=1 .
136 make
137
138 msg "test: main suites (full config, clang)" # ~ 5s
139 make test
140
141 msg "test: cpp_dummy_build (full config, clang)" # ~ 1s
142 programs/test/cpp_dummy_build
143
144 msg "test: metatests (clang)"
145 tests/scripts/run-metatests.sh any pthread
146
147 msg "program demos (full config, clang)" # ~10s
148 tests/scripts/run_demos.py
149
150 msg "test: psa_constant_names (full config, clang)" # ~ 1s
Valerio Setti2ef55352025-01-29 15:16:50 +0100151 $FRAMEWORK/scripts/test_psa_constant_names.py
Minos Galanakis31b7a0c2024-07-26 17:24:23 +0100152
153 msg "test: ssl-opt.sh default, ECJPAKE, SSL async (full config)" # ~ 1s
154 tests/ssl-opt.sh -f 'Default\|ECJPAKE\|SSL async private'
155}
156
157component_test_default_no_deprecated () {
158 # Test that removing the deprecated features from the default
159 # configuration leaves something consistent.
160 msg "build: make, default + MBEDTLS_DEPRECATED_REMOVED" # ~ 30s
161 scripts/config.py set MBEDTLS_DEPRECATED_REMOVED
162 make CFLAGS='-O -Werror -Wall -Wextra'
163
164 msg "test: make, default + MBEDTLS_DEPRECATED_REMOVED" # ~ 5s
165 make test
166}
167
168component_test_full_no_deprecated () {
169 msg "build: make, full_no_deprecated config" # ~ 30s
170 scripts/config.py full_no_deprecated
171 make CFLAGS='-O -Werror -Wall -Wextra'
172
173 msg "test: make, full_no_deprecated config" # ~ 5s
174 make test
175
176 msg "test: ensure that X509 has no direct dependency on BIGNUM_C"
177 not grep mbedtls_mpi library/libmbedx509.a
178}
179
180component_test_full_no_deprecated_deprecated_warning () {
181 # Test that there is nothing deprecated in "full_no_deprecated".
182 # A deprecated feature would trigger a warning (made fatal) from
183 # MBEDTLS_DEPRECATED_WARNING.
184 msg "build: make, full_no_deprecated config, MBEDTLS_DEPRECATED_WARNING" # ~ 30s
185 scripts/config.py full_no_deprecated
186 scripts/config.py unset MBEDTLS_DEPRECATED_REMOVED
187 scripts/config.py set MBEDTLS_DEPRECATED_WARNING
188 make CFLAGS='-O -Werror -Wall -Wextra'
189
190 msg "test: make, full_no_deprecated config, MBEDTLS_DEPRECATED_WARNING" # ~ 5s
191 make test
192}
193
194component_test_full_deprecated_warning () {
195 # Test that when MBEDTLS_DEPRECATED_WARNING is enabled, the build passes
196 # with only certain whitelisted types of warnings.
197 msg "build: make, full config + MBEDTLS_DEPRECATED_WARNING, expect warnings" # ~ 30s
198 scripts/config.py full
199 scripts/config.py set MBEDTLS_DEPRECATED_WARNING
200 # Expect warnings from '#warning' directives in check_config.h.
201 # Note that gcc is required to allow the use of -Wno-error=cpp, which allows us to
202 # display #warning messages without them being treated as errors.
203 make CC=gcc CFLAGS='-O -Werror -Wall -Wextra -Wno-error=cpp' lib programs
204
205 msg "build: make tests, full config + MBEDTLS_DEPRECATED_WARNING, expect warnings" # ~ 30s
206 # Set MBEDTLS_TEST_DEPRECATED to enable tests for deprecated features.
207 # By default those are disabled when MBEDTLS_DEPRECATED_WARNING is set.
208 # Expect warnings from '#warning' directives in check_config.h and
209 # from the use of deprecated functions in test suites.
210 make CC=gcc CFLAGS='-O -Werror -Wall -Wextra -Wno-error=deprecated-declarations -Wno-error=cpp -DMBEDTLS_TEST_DEPRECATED' tests
211
212 msg "test: full config + MBEDTLS_TEST_DEPRECATED" # ~ 30s
213 make test
214
215 msg "program demos: full config + MBEDTLS_TEST_DEPRECATED" # ~10s
216 tests/scripts/run_demos.py
217}
218
219component_build_baremetal () {
220 msg "build: make, baremetal config"
221 scripts/config.py baremetal
David Horstmann5b93d972024-10-31 15:36:05 +0000222 make CFLAGS="-O1 -Werror -I$PWD/framework/tests/include/baremetal-override/"
Minos Galanakis31b7a0c2024-07-26 17:24:23 +0100223}
224
225support_build_baremetal () {
226 # Older Glibc versions include time.h from other headers such as stdlib.h,
227 # which makes the no-time.h-in-baremetal check fail. Ubuntu 16.04 has this
228 # problem, Ubuntu 18.04 is ok.
229 ! grep -q -F time.h /usr/include/x86_64-linux-gnu/sys/types.h
230}
231
Minos Galanakisf78447f2024-07-26 20:49:51 +0100232component_build_tfm () {
Minos Galanakis31b7a0c2024-07-26 17:24:23 +0100233 # Check that the TF-M configuration can build cleanly with various
234 # warning flags enabled. We don't build or run tests, since the
235 # TF-M configuration needs a TF-M platform. A tweaked version of
236 # the configuration that works on mainstream platforms is in
237 # configs/config-tfm.h, tested via test-ref-configs.pl.
238 cp configs/config-tfm.h "$CONFIG_H"
Harry Ramsey94c386a2025-01-16 16:08:34 +0000239 cp tf-psa-crypto/configs/ext/crypto_config_profile_medium.h "$CRYPTO_CONFIG_H"
Minos Galanakis31b7a0c2024-07-26 17:24:23 +0100240
241 msg "build: TF-M config, clang, armv7-m thumb2"
David Horstmann5b93d972024-10-31 15:36:05 +0000242 make lib CC="clang" CFLAGS="--target=arm-linux-gnueabihf -march=armv7-m -mthumb -Os -std=c99 -Werror -Wall -Wextra -Wwrite-strings -Wpointer-arith -Wimplicit-fallthrough -Wshadow -Wvla -Wformat=2 -Wno-format-nonliteral -Wshadow -Wasm-operand-widths -Wunused -I../framework/tests/include/spe"
Minos Galanakis31b7a0c2024-07-26 17:24:23 +0100243
244 msg "build: TF-M config, gcc native build"
245 make clean
David Horstmann5b93d972024-10-31 15:36:05 +0000246 make lib CC="gcc" CFLAGS="-Os -std=c99 -Werror -Wall -Wextra -Wwrite-strings -Wpointer-arith -Wshadow -Wvla -Wformat=2 -Wno-format-nonliteral -Wshadow -Wformat-signedness -Wlogical-op -I../framework/tests/include/spe"
Minos Galanakis31b7a0c2024-07-26 17:24:23 +0100247}
248
Minos Galanakis9ceb2c32024-08-01 12:28:19 +0100249component_test_malloc_0_null () {
250 msg "build: malloc(0) returns NULL (ASan+UBSan build)"
251 scripts/config.py full
Ronald Cron42ba65d2024-12-05 10:54:33 +0100252 make CC=$ASAN_CC CFLAGS="'-DTF_PSA_CRYPTO_USER_CONFIG_FILE=\"$PWD/tests/configs/user-config-malloc-0-null.h\"' $ASAN_CFLAGS" LDFLAGS="$ASAN_CFLAGS"
Minos Galanakis9ceb2c32024-08-01 12:28:19 +0100253
254 msg "test: malloc(0) returns NULL (ASan+UBSan build)"
255 make test
256
257 msg "selftest: malloc(0) returns NULL (ASan+UBSan build)"
258 # Just the calloc selftest. "make test" ran the others as part of the
259 # test suites.
260 programs/test/selftest calloc
261
262 msg "test ssl-opt.sh: malloc(0) returns NULL (ASan+UBSan build)"
263 # Run a subset of the tests. The choice is a balance between coverage
264 # and time (including time indirectly wasted due to flaky tests).
265 # The current choice is to skip tests whose description includes
266 # "proxy", which is an approximation of skipping tests that use the
267 # UDP proxy, which tend to be slower and flakier.
268 tests/ssl-opt.sh -e 'proxy'
269}
270
Minos Galanakis31b7a0c2024-07-26 17:24:23 +0100271component_test_no_platform () {
272 # Full configuration build, without platform support, file IO and net sockets.
273 # This should catch missing mbedtls_printf definitions, and by disabling file
274 # IO, it should catch missing '#include <stdio.h>'
275 msg "build: full config except platform/fsio/net, make, gcc, C99" # ~ 30s
276 scripts/config.py full_no_platform
277 scripts/config.py unset MBEDTLS_PLATFORM_C
278 scripts/config.py unset MBEDTLS_NET_C
279 scripts/config.py unset MBEDTLS_FS_IO
Minos Galanakis31b7a0c2024-07-26 17:24:23 +0100280 scripts/config.py unset MBEDTLS_PSA_CRYPTO_STORAGE_C
281 scripts/config.py unset MBEDTLS_PSA_ITS_FILE_C
282 scripts/config.py unset MBEDTLS_ENTROPY_NV_SEED
Valerio Setti7fb7fda2025-04-22 16:28:55 +0200283 # Use the test alternative implementation of mbedtls_platform_get_entropy()
284 # which is provided in "framework/tests/src/fake_external_rng_for_test.c"
285 # since the default one is excluded in this scenario.
286 scripts/config.py set MBEDTLS_PLATFORM_GET_ENTROPY_ALT
Minos Galanakis31b7a0c2024-07-26 17:24:23 +0100287 # Note, _DEFAULT_SOURCE needs to be defined for platforms using glibc version >2.19,
288 # to re-enable platform integration features otherwise disabled in C99 builds
289 make CC=gcc CFLAGS='-Werror -Wall -Wextra -std=c99 -pedantic -Os -D_DEFAULT_SOURCE' lib programs
290 make CC=gcc CFLAGS='-Werror -Wall -Wextra -Os' test
291}
292
293component_build_mbedtls_config_file () {
294 msg "build: make with MBEDTLS_CONFIG_FILE" # ~40s
295 scripts/config.py -w full_config.h full
296 echo '#error "MBEDTLS_CONFIG_FILE is not working"' >"$CONFIG_H"
297 make CFLAGS="-I '$PWD' -DMBEDTLS_CONFIG_FILE='\"full_config.h\"'"
298 # Make sure this feature is enabled. We'll disable it in the next phase.
Minos Galanakis981d7d62024-10-10 02:16:12 +0100299 programs/test/query_compile_time_config MBEDTLS_SSL_ALL_ALERT_MESSAGES
Minos Galanakis31b7a0c2024-07-26 17:24:23 +0100300 make clean
301
302 msg "build: make with MBEDTLS_CONFIG_FILE + MBEDTLS_USER_CONFIG_FILE"
303 # In the user config, disable one feature (for simplicity, pick a feature
304 # that nothing else depends on).
Minos Galanakis981d7d62024-10-10 02:16:12 +0100305 echo '#undef MBEDTLS_SSL_ALL_ALERT_MESSAGES' >user_config.h
Minos Galanakis31b7a0c2024-07-26 17:24:23 +0100306 make CFLAGS="-I '$PWD' -DMBEDTLS_CONFIG_FILE='\"full_config.h\"' -DMBEDTLS_USER_CONFIG_FILE='\"user_config.h\"'"
Minos Galanakis981d7d62024-10-10 02:16:12 +0100307 not programs/test/query_compile_time_config MBEDTLS_SSL_ALL_ALERT_MESSAGES
Minos Galanakis31b7a0c2024-07-26 17:24:23 +0100308
309 rm -f user_config.h full_config.h
310}
Minos Galanakis6aab5b72024-07-25 14:24:37 +0100311
Minos Galanakis1c26ef52024-08-01 11:58:16 +0100312component_test_no_strings () {
313 msg "build: no strings" # ~10s
314 scripts/config.py full
315 # Disable options that activate a large amount of string constants.
316 scripts/config.py unset MBEDTLS_DEBUG_C
317 scripts/config.py unset MBEDTLS_ERROR_C
318 scripts/config.py set MBEDTLS_ERROR_STRERROR_DUMMY
319 scripts/config.py unset MBEDTLS_VERSION_FEATURES
320 make CFLAGS='-Werror -Os'
321
322 msg "test: no strings" # ~ 10s
323 make test
Minos Galanakis9ceb2c32024-08-01 12:28:19 +0100324}
325
326component_test_memory_buffer_allocator_backtrace () {
327 msg "build: default config with memory buffer allocator and backtrace enabled"
328 scripts/config.py set MBEDTLS_MEMORY_BUFFER_ALLOC_C
329 scripts/config.py set MBEDTLS_PLATFORM_MEMORY
330 scripts/config.py set MBEDTLS_MEMORY_BACKTRACE
331 scripts/config.py set MBEDTLS_MEMORY_DEBUG
332 cmake -DCMAKE_BUILD_TYPE:String=Release .
333 make
334
335 msg "test: MBEDTLS_MEMORY_BUFFER_ALLOC_C and MBEDTLS_MEMORY_BACKTRACE"
336 make test
337}
338
339component_test_memory_buffer_allocator () {
340 msg "build: default config with memory buffer allocator"
341 scripts/config.py set MBEDTLS_MEMORY_BUFFER_ALLOC_C
342 scripts/config.py set MBEDTLS_PLATFORM_MEMORY
343 cmake -DCMAKE_BUILD_TYPE:String=Release .
344 make
345
346 msg "test: MBEDTLS_MEMORY_BUFFER_ALLOC_C"
347 make test
348
349 msg "test: ssl-opt.sh, MBEDTLS_MEMORY_BUFFER_ALLOC_C"
350 # MBEDTLS_MEMORY_BUFFER_ALLOC is slow. Skip tests that tend to time out.
351 tests/ssl-opt.sh -e '^DTLS proxy'
352}