Skip to content

Commit a0de9d7

Browse files
committed
Split fips integration tests into two steps (#17038)
* Split fips integration tests into two steps The integration tests suite takes about 40 minutes. This is far too slow for reasonable feedback on a PR. This commit follows the pattern for the non-fips integration tests whereby the tests are split into two sections that can run in parallel across two steps. This should halve the feedback time. The logic for getting a list of specs files to run has been extracted to a shared shell script for use here and in the integration tests shell script. * Use shared function for splitting integration tests The logic for getting a list of specs to run has been extracted so that it can be shared across fips and non fips integration test modes. This commit updates the non fips integration tests to use the shared function. * fix typo in helper name (kebab case, not snake) * Escape $ so buildkite upload does not try to interpolate * Wrap integration tests in shell script to avoid BK interpolation * Move entrypoint for running integration tests inside docker
1 parent bedc706 commit a0de9d7

File tree

4 files changed

+64
-17
lines changed

4 files changed

+64
-17
lines changed

.buildkite/pull_request_pipeline.yml

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ steps:
125125
manual:
126126
allowed: true
127127

128-
- label: ":lab_coat: Integration Tests - FIPS mode"
129-
key: "integration-tests-fips"
128+
- label: ":lab_coat: Integration Tests - FIPS mode / part 1"
129+
key: "integration-tests-fips-part-1"
130130
agents:
131131
provider: gcp
132132
imageProject: elastic-images-prod
@@ -141,7 +141,25 @@ steps:
141141
set -euo pipefail
142142
143143
docker build -t test-runner-image -f x-pack/distributions/internal/observabilitySRE/docker/Dockerfile .
144-
docker run test-runner-image ./gradlew --info --stacktrace -PrunTestsInFIPSMode=true runIntegrationTests
144+
docker run test-runner-image ci/run-fips-integration-tests.sh 0
145+
146+
- label: ":lab_coat: Integration Tests - FIPS mode / part 2"
147+
key: "integration-tests-fips-part-2"
148+
agents:
149+
provider: gcp
150+
imageProject: elastic-images-prod
151+
image: family/platform-ingest-logstash-ubuntu-2204
152+
machineType: "n2-standard-4"
153+
diskSizeGb: 64
154+
retry:
155+
automatic:
156+
# dont retry on failure while they are expected
157+
- limit: 0
158+
command: |
159+
set -euo pipefail
160+
161+
docker build -t test-runner-image -f x-pack/distributions/internal/observabilitySRE/docker/Dockerfile .
162+
docker run test-runner-image ci/run-fips-integration-tests.sh 1
145163
146164
- label: ":lab_coat: Integration Tests / part 1"
147165
key: "integration-tests-part-1"

ci/get-test-half.sh

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#!/bin/bash
2+
3+
# get_test_half returns either the first or second half of integration tests
4+
# Usage: get_test_half <half_number>
5+
# half_number: 0 for first half, 1 for second half
6+
get_test_half() {
7+
local half_number=$1
8+
# Ensure only spec files go to stdout
9+
pushd qa/integration >/dev/null 2>&1
10+
11+
# Collect all spec files
12+
local glob1=(specs/*spec.rb)
13+
local glob2=(specs/**/*spec.rb)
14+
local all_specs=("${glob1[@]}" "${glob2[@]}")
15+
16+
# Calculate the split point
17+
local split_point=$((${#all_specs[@]} / 2))
18+
19+
# Get the requested half (:: is "up to", : is "from")
20+
if [[ $half_number -eq 0 ]]; then
21+
local specs="${all_specs[@]::$split_point}"
22+
else
23+
local specs="${all_specs[@]:$split_point}"
24+
fi
25+
popd >/dev/null 2>&1
26+
echo "$specs"
27+
}

ci/integration_tests.sh

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ export GRADLE_OPTS="-Xmx2g -Dorg.gradle.jvmargs=-Xmx2g -Dorg.gradle.daemon=false
1010
export SPEC_OPTS="--order rand --format documentation"
1111
export CI=true
1212

13+
# Source shared function for splitting integration tests
14+
source "$(dirname "${BASH_SOURCE[0]}")/get-test-half.sh"
15+
1316
if [ -n "$BUILD_JAVA_HOME" ]; then
1417
GRADLE_OPTS="$GRADLE_OPTS -Dorg.gradle.java.home=$BUILD_JAVA_HOME"
1518
fi
@@ -19,20 +22,10 @@ if [[ $1 = "setup" ]]; then
1922
exit 0
2023

2124
elif [[ $1 == "split" ]]; then
22-
cd qa/integration
23-
glob1=(specs/*spec.rb)
24-
glob2=(specs/**/*spec.rb)
25-
all_specs=("${glob1[@]}" "${glob2[@]}")
26-
27-
specs0=${all_specs[@]::$((${#all_specs[@]} / 2 ))}
28-
specs1=${all_specs[@]:$((${#all_specs[@]} / 2 ))}
29-
cd ../..
30-
if [[ $2 == 0 ]]; then
31-
echo "Running the first half of integration specs: $specs0"
32-
./gradlew runIntegrationTests -PrubyIntegrationSpecs="$specs0" --console=plain
33-
elif [[ $2 == 1 ]]; then
34-
echo "Running the second half of integration specs: $specs1"
35-
./gradlew runIntegrationTests -PrubyIntegrationSpecs="$specs1" --console=plain
25+
if [[ $2 =~ ^[01]$ ]]; then
26+
specs=$(get_test_half "$2")
27+
echo "Running half $2 of integration specs: $specs"
28+
./gradlew runIntegrationTests -PrubyIntegrationSpecs="$specs" --console=plain
3629
else
3730
echo "Error, must specify 0 or 1 after the split. For example ci/integration_tests.sh split 0"
3831
exit 1

ci/run-fips-integration-tests.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/bin/bash
2+
# get_test_half returns either the first or second half of integration tests
3+
# Usage: get_test_half <half_number>
4+
# half_number: 0 for first half, 1 for second half
5+
6+
half_number=$1
7+
source ci/get-test-half.sh
8+
specs=$(get_test_half "$half_number")
9+
./gradlew --info --stacktrace -PrunTestsInFIPSMode=true runIntegrationTests -PrubyIntegrationSpecs="$specs"

0 commit comments

Comments
 (0)