@@ -52,7 +52,7 @@ echo "=========================="
5252run_package_test () {
5353 local package_name=$1
5454 local package_path=" packages/${package_name} "
55-
55+
5656 # Declare local overrides to prevent bleeding into the next loop iteration
5757 local PROJECT_ID
5858 local GOOGLE_APPLICATION_CREDENTIALS
@@ -111,11 +111,58 @@ run_package_test() {
111111 local res=$?
112112 set -e
113113 popd > /dev/null
114-
114+
115115 rm -rf " ${gcloud_config_dir} "
116116 return $res
117117}
118118
119+ reap_parallel_results () {
120+ local retval=0
121+ local failed_count=0
122+ local passed_count=0
123+
124+ if [ -z " $LOG_DIR " ]; then
125+ echo " Error: LOG_DIR is not set."
126+ return 1
127+ fi
128+
129+ for failed in " $LOG_DIR " /* .failed; do
130+ if [ -f " $failed " ]; then
131+ failed_count=$(( failed_count + 1 ))
132+ fi
133+ done
134+
135+ local total_tested=${# PACKAGES_TO_TEST[@]}
136+ passed_count=$(( total_tested - failed_count))
137+
138+ echo " "
139+ echo " =================================================="
140+ echo " TEST RUN SUMMARY "
141+ echo " =================================================="
142+ echo " Total tested: $total_tested "
143+ echo " Passed: $passed_count "
144+ echo " Failed: $failed_count "
145+ echo " =================================================="
146+
147+ if [ " $failed_count " -gt 0 ]; then
148+ echo " "
149+ echo " !!! DETAILED LOGS FOR FAILED PACKAGES !!!"
150+ for failed in " $LOG_DIR " /* .failed; do
151+ if [ -f " $failed " ]; then
152+ local pkg=$( basename " $failed " .failed)
153+ echo " --------------------------------------------------"
154+ echo " LOGS FOR: $pkg "
155+ echo " --------------------------------------------------"
156+ cat " $LOG_DIR /$pkg .log"
157+ echo " "
158+ fi
159+ done
160+ retval=1
161+ fi
162+ return $retval
163+ }
164+
165+
119166# A file for running system tests
120167system_test_script=" ${PROJECT_ROOT} /.kokoro/system-single.sh"
121168
@@ -181,11 +228,6 @@ done
181228
182229# Parallel Execution Logic
183230MAX_JOBS=${MAX_JOBS:- 4}
184- active_jobs=0
185- declare -A job_pids
186- declare -A job_pkgs
187- failed_packages=()
188- passed_packages=()
189231
190232# Temporary directory for clean log segregation
191233LOG_DIR=$( mktemp -d -t test-logs-XXXXXX)
@@ -202,83 +244,10 @@ echo "Starting parallel test execution for ${#PACKAGES_TO_TEST[@]} packages"
202244echo " Concurrency limit: ${MAX_JOBS} "
203245echo " =================================================="
204246
205- for pkg in " ${PACKAGES_TO_TEST[@]} " ; do
206- # Maintain concurrency limit
207- while [ " $active_jobs " -ge " $MAX_JOBS " ]; do
208- for pid in " ${! job_pids[@]} " ; do
209- if ! kill -0 " $pid " 2> /dev/null; then
210- wait " $pid " && status=0 || status=$?
211- finished_pkg=${job_pkgs[$pid]}
212- if [ " $status " -eq 0 ]; then
213- echo " ✔ [SUCCESS] ${finished_pkg} "
214- passed_packages+=(" $finished_pkg " )
215- else
216- echo " ✘ [FAILURE] ${finished_pkg} (Exit Code: ${status} )"
217- failed_packages+=(" $finished_pkg " )
218- fi
219- unset " job_pids[$pid ]"
220- unset " job_pkgs[$pid ]"
221- active_jobs=$(( active_jobs - 1 ))
222- fi
223- done
224- sleep 0.1
225- done
226-
227- safe_pkg_name=$( echo " $pkg " | tr ' /' ' _' )
228- log_file=" ${LOG_DIR} /${safe_pkg_name} .log"
229-
230- echo " Spawning tests for ${pkg} ..."
231- run_package_test " $pkg " > " $log_file " 2>&1 &
232- pid=$!
233- job_pids[" $pid " ]=$pid
234- job_pkgs[" $pid " ]=$pkg
235- active_jobs=$(( active_jobs + 1 ))
236- done
237-
238- # Reap remaining processes
239- while [ " $active_jobs " -gt 0 ]; do
240- for pid in " ${! job_pids[@]} " ; do
241- if ! kill -0 " $pid " 2> /dev/null; then
242- wait " $pid " && status=0 || status=$?
243- finished_pkg=${job_pkgs[$pid]}
244- if [ " $status " -eq 0 ]; then
245- echo " ✔ [SUCCESS] ${finished_pkg} "
246- passed_packages+=(" $finished_pkg " )
247- else
248- echo " ✘ [FAILURE] ${finished_pkg} (Exit Code: ${status} )"
249- failed_packages+=(" $finished_pkg " )
250- fi
251- unset " job_pids[$pid ]"
252- unset " job_pkgs[$pid ]"
253- active_jobs=$(( active_jobs - 1 ))
254- fi
255- done
256- sleep 0.1
257- done
258-
259- echo " "
260- echo " =================================================="
261- echo " TEST RUN SUMMARY "
262- echo " =================================================="
263- echo " Total tested: ${# PACKAGES_TO_TEST[@]} "
264- echo " Passed: ${# passed_packages[@]} "
265- echo " Failed: ${# failed_packages[@]} "
266- echo " =================================================="
247+ export LOG_DIR
248+ export -f run_package_test
249+ export system_test_script PROJECT_ROOT KOKORO_GFILE_DIR
267250
268- if [ ${# failed_packages[@]} -gt 0 ]; then
269- echo " "
270- echo " !!! DETAILED LOGS FOR FAILED PACKAGES !!!"
271- for pkg in " ${failed_packages[@]} " ; do
272- safe_pkg_name=$( echo " $pkg " | tr ' /' ' _' )
273- log_file=" ${LOG_DIR} /${safe_pkg_name} .log"
274- echo " --------------------------------------------------"
275- echo " LOGS FOR: ${pkg} "
276- echo " --------------------------------------------------"
277- [ -f " $log_file " ] && cat " $log_file "
278- echo " "
279- done
280- exit 1
281- fi
251+ printf ' %s\n' " ${PACKAGES_TO_TEST[@]} " | xargs -P " $MAX_JOBS " -I {} bash -c ' run_package_test "{}" > "$LOG_DIR/{}.log" 2>&1 || touch "$LOG_DIR/{}.failed"'
282252
283- echo " All tests passed successfully!"
284- exit 0
253+ reap_parallel_results || RETVAL=1
0 commit comments