Skip to content

Commit c51201c

Browse files
authored
[CI] Refactor script to run integration tests (#2768)
This PR applies a refactor in .buildkite/scripts/integration_tests.sh to simplify how to set a new target to test all the packages in a given folder independently. It also ensures that in Serverless pipeline just is installed the required tools once.
1 parent 6003ba8 commit c51201c

File tree

2 files changed

+98
-80
lines changed

2 files changed

+98
-80
lines changed

.buildkite/hooks/pre-command

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ GO_VERSION=$(cat .go-version)
77
export GO_VERSION
88

99
export SERVERLESS=${SERVERLESS:-"false"}
10+
export UPLOAD_SAFE_LOGS=${UPLOAD_SAFE_LOGS:-"0"}
11+
1012
WORKSPACE=$(pwd)
1113
export WORKSPACE
1214

@@ -22,7 +24,7 @@ branch_name_label() {
2224

2325
if [[ "${BUILDKITE_PULL_REQUEST}" != "false" ]] ; then
2426
# remove fork from branch name
25-
branch=$(echo $branch | cut -d : -f 2)
27+
branch=$(echo "$branch" | cut -d : -f 2)
2628
fi
2729

2830
# From Jenkins
@@ -31,7 +33,7 @@ branch_name_label() {
3133
branch=$(echo "$branch" | tr '[:upper:]' '[:lower:]' | tr '_/\:. ' '-')
3234

3335
# truncate up to 63 characters limit
34-
echo $branch | head -c 63
36+
echo "$branch" | head -c 63
3537
}
3638

3739
BRANCH_NAME_LOWER_CASE=$(branch_name_label "$BUILDKITE_BRANCH")

.buildkite/scripts/integration_tests.sh

Lines changed: 94 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@ usage() {
1313
echo -e "\t-h: Show this message"
1414
}
1515

16+
export UPLOAD_SAFE_LOGS=${UPLOAD_SAFE_LOGS:-"0"}
17+
1618
PARALLEL_TARGET="test-check-packages-parallel"
1719
FALSE_POSITIVES_TARGET="test-check-packages-false-positives"
1820
KIND_TARGET="test-check-packages-with-kind"
19-
LOGSTASH_TARGET="test-check-packages-with-logstash"
2021
SYSTEM_TEST_FLAGS_TARGET="test-system-test-flags"
2122
TEST_BUILD_ZIP_TARGET="test-build-zip"
2223
TEST_BUILD_INSTALL_ZIP_TARGET="test-build-install-zip"
@@ -61,24 +62,71 @@ if [[ "${TARGET}" == "" ]]; then
6162
exit 1
6263
fi
6364

64-
if [[ "${SERVERLESS}" == "true" && "${TARGET}" != "${PARALLEL_TARGET}" ]]; then
65-
# Just tested parallel target to run with Serverless projects, other Makefile targets
66-
# have not been tested yet and could fail unexpectedly. For instance, "test-check-package-false-positives"
67-
# target would require a different management to not stop Elastic stack after each package test.
68-
echo "Target ${TARGET} is not supported for Serverless testing"
69-
usage
70-
exit 1
71-
fi
65+
upload_package_test_logs() {
66+
local retry_count=0
67+
local package_folder=""
68+
local target=""
69+
70+
if [[ "${PACKAGE}" == "" ]]; then
71+
echo "No package specified, skipping upload of safe logs"
72+
return
73+
fi
74+
75+
echo "--- Uploading safe logs to GCP bucket ${JOB_GCS_BUCKET_INTERNAL}"
76+
77+
retry_count=${BUILDKITE_RETRY_COUNT:-"0"}
78+
# Add target as part of the package folder name to allow to distinguish
79+
# different test runs for the same package in different Makefile targets.
80+
# Currently, just for test-check-packages-* targets, but could be extended
81+
# to other targets in the future.
82+
target=${TARGET#"test-check-packages-"}
83+
package_folder="${target}.${PACKAGE}"
84+
85+
if [[ "${ELASTIC_PACKAGE_TEST_ENABLE_INDEPENDENT_AGENT:-""}" == "false" ]]; then
86+
package_folder="${package_folder}-stack_agent"
87+
fi
88+
89+
if [[ "${ELASTIC_PACKAGE_FIELD_VALIDATION_TEST_METHOD:-""}" != "" ]]; then
90+
package_folder="${package_folder}-${ELASTIC_PACKAGE_FIELD_VALIDATION_TEST_METHOD}"
91+
fi
92+
93+
if [[ "${retry_count}" -ne 0 ]]; then
94+
package_folder="${package_folder}_retry_${retry_count}"
95+
fi
96+
97+
upload_safe_logs \
98+
"${JOB_GCS_BUCKET_INTERNAL}" \
99+
"build/elastic-stack-dump/check-${PACKAGE}/logs/elastic-agent-internal/*.*" \
100+
"insecure-logs/${package_folder}/elastic-agent-logs/"
101+
102+
# required for <8.6.0
103+
upload_safe_logs \
104+
"${JOB_GCS_BUCKET_INTERNAL}" \
105+
"build/elastic-stack-dump/check-${PACKAGE}/logs/elastic-agent-internal/default/*" \
106+
"insecure-logs/${package_folder}/elastic-agent-logs/default/"
107+
108+
upload_safe_logs \
109+
"${JOB_GCS_BUCKET_INTERNAL}" \
110+
"build/container-logs/*.log" \
111+
"insecure-logs/${package_folder}/container-logs/"
112+
}
72113

73-
add_bin_path
114+
install_required_tools() {
115+
local target="${1}"
116+
117+
if [[ "${SERVERLESS}" == "true" ]]; then
118+
# If packages are tested with Serverless, these action are already performed
119+
# here: .buildkite/scripts/test_packages_with_serverless.sh
120+
echo "Skipping installation of required tools for Serverless testing"
121+
return
122+
fi
123+
124+
add_bin_path
74125

75-
if [[ "$SERVERLESS" == "false" ]]; then
76-
# If packages are tested with Serverless, these actions are already performed
77-
# here: .buildkite/scripts/test_packages_with_serverless.sh
78126
echo "--- Install go"
79127
with_go
80128

81-
if [[ "${TARGET}" != "${TEST_BUILD_ZIP_TARGET}" ]]; then
129+
if [[ "${target}" != "${TEST_BUILD_ZIP_TARGET}" ]]; then
82130
# Not supported in Macos ARM
83131
echo "--- Install docker"
84132
with_docker
@@ -87,87 +135,55 @@ if [[ "$SERVERLESS" == "false" ]]; then
87135
with_docker_compose_plugin
88136
fi
89137

138+
case "${target}" in
139+
"${KIND_TARGET}" | "${SYSTEM_TEST_FLAGS_TARGET}")
140+
echo "--- Install kind"
141+
with_kubernetes
142+
;;
143+
"${FALSE_POSITIVES_TARGET}" | "${TEST_BUILD_INSTALL_ZIP_TARGET}")
144+
echo "--- Install yq"
145+
with_yq
146+
;;
147+
esac
148+
90149
# In Serverless pipeline, elastic-package is installed in advance here:
91150
# .buildkite/scripts/test_packages_with_serverless.sh
92151
# No need to install it again for every package.
93152
echo "--- Install elastic-package"
94153
make install
95-
fi
154+
}
96155

97-
if [[ "${TARGET}" == "${KIND_TARGET}" || "${TARGET}" == "${SYSTEM_TEST_FLAGS_TARGET}" ]]; then
98-
echo "--- Install kubectl & kind"
99-
with_kubernetes
156+
if [[ "${SERVERLESS}" == "true" && "${TARGET}" != "${PARALLEL_TARGET}" ]]; then
157+
# Just tested parallel target to run with Serverless projects, other Makefile targets
158+
# have not been tested yet and could fail unexpectedly. For instance, "test-check-packages-false-positives"
159+
# target would require a different management to not stop Elastic stack after each package test.
160+
echo "Target ${TARGET} is not supported for Serverless testing"
161+
usage
162+
exit 1
100163
fi
101164

102-
if [[ "${TARGET}" == "${TEST_BUILD_INSTALL_ZIP_TARGET}" || "${TARGET}" == "${FALSE_POSITIVES_TARGET}" ]]; then
103-
echo "--- Install yq"
104-
with_yq
105-
fi
165+
install_required_tools "${TARGET}"
106166

107167
label="${TARGET}"
108168
if [ -n "${PACKAGE}" ]; then
109169
label="${label} - ${PACKAGE}"
110170
fi
111171

112172
echo "--- Run integration test ${label}"
113-
test_each_package=false
114-
case "${TARGET}" in
115-
"${PARALLEL_TARGET}" | "${FALSE_POSITIVES_TARGET}" | "${LOGSTASH_TARGET}")
116-
test_each_package=true
117-
;;
118-
esac
119-
if [[ "${test_each_package}" == "true" ]]; then
120-
make install
121-
# allow to fail this command, to be able to upload safe logs
122-
set +e
123-
make SERVERLESS="${SERVERLESS}" PACKAGE_UNDER_TEST="${PACKAGE}" "${TARGET}"
124-
testReturnCode=$?
125-
set -e
126-
127-
128-
if [[ "${UPLOAD_SAFE_LOGS}" -eq 1 ]] ; then
129-
retry_count=${BUILDKITE_RETRY_COUNT:-"0"}
130-
package_folder="${PACKAGE}"
131-
132-
if [[ "${ELASTIC_PACKAGE_TEST_ENABLE_INDEPENDENT_AGENT:-""}" == "false" ]]; then
133-
package_folder="${package_folder}-stack_agent"
134-
fi
135-
136-
if [[ "${ELASTIC_PACKAGE_FIELD_VALIDATION_TEST_METHOD:-""}" != "" ]]; then
137-
package_folder="${package_folder}-${ELASTIC_PACKAGE_FIELD_VALIDATION_TEST_METHOD}"
138-
fi
139-
140-
if [[ "${retry_count}" -ne 0 ]]; then
141-
package_folder="${package_folder}_retry_${retry_count}"
142-
fi
143-
144-
echo "--- Uploading safe logs to GCP bucket ${JOB_GCS_BUCKET_INTERNAL}"
145-
146-
upload_safe_logs \
147-
"${JOB_GCS_BUCKET_INTERNAL}" \
148-
"build/elastic-stack-dump/check-${PACKAGE}/logs/elastic-agent-internal/*.*" \
149-
"insecure-logs/${package_folder}/elastic-agent-logs/"
150-
151-
# required for <8.6.0
152-
upload_safe_logs \
153-
"${JOB_GCS_BUCKET_INTERNAL}" \
154-
"build/elastic-stack-dump/check-${PACKAGE}/logs/elastic-agent-internal/default/*" \
155-
"insecure-logs/${package_folder}/elastic-agent-logs/default/"
156-
157-
upload_safe_logs \
158-
"${JOB_GCS_BUCKET_INTERNAL}" \
159-
"build/container-logs/*.log" \
160-
"insecure-logs/${package_folder}/container-logs/"
161-
fi
173+
# allow to fail this command, to be able to upload safe logs
174+
set +e
175+
make SERVERLESS="${SERVERLESS}" PACKAGE_UNDER_TEST="${PACKAGE}" "${TARGET}"
176+
testReturnCode=$?
177+
set -e
178+
179+
if [[ "${UPLOAD_SAFE_LOGS}" -eq 1 ]] ; then
180+
upload_package_test_logs
181+
fi
162182

163-
if [ $testReturnCode != 0 ]; then
164-
echo "make SERVERLESS=${SERVERLESS} PACKAGE_UNDER_TEST=${PACKAGE} ${TARGET} failed with ${testReturnCode}"
165-
exit ${testReturnCode}
166-
fi
167-
else
168-
make "${TARGET}"
183+
if [ $testReturnCode != 0 ]; then
184+
echo "make SERVERLESS=${SERVERLESS} PACKAGE_UNDER_TEST=${PACKAGE} ${TARGET} failed with ${testReturnCode}"
185+
exit ${testReturnCode}
169186
fi
170187

171188
echo "--- Check git clean"
172189
make check-git-clean
173-
exit 0

0 commit comments

Comments
 (0)