From ae254c15148f271789bb18302abfe8428560d622 Mon Sep 17 00:00:00 2001 From: Cas Donoghue Date: Wed, 12 Mar 2025 09:30:45 -0700 Subject: [PATCH] Shareable function for partitioning integration tests (#17223) For the fedramp high work https://github.com/elastic/logstash/pull/17038/files a use case for multiple scripts consuming the partitioning functionality emerged. As we look to more advanced partitioning we want to ensure that the functionality will be consumable from multiple scripts. See https://github.com/elastic/logstash/pull/17219#issuecomment-2698650296 (cherry picked from commit d91697287723d18afb2e86effced7103f2077939) --- ci/get-test-half.sh | 27 +++++++++++++++++++++++++++ ci/integration_tests.sh | 21 +++++++-------------- 2 files changed, 34 insertions(+), 14 deletions(-) create mode 100644 ci/get-test-half.sh diff --git a/ci/get-test-half.sh b/ci/get-test-half.sh new file mode 100644 index 00000000000..14772254092 --- /dev/null +++ b/ci/get-test-half.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# get_test_half returns either the first or second half of integration tests +# Usage: get_test_half +# half_number: 0 for first half, 1 for second half +get_test_half() { + local half_number=$1 + # Ensure only spec files go to stdout + pushd qa/integration >/dev/null 2>&1 + + # Collect all spec files + local glob1=(specs/*spec.rb) + local glob2=(specs/**/*spec.rb) + local all_specs=("${glob1[@]}" "${glob2[@]}") + + # Calculate the split point + local split_point=$((${#all_specs[@]} / 2)) + + # Get the requested half (:: is "up to", : is "from") + if [[ $half_number -eq 0 ]]; then + local specs="${all_specs[@]::$split_point}" + else + local specs="${all_specs[@]:$split_point}" + fi + popd >/dev/null 2>&1 + echo "$specs" +} \ No newline at end of file diff --git a/ci/integration_tests.sh b/ci/integration_tests.sh index 2dae141a1c5..43573341fea 100755 --- a/ci/integration_tests.sh +++ b/ci/integration_tests.sh @@ -10,6 +10,9 @@ export GRADLE_OPTS="-Xmx2g -Dorg.gradle.jvmargs=-Xmx2g -Dorg.gradle.daemon=false export SPEC_OPTS="--order rand --format documentation" export CI=true +# Source shared function for splitting integration tests +source "$(dirname "${BASH_SOURCE[0]}")/get-test-half.sh" + if [ -n "$BUILD_JAVA_HOME" ]; then GRADLE_OPTS="$GRADLE_OPTS -Dorg.gradle.java.home=$BUILD_JAVA_HOME" fi @@ -19,20 +22,10 @@ if [[ $1 = "setup" ]]; then exit 0 elif [[ $1 == "split" ]]; then - cd qa/integration - glob1=(specs/*spec.rb) - glob2=(specs/**/*spec.rb) - all_specs=("${glob1[@]}" "${glob2[@]}") - - specs0=${all_specs[@]::$((${#all_specs[@]} / 2 ))} - specs1=${all_specs[@]:$((${#all_specs[@]} / 2 ))} - cd ../.. - if [[ $2 == 0 ]]; then - echo "Running the first half of integration specs: $specs0" - ./gradlew runIntegrationTests -PrubyIntegrationSpecs="$specs0" --console=plain - elif [[ $2 == 1 ]]; then - echo "Running the second half of integration specs: $specs1" - ./gradlew runIntegrationTests -PrubyIntegrationSpecs="$specs1" --console=plain + if [[ $2 =~ ^[01]$ ]]; then + specs=$(get_test_half "$2") + echo "Running half $2 of integration specs: $specs" + ./gradlew runIntegrationTests -PrubyIntegrationSpecs="$specs" --console=plain else echo "Error, must specify 0 or 1 after the split. For example ci/integration_tests.sh split 0" exit 1