diff --git a/bin/knapsack_pro_all.rb b/bin/knapsack_pro_all.rb index 8699182..0f219b2 100755 --- a/bin/knapsack_pro_all.rb +++ b/bin/knapsack_pro_all.rb @@ -50,6 +50,7 @@ './bin/knapsack_pro_queue_rspec_encrypted' => ['0 2 BUILD_ID', '1 2 BUILD_ID'], './bin/knapsack_pro_fixed_queue_split_rspec_encrypted' => ['0 2 BUILD_ID', '1 2 BUILD_ID'], './bin/parallel_tests_knapsack_pro_queue_rspec' => ['0 2 BUILD_ID', '1 2 BUILD_ID'], + './bin/parallel_tests_knapsack_pro_queue_rspec_handle_signals' => ['0 2 BUILD_ID', '1 2 BUILD_ID'], './bin/parallel_tests_knapsack_pro_single_machine_run BUILD_ID' => [''], './bin/bin_knapsack_pro_rspec' => ['0 2 BUILD_ID', '1 2 BUILD_ID'], './bin/bin_knapsack_pro_queue_rspec' => ['0 2 BUILD_ID', '1 2 BUILD_ID'], diff --git a/bin/parallel_tests_handle_signals b/bin/parallel_tests_handle_signals new file mode 100755 index 0000000..a27f1a0 --- /dev/null +++ b/bin/parallel_tests_handle_signals @@ -0,0 +1,33 @@ +#!/bin/bash + +handle_signal() { + local signal=$1 + if [[ -n $knapsack_pro_pid ]]; then + echo "KNAPSACK_PRO_CI_NODE_INDEX=$KNAPSACK_PRO_CI_NODE_INDEX Received signal $signal in bin/parallel_tests, terminating the Knapsack Pro process with TERM" + kill -TERM $knapsack_pro_pid + echo "KNAPSACK_PRO_CI_NODE_INDEX=$KNAPSACK_PRO_CI_NODE_INDEX Waiting for the Knapsack Pro process with PID $knapsack_pro_pid to terminate" + wait $knapsack_pro_pid + fi +} + +trap 'handle_signal TERM' TERM +trap 'handle_signal INT' INT + +# The Knapsack Pro API sees 3 * 2 = 6 parallel nodes +export KNAPSACK_PRO_CI_NODE_TOTAL=$(( $PARALLEL_TESTS_CONCURRENCY * $KNAPSACK_PRO_CI_NODE_TOTAL )) + +if [ "$TEST_ENV_NUMBER" == "" ]; then + export PARALLEL_TESTS_CONCURRENCY_INDEX=0 +else + export PARALLEL_TESTS_CONCURRENCY_INDEX=$(( $TEST_ENV_NUMBER - 1 )) +fi + +# The current index for the Knapsack Pro API is {0,1,2} + (3 * {0,1}) in other words either {0,1,2,3,4,5} +KNAPSACK_PRO_CI_NODE_INDEX=$(( $PARALLEL_TESTS_CONCURRENCY_INDEX + ($PARALLEL_TESTS_CONCURRENCY * $KNAPSACK_PRO_CI_NODE_INDEX) )) + +# Debug log +echo KNAPSACK_PRO_CI_NODE_TOTAL=$KNAPSACK_PRO_CI_NODE_TOTAL KNAPSACK_PRO_CI_NODE_INDEX=$KNAPSACK_PRO_CI_NODE_INDEX PARALLEL_TESTS_CONCURRENCY=$PARALLEL_TESTS_CONCURRENCY + +bundle exec rake knapsack_pro:queue:rspec & +knapsack_pro_pid=$! +wait $knapsack_pro_pid diff --git a/bin/parallel_tests_knapsack_pro_queue_rspec_handle_signals b/bin/parallel_tests_knapsack_pro_queue_rspec_handle_signals new file mode 100755 index 0000000..48670dd --- /dev/null +++ b/bin/parallel_tests_knapsack_pro_queue_rspec_handle_signals @@ -0,0 +1,16 @@ +#!/bin/bash + +export PARALLEL_TESTS_CONCURRENCY=2 +#export KNAPSACK_PRO_RSPEC_SPLIT_BY_TEST_EXAMPLES=true + +CI_BUILD_ID=$(openssl rand -base64 32) + +KNAPSACK_PRO_ENDPOINT=http://api.knapsackpro.test:3000 \ + KNAPSACK_PRO_TEST_SUITE_TOKEN_RSPEC=a28ce51204d7c7dbd25c3352fea222cf \ + KNAPSACK_PRO_REPOSITORY_ADAPTER=git \ + KNAPSACK_PRO_PROJECT_DIR=. \ + KNAPSACK_PRO_CI_NODE_TOTAL=${2:-2} \ + KNAPSACK_PRO_CI_NODE_INDEX=${1:-0} \ + PARALLEL_TESTS_CONCURRENCY=$PARALLEL_TESTS_CONCURRENCY \ + KNAPSACK_PRO_CI_NODE_BUILD_ID=${3:-$CI_BUILD_ID} \ + bundle exec parallel_test -n $PARALLEL_TESTS_CONCURRENCY -e './bin/parallel_tests_handle_signals'