diff --git a/contrib/devtools/build_cmake.sh b/contrib/devtools/build_cmake.sh --- a/contrib/devtools/build_cmake.sh +++ b/contrib/devtools/build_cmake.sh @@ -15,6 +15,7 @@ echo "Options:" echo " --clang: build with clang/clang++" echo " --gcc: build with gcc/g++" + echo " --junit: enable Junit reports generation" echo " --Werror: add -Werror to the compiler flags" echo "Environment variables:" echo " CMAKE_FLAGS: array of the CMAKE flags to use for the build" @@ -48,6 +49,12 @@ ) shift ;; + --junit) + CMAKE_FLAGS+=( + "-DENABLE_JUNIT_REPORT=ON" + ) + shift + ;; --Werror) CMAKE_FLAGS+=( "-DCMAKE_C_FLAGS=-Werror" diff --git a/contrib/teamcity/build-configurations.py b/contrib/teamcity/build-configurations.py --- a/contrib/teamcity/build-configurations.py +++ b/contrib/teamcity/build-configurations.py @@ -122,6 +122,7 @@ self.build_directory.mkdir(exist_ok=True, parents=True) self.artifact_dir = self.build_directory.joinpath("artifacts") + self.junit_reports_dir = self.build_directory.joinpath("test/junit") # We will provide the required environment variables self.environment_variables = { @@ -248,6 +249,7 @@ **self.configuration.get("artifacts", {}), str(self.logs["full_log"].relative_to(self.build_directory)): "", str(self.logs["clean_log"].relative_to(self.build_directory)): "", + str(self.junit_reports_dir.relative_to(self.build_directory)): "", } self.copy_artifacts(artifacts) @@ -280,6 +282,12 @@ def copy_artifacts(self, artifacts): super().copy_artifacts(artifacts) + # Start loading the junit reports. + junit_reports_pattern = "{}/junit/*.xml".format( + str(self.artifact_dir.relative_to("/")) + ) + self.teamcity_messages.importData("junit", junit_reports_pattern) + # Instruct teamcity to upload our artifact directory artifact_path_pattern = "+:{}=>artifacts.tar.gz".format( str(self.artifact_dir.relative_to("/")) diff --git a/contrib/teamcity/builds/build-asan.sh b/contrib/teamcity/builds/build-asan.sh --- a/contrib/teamcity/builds/build-asan.sh +++ b/contrib/teamcity/builds/build-asan.sh @@ -17,10 +17,6 @@ "-DCRYPTO_USE_ASM=OFF" "-DENABLE_SANITIZERS=address" ) -build_with_cmake --Werror --clang +build_with_cmake --Werror --clang --junit -run_test_bitcoin "with address sanitizer" - -ninja check check-secp256k1 - -ninja check-functional +ninja -k0 check check-secp256k1 check-functional diff --git a/contrib/teamcity/builds/build-clang-10.sh b/contrib/teamcity/builds/build-clang-10.sh --- a/contrib/teamcity/builds/build-clang-10.sh +++ b/contrib/teamcity/builds/build-clang-10.sh @@ -14,8 +14,8 @@ "-DCMAKE_C_COMPILER=clang-10" "-DCMAKE_CXX_COMPILER=clang++-10" ) -build_with_cmake --Werror +build_with_cmake --Werror --junit -ninja check check-secp256k1 +ninja -k0 check check-secp256k1 # TODO do the same with the latest GCC diff --git a/contrib/teamcity/builds/build-diff.sh b/contrib/teamcity/builds/build-diff.sh --- a/contrib/teamcity/builds/build-diff.sh +++ b/contrib/teamcity/builds/build-diff.sh @@ -8,19 +8,17 @@ source "${TOPLEVEL}/contrib/teamcity/ci-fixture.sh" # Build, run unit tests and functional tests. -build_with_cmake --Werror - -# Unit tests -run_test_bitcoin -run_test_bitcoin "with next upgrade activated" -axionactivationtime=1575158400 +build_with_cmake --Werror --junit # Libs and tools tests # The leveldb tests need to run alone or they will sometimes fail with # garbage output, see: # https://build.bitcoinabc.org/viewLog.html?buildId=29713&guest=1 ninja check-leveldb -ninja check check-secp256k1 check-univalue -# Functional tests -ninja check-functional -ninja check-functional-upgrade-activated +ninja -k0 \ + check \ + check-secp256k1 \ + check-univalue \ + check-functional \ + check-upgrade-activated diff --git a/contrib/teamcity/builds/build-linux-aarch64.sh b/contrib/teamcity/builds/build-linux-aarch64.sh --- a/contrib/teamcity/builds/build-linux-aarch64.sh +++ b/contrib/teamcity/builds/build-linux-aarch64.sh @@ -32,11 +32,6 @@ # or by filtering stderr at the framework level. "-DHAVE_DECL_GETIFADDRS=OFF" ) -build_with_cmake +build_with_cmake --junit -# Unit tests -ninja check -ninja check-secp256k1 - -# Functional tests -ninja check-functional +ninja -k0 check check-secp256k1 check-functional diff --git a/contrib/teamcity/builds/build-linux-arm.sh b/contrib/teamcity/builds/build-linux-arm.sh --- a/contrib/teamcity/builds/build-linux-arm.sh +++ b/contrib/teamcity/builds/build-linux-arm.sh @@ -32,11 +32,6 @@ # or by filtering stderr at the framework level. "-DHAVE_DECL_GETIFADDRS=OFF" ) -build_with_cmake +build_with_cmake --junit -# Unit tests -ninja check -ninja check-secp256k1 - -# Functional tests -ninja check-functional +ninja check check-secp256k1 check-functional diff --git a/contrib/teamcity/builds/build-linux64.sh b/contrib/teamcity/builds/build-linux64.sh --- a/contrib/teamcity/builds/build-linux64.sh +++ b/contrib/teamcity/builds/build-linux64.sh @@ -14,12 +14,6 @@ "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_PLATFORMS_DIR}/Linux64.cmake" "-DENABLE_PROPERTY_BASED_TESTS=ON" ) -build_with_cmake +build_with_cmake --junit -# Unit tests -run_test_bitcoin "for Linux 64 bits" - -ninja check check-secp256k1 - -# Functional tests -ninja check-functional +ninja -k0 check check-secp256k1 check-functional diff --git a/contrib/teamcity/builds/build-master.sh b/contrib/teamcity/builds/build-master.sh --- a/contrib/teamcity/builds/build-master.sh +++ b/contrib/teamcity/builds/build-master.sh @@ -8,19 +8,17 @@ source "${TOPLEVEL}/contrib/teamcity/ci-fixture.sh" # Build, run unit tests and extended functional tests. -build_with_cmake --Werror - -# Unit tests -run_test_bitcoin -run_test_bitcoin "with next upgrade activated" -axionactivationtime=1575158400 +build_with_cmake --Werror --junit # Libs and tools tests # The leveldb tests need to run alone or they will sometimes fail with # garbage output, see: # https://build.bitcoinabc.org/viewLog.html?buildId=29713&guest=1 ninja check-leveldb -ninja check check-secp256k1 check-univalue -# Functional tests -ninja check-functional-extended -ninja check-functional-upgrade-activated-extended +ninja -k0 \ + check \ + check-secp256k1 \ + check-univalue \ + check-functional-extended \ + check-upgrade-activated-extended diff --git a/contrib/teamcity/builds/build-tsan.sh b/contrib/teamcity/builds/build-tsan.sh --- a/contrib/teamcity/builds/build-tsan.sh +++ b/contrib/teamcity/builds/build-tsan.sh @@ -11,11 +11,7 @@ CMAKE_FLAGS=( "-DENABLE_SANITIZERS=thread" ) -build_with_cmake --Werror --clang - -run_test_bitcoin "with thread sanitizer" +build_with_cmake --Werror --clang --junit # Libs and utils tests -ninja check - -ninja check-functional +ninja -k0 check check-functional diff --git a/contrib/teamcity/builds/build-ubsan.sh b/contrib/teamcity/builds/build-ubsan.sh --- a/contrib/teamcity/builds/build-ubsan.sh +++ b/contrib/teamcity/builds/build-ubsan.sh @@ -12,11 +12,7 @@ "-DCMAKE_BUILD_TYPE=Debug" "-DENABLE_SANITIZERS=undefined" ) -build_with_cmake --Werror --clang - -run_test_bitcoin "with undefined sanitizer" +build_with_cmake --Werror --clang --junit # Libs and utils tests -ninja check check-secp256k1 - -ninja check-functional +ninja -k0 check check-secp256k1 check-functional diff --git a/contrib/teamcity/builds/build-without-cli.sh b/contrib/teamcity/builds/build-without-cli.sh --- a/contrib/teamcity/builds/build-without-cli.sh +++ b/contrib/teamcity/builds/build-without-cli.sh @@ -11,6 +11,6 @@ CMAKE_FLAGS=( "-DBUILD_BITCOIN_CLI=OFF" ) -build_with_cmake --Werror +build_with_cmake --Werror --junit ninja check-functional diff --git a/contrib/teamcity/builds/build-without-wallet.sh b/contrib/teamcity/builds/build-without-wallet.sh --- a/contrib/teamcity/builds/build-without-wallet.sh +++ b/contrib/teamcity/builds/build-without-wallet.sh @@ -11,9 +11,6 @@ CMAKE_FLAGS=( "-DBUILD_BITCOIN_WALLET=OFF" ) -build_with_cmake --Werror +build_with_cmake --Werror --junit -ninja check-bitcoin-qt -ninja check-functional - -run_test_bitcoin "without wallet" +ninja -k0 check check-functional diff --git a/contrib/teamcity/builds/build-without-zmq.sh b/contrib/teamcity/builds/build-without-zmq.sh --- a/contrib/teamcity/builds/build-without-zmq.sh +++ b/contrib/teamcity/builds/build-without-zmq.sh @@ -11,9 +11,6 @@ CMAKE_FLAGS=( "-DBUILD_BITCOIN_ZMQ=OFF" ) -build_with_cmake --Werror +build_with_cmake --Werror --junit -ninja check-bitcoin-qt -ninja check-functional - -run_test_bitcoin "without zmq" +ninja -k0 check check-functional diff --git a/contrib/teamcity/ci-fixture.sh b/contrib/teamcity/ci-fixture.sh --- a/contrib/teamcity/ci-fixture.sh +++ b/contrib/teamcity/ci-fixture.sh @@ -9,28 +9,6 @@ DEVTOOLS_DIR="${TOPLEVEL}/contrib/devtools" -# Base directories for sanitizer related files -SAN_SUPP_DIR="${TOPLEVEL}/test/sanitizer_suppressions" - -run_test_bitcoin() { - # Usage: run_test_bitcoin "Context as string" [arguments...] - ninja test_bitcoin - - TEST_BITCOIN_JUNIT="junit_results_unit_tests${1:+_${1// /_}}.xml" - TEST_BITCOIN_SUITE_NAME="Bitcoin ABC unit tests${1:+ $1}" - - # More sanitizer options are needed to run the executable directly - ASAN_OPTIONS="malloc_context_size=0:${ASAN_OPTIONS:-}" \ - LSAN_OPTIONS="suppressions=${SAN_SUPP_DIR}/lsan:${LSAN_OPTIONS:-}" \ - TSAN_OPTIONS="suppressions=${SAN_SUPP_DIR}/tsan:${TSAN_OPTIONS:-}" \ - UBSAN_OPTIONS="suppressions=${SAN_SUPP_DIR}/ubsan:print_stacktrace=1:halt_on_error=1:${UBSAN_OPTIONS:-}" \ - ./src/test/test_bitcoin \ - --logger=HRF:JUNIT,message,${TEST_BITCOIN_JUNIT} \ - -- \ - -testsuitename="${TEST_BITCOIN_SUITE_NAME}" \ - "${@:2}" -} - # It is valid to call the function with no argument, so ignore SC2120 # shellcheck disable=SC2120 build_with_cmake() {