-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #9444 from minosgalanakis/all-sh-separate-componen…
…ts_36bp Backport 3.6: Separate all.sh from its components
- Loading branch information
Showing
12 changed files
with
5,559 additions
and
5,451 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
# components-basic-checks.sh | ||
# | ||
# Copyright The Mbed TLS Contributors | ||
# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later | ||
|
||
# This file contains test components that are executed by all.sh | ||
|
||
################################################################ | ||
#### Basic checks | ||
################################################################ | ||
|
||
component_check_recursion () { | ||
msg "Check: recursion.pl" # < 1s | ||
tests/scripts/recursion.pl library/*.c | ||
} | ||
|
||
component_check_generated_files () { | ||
msg "Check: check-generated-files, files generated with make" # 2s | ||
make generated_files | ||
tests/scripts/check-generated-files.sh | ||
|
||
msg "Check: check-generated-files -u, files present" # 2s | ||
tests/scripts/check-generated-files.sh -u | ||
# Check that the generated files are considered up to date. | ||
tests/scripts/check-generated-files.sh | ||
|
||
msg "Check: check-generated-files -u, files absent" # 2s | ||
command make neat | ||
tests/scripts/check-generated-files.sh -u | ||
# Check that the generated files are considered up to date. | ||
tests/scripts/check-generated-files.sh | ||
|
||
# This component ends with the generated files present in the source tree. | ||
# This is necessary for subsequent components! | ||
} | ||
|
||
component_check_doxy_blocks () { | ||
msg "Check: doxygen markup outside doxygen blocks" # < 1s | ||
tests/scripts/check-doxy-blocks.pl | ||
} | ||
|
||
component_check_files () { | ||
msg "Check: file sanity checks (permissions, encodings)" # < 1s | ||
tests/scripts/check_files.py | ||
} | ||
|
||
component_check_changelog () { | ||
msg "Check: changelog entries" # < 1s | ||
rm -f ChangeLog.new | ||
scripts/assemble_changelog.py -o ChangeLog.new | ||
if [ -e ChangeLog.new ]; then | ||
# Show the diff for information. It isn't an error if the diff is | ||
# non-empty. | ||
diff -u ChangeLog ChangeLog.new || true | ||
rm ChangeLog.new | ||
fi | ||
} | ||
|
||
component_check_names () { | ||
msg "Check: declared and exported names (builds the library)" # < 3s | ||
tests/scripts/check_names.py -v | ||
} | ||
|
||
component_check_test_cases () { | ||
msg "Check: test case descriptions" # < 1s | ||
if [ $QUIET -eq 1 ]; then | ||
opt='--quiet' | ||
else | ||
opt='' | ||
fi | ||
tests/scripts/check_test_cases.py -q $opt | ||
unset opt | ||
} | ||
|
||
component_check_test_dependencies () { | ||
msg "Check: test case dependencies: legacy vs PSA" # < 1s | ||
# The purpose of this component is to catch unjustified dependencies on | ||
# legacy feature macros (MBEDTLS_xxx) in PSA tests. Generally speaking, | ||
# PSA test should use PSA feature macros (PSA_WANT_xxx, more rarely | ||
# MBEDTLS_PSA_xxx). | ||
# | ||
# Most of the time, use of legacy MBEDTLS_xxx macros are mistakes, which | ||
# this component is meant to catch. However a few of them are justified, | ||
# mostly by the absence of a PSA equivalent, so this component includes a | ||
# list of expected exceptions. | ||
|
||
found="check-test-deps-found-$$" | ||
expected="check-test-deps-expected-$$" | ||
|
||
# Find legacy dependencies in PSA tests | ||
grep 'depends_on' \ | ||
tests/suites/test_suite_psa*.data tests/suites/test_suite_psa*.function | | ||
grep -Eo '!?MBEDTLS_[^: ]*' | | ||
grep -v -e MBEDTLS_PSA_ -e MBEDTLS_TEST_ | | ||
sort -u > $found | ||
|
||
# Expected ones with justification - keep in sorted order by ASCII table! | ||
rm -f $expected | ||
# No PSA equivalent - WANT_KEY_TYPE_AES means all sizes | ||
echo "!MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH" >> $expected | ||
# No PSA equivalent - used to skip decryption tests in PSA-ECB, CBC/XTS/NIST_KW/DES | ||
echo "!MBEDTLS_BLOCK_CIPHER_NO_DECRYPT" >> $expected | ||
# MBEDTLS_ASN1_WRITE_C is used by import_rsa_made_up() in test_suite_psa_crypto | ||
# in order to build a fake RSA key of the wanted size based on | ||
# PSA_VENDOR_RSA_MAX_KEY_BITS. The legacy module is only used by | ||
# the test code and that's probably the most convenient way of achieving | ||
# the test's goal. | ||
echo "MBEDTLS_ASN1_WRITE_C" >> $expected | ||
# No PSA equivalent - we should probably have one in the future. | ||
echo "MBEDTLS_ECP_RESTARTABLE" >> $expected | ||
# No PSA equivalent - needed by some init tests | ||
echo "MBEDTLS_ENTROPY_NV_SEED" >> $expected | ||
# No PSA equivalent - required to run threaded tests. | ||
echo "MBEDTLS_THREADING_PTHREAD" >> $expected | ||
|
||
# Compare reality with expectation. | ||
# We want an exact match, to ensure the above list remains up-to-date. | ||
# | ||
# The output should be empty. When it's not: | ||
# - Each '+' line is a macro that was found but not expected. You want to | ||
# find where that macro occurs, and either replace it with PSA macros, or | ||
# add it to the exceptions list above with a justification. | ||
# - Each '-' line is a macro that was expected but not found; it means the | ||
# exceptions list above should be updated by removing that macro. | ||
diff -U0 $expected $found | ||
|
||
rm $found $expected | ||
} | ||
|
||
component_check_doxygen_warnings () { | ||
msg "Check: doxygen warnings (builds the documentation)" # ~ 3s | ||
tests/scripts/doxygen.sh | ||
} | ||
|
||
component_check_code_style () { | ||
msg "Check C code style" | ||
./scripts/code_style.py | ||
} | ||
|
||
support_check_code_style () { | ||
case $(uncrustify --version) in | ||
*0.75.1*) true;; | ||
*) false;; | ||
esac | ||
} | ||
|
||
component_check_python_files () { | ||
msg "Lint: Python scripts" | ||
tests/scripts/check-python-files.sh | ||
} | ||
|
||
component_check_test_helpers () { | ||
msg "unit test: generate_test_code.py" | ||
# unittest writes out mundane stuff like number or tests run on stderr. | ||
# Our convention is to reserve stderr for actual errors, and write | ||
# harmless info on stdout so it can be suppress with --quiet. | ||
./framework/scripts/test_generate_test_code.py 2>&1 | ||
|
||
msg "unit test: translate_ciphers.py" | ||
python3 -m unittest tests/scripts/translate_ciphers.py 2>&1 | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,210 @@ | ||
# components-build-system.sh | ||
# | ||
# Copyright The Mbed TLS Contributors | ||
# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later | ||
|
||
# This file contains test components that are executed by all.sh | ||
|
||
################################################################ | ||
#### Build System Testing | ||
################################################################ | ||
|
||
component_test_make_shared () { | ||
msg "build/test: make shared" # ~ 40s | ||
make SHARED=1 all check | ||
ldd programs/util/strerror | grep libmbedcrypto | ||
programs/test/dlopen_demo.sh | ||
} | ||
|
||
component_test_cmake_shared () { | ||
msg "build/test: cmake shared" # ~ 2min | ||
cmake -DUSE_SHARED_MBEDTLS_LIBRARY=On . | ||
make | ||
ldd programs/util/strerror | grep libmbedcrypto | ||
make test | ||
programs/test/dlopen_demo.sh | ||
} | ||
|
||
support_test_cmake_out_of_source () { | ||
distrib_id="" | ||
distrib_ver="" | ||
distrib_ver_minor="" | ||
distrib_ver_major="" | ||
|
||
# Attempt to parse lsb-release to find out distribution and version. If not | ||
# found this should fail safe (test is supported). | ||
if [[ -f /etc/lsb-release ]]; then | ||
|
||
while read -r lsb_line; do | ||
case "$lsb_line" in | ||
"DISTRIB_ID"*) distrib_id=${lsb_line/#DISTRIB_ID=};; | ||
"DISTRIB_RELEASE"*) distrib_ver=${lsb_line/#DISTRIB_RELEASE=};; | ||
esac | ||
done < /etc/lsb-release | ||
|
||
distrib_ver_major="${distrib_ver%%.*}" | ||
distrib_ver="${distrib_ver#*.}" | ||
distrib_ver_minor="${distrib_ver%%.*}" | ||
fi | ||
|
||
# Running the out of source CMake test on Ubuntu 16.04 using more than one | ||
# processor (as the CI does) can create a race condition whereby the build | ||
# fails to see a generated file, despite that file actually having been | ||
# generated. This problem appears to go away with 18.04 or newer, so make | ||
# the out of source tests unsupported on Ubuntu 16.04. | ||
[ "$distrib_id" != "Ubuntu" ] || [ "$distrib_ver_major" -gt 16 ] | ||
} | ||
|
||
component_test_cmake_out_of_source () { | ||
# Remove existing generated files so that we use the ones cmake | ||
# generates | ||
make neat | ||
|
||
msg "build: cmake 'out-of-source' build" | ||
MBEDTLS_ROOT_DIR="$PWD" | ||
mkdir "$OUT_OF_SOURCE_DIR" | ||
cd "$OUT_OF_SOURCE_DIR" | ||
# Note: Explicitly generate files as these are turned off in releases | ||
cmake -D CMAKE_BUILD_TYPE:String=Check -D GEN_FILES=ON "$MBEDTLS_ROOT_DIR" | ||
make | ||
|
||
msg "test: cmake 'out-of-source' build" | ||
make test | ||
# Check that ssl-opt.sh can find the test programs. | ||
# Also ensure that there are no error messages such as | ||
# "No such file or directory", which would indicate that some required | ||
# file is missing (ssl-opt.sh tolerates the absence of some files so | ||
# may exit with status 0 but emit errors). | ||
./tests/ssl-opt.sh -f 'Default' >ssl-opt.out 2>ssl-opt.err | ||
grep PASS ssl-opt.out | ||
cat ssl-opt.err >&2 | ||
# If ssl-opt.err is non-empty, record an error and keep going. | ||
[ ! -s ssl-opt.err ] | ||
rm ssl-opt.out ssl-opt.err | ||
cd "$MBEDTLS_ROOT_DIR" | ||
rm -rf "$OUT_OF_SOURCE_DIR" | ||
} | ||
|
||
component_test_cmake_as_subdirectory () { | ||
# Remove existing generated files so that we use the ones CMake | ||
# generates | ||
make neat | ||
|
||
msg "build: cmake 'as-subdirectory' build" | ||
cd programs/test/cmake_subproject | ||
# Note: Explicitly generate files as these are turned off in releases | ||
cmake -D GEN_FILES=ON . | ||
make | ||
./cmake_subproject | ||
} | ||
|
||
support_test_cmake_as_subdirectory () { | ||
support_test_cmake_out_of_source | ||
} | ||
|
||
component_test_cmake_as_package () { | ||
# Remove existing generated files so that we use the ones CMake | ||
# generates | ||
make neat | ||
|
||
msg "build: cmake 'as-package' build" | ||
cd programs/test/cmake_package | ||
cmake . | ||
make | ||
./cmake_package | ||
} | ||
|
||
support_test_cmake_as_package () { | ||
support_test_cmake_out_of_source | ||
} | ||
|
||
component_test_cmake_as_package_install () { | ||
# Remove existing generated files so that we use the ones CMake | ||
# generates | ||
make neat | ||
|
||
msg "build: cmake 'as-installed-package' build" | ||
cd programs/test/cmake_package_install | ||
cmake . | ||
make | ||
./cmake_package_install | ||
} | ||
|
||
support_test_cmake_as_package_install () { | ||
support_test_cmake_out_of_source | ||
} | ||
|
||
component_build_cmake_custom_config_file () { | ||
# Make a copy of config file to use for the in-tree test | ||
cp "$CONFIG_H" include/mbedtls_config_in_tree_copy.h | ||
|
||
MBEDTLS_ROOT_DIR="$PWD" | ||
mkdir "$OUT_OF_SOURCE_DIR" | ||
cd "$OUT_OF_SOURCE_DIR" | ||
|
||
# Build once to get the generated files (which need an intact config file) | ||
cmake "$MBEDTLS_ROOT_DIR" | ||
make | ||
|
||
msg "build: cmake with -DMBEDTLS_CONFIG_FILE" | ||
scripts/config.py -w full_config.h full | ||
echo '#error "cmake -DMBEDTLS_CONFIG_FILE is not working."' > "$MBEDTLS_ROOT_DIR/$CONFIG_H" | ||
cmake -DGEN_FILES=OFF -DMBEDTLS_CONFIG_FILE=full_config.h "$MBEDTLS_ROOT_DIR" | ||
make | ||
|
||
msg "build: cmake with -DMBEDTLS_CONFIG_FILE + -DMBEDTLS_USER_CONFIG_FILE" | ||
# In the user config, disable one feature (for simplicity, pick a feature | ||
# that nothing else depends on). | ||
echo '#undef MBEDTLS_NIST_KW_C' >user_config.h | ||
|
||
cmake -DGEN_FILES=OFF -DMBEDTLS_CONFIG_FILE=full_config.h -DMBEDTLS_USER_CONFIG_FILE=user_config.h "$MBEDTLS_ROOT_DIR" | ||
make | ||
not programs/test/query_compile_time_config MBEDTLS_NIST_KW_C | ||
|
||
rm -f user_config.h full_config.h | ||
|
||
cd "$MBEDTLS_ROOT_DIR" | ||
rm -rf "$OUT_OF_SOURCE_DIR" | ||
|
||
# Now repeat the test for an in-tree build: | ||
|
||
# Restore config for the in-tree test | ||
mv include/mbedtls_config_in_tree_copy.h "$CONFIG_H" | ||
|
||
# Build once to get the generated files (which need an intact config) | ||
cmake . | ||
make | ||
|
||
msg "build: cmake (in-tree) with -DMBEDTLS_CONFIG_FILE" | ||
scripts/config.py -w full_config.h full | ||
echo '#error "cmake -DMBEDTLS_CONFIG_FILE is not working."' > "$MBEDTLS_ROOT_DIR/$CONFIG_H" | ||
cmake -DGEN_FILES=OFF -DMBEDTLS_CONFIG_FILE=full_config.h . | ||
make | ||
|
||
msg "build: cmake (in-tree) with -DMBEDTLS_CONFIG_FILE + -DMBEDTLS_USER_CONFIG_FILE" | ||
# In the user config, disable one feature (for simplicity, pick a feature | ||
# that nothing else depends on). | ||
echo '#undef MBEDTLS_NIST_KW_C' >user_config.h | ||
|
||
cmake -DGEN_FILES=OFF -DMBEDTLS_CONFIG_FILE=full_config.h -DMBEDTLS_USER_CONFIG_FILE=user_config.h . | ||
make | ||
not programs/test/query_compile_time_config MBEDTLS_NIST_KW_C | ||
|
||
rm -f user_config.h full_config.h | ||
} | ||
|
||
support_build_cmake_custom_config_file () { | ||
support_test_cmake_out_of_source | ||
} | ||
|
||
component_build_cmake_programs_no_testing () { | ||
# Verify that the type of builds performed by oss-fuzz don't get accidentally broken | ||
msg "build: cmake with -DENABLE_PROGRAMS=ON and -DENABLE_TESTING=OFF" | ||
cmake -DENABLE_PROGRAMS=ON -DENABLE_TESTING=OFF . | ||
make | ||
} | ||
|
||
support_build_cmake_programs_no_testing () { | ||
support_test_cmake_out_of_source | ||
} | ||
|
Oops, something went wrong.