44# They centralize temporary log naming and the small success/failure print
55# pattern used by Docker scenario scripts.
66
7+ docker_e2e_normalize_positive_int_value () {
8+ local label=" ${1:? missing value label} "
9+ local value=" ${2-} "
10+ if [[ ! " $value " =~ ^[0-9]+$ ]] || (( 10 #$value < 1 )) ; then
11+ echo " invalid $label : $value " >&2
12+ return 2
13+ fi
14+ printf ' %s\n' " $(( 10 #$value )) "
15+ }
16+
17+ docker_e2e_read_positive_int_env () {
18+ local name=" ${1:? missing environment variable name} "
19+ local fallback=" ${2:? missing fallback value} "
20+ local value=" ${! name-} "
21+ if [ -z " ${! name+x} " ]; then
22+ value=" $fallback "
23+ fi
24+ docker_e2e_normalize_positive_int_value " $name " " $value "
25+ }
26+
727run_logged () {
828 local label=" $1 "
929 shift
30+ docker_e2e_read_positive_int_env OPENCLAW_DOCKER_E2E_LOG_PRINT_BYTES 65536 > /dev/null || return $?
1031 local log_file
1132 log_file=" $( docker_e2e_run_log " $label " ) "
1233 if ! " $@ " > " $log_file " 2>&1 ; then
13- docker_e2e_print_log " $log_file "
34+ local print_status=0
35+ docker_e2e_print_log " $log_file " || print_status=" $? "
1436 rm -f " $log_file "
37+ if [ " $print_status " -ne 0 ]; then
38+ return " $print_status "
39+ fi
1540 return 1
1641 fi
1742 rm -f " $log_file "
@@ -20,26 +45,36 @@ run_logged() {
2045run_logged_print () {
2146 local label=" $1 "
2247 shift
48+ docker_e2e_read_positive_int_env OPENCLAW_DOCKER_E2E_LOG_PRINT_BYTES 65536 > /dev/null || return $?
2349 local log_file
2450 log_file=" $( docker_e2e_run_log " $label " ) "
2551 if ! " $@ " > " $log_file " 2>&1 ; then
26- docker_e2e_print_log " $log_file "
52+ local print_status=0
53+ docker_e2e_print_log " $log_file " || print_status=" $? "
2754 rm -f " $log_file "
55+ if [ " $print_status " -ne 0 ]; then
56+ return " $print_status "
57+ fi
2858 return 1
2959 fi
30- docker_e2e_print_log " $log_file "
60+ docker_e2e_print_log " $log_file " || {
61+ local print_status=" $? "
62+ rm -f " $log_file "
63+ return " $print_status "
64+ }
3165 rm -f " $log_file "
3266}
3367
3468run_logged_print_heartbeat () {
3569 local label=" $1 "
3670 local interval_seconds=" $2 "
3771 shift 2
38- if ! [[ " $interval_seconds " =~ ^[0-9]+$ ]] || [ " $interval_seconds " -lt 1 ]; then
39- interval_seconds=" 30"
40- else
41- interval_seconds=" $(( 10 #$interval_seconds )) "
42- fi
72+ docker_e2e_read_positive_int_env OPENCLAW_DOCKER_E2E_LOG_PRINT_BYTES 65536 > /dev/null || return $?
73+ interval_seconds=" $( docker_e2e_normalize_positive_int_value " Docker E2E log heartbeat interval" " $interval_seconds " ) " || return $?
74+ local heartbeat_term_grace_seconds
75+ heartbeat_term_grace_seconds=" $(
76+ docker_e2e_read_positive_int_env OPENCLAW_DOCKER_E2E_HEARTBEAT_TERM_GRACE_SECONDS 30
77+ ) " || return $?
4378 local log_file
4479 log_file=" $( docker_e2e_run_log " $label " ) "
4580 local command_pid=" "
@@ -55,14 +90,8 @@ run_logged_print_heartbeat() {
5590 return 0
5691 fi
5792 kill -TERM " $command_pid " 2> /dev/null || true
58- local grace_seconds=" ${OPENCLAW_DOCKER_E2E_HEARTBEAT_TERM_GRACE_SECONDS:- 30} "
59- if ! [[ " $grace_seconds " =~ ^[0-9]+$ ]] || [ " $grace_seconds " -lt 1 ]; then
60- grace_seconds=" 30"
61- else
62- grace_seconds=" $(( 10 #$grace_seconds )) "
63- fi
6493 local wait_attempt
65- for wait_attempt in $( seq 1 " $(( grace_seconds * 10 )) " ) ; do
94+ for wait_attempt in $( seq 1 " $(( heartbeat_term_grace_seconds * 10 )) " ) ; do
6695 if ! kill -0 " $command_pid " 2> /dev/null; then
6796 return 0
6897 fi
@@ -130,7 +159,11 @@ run_logged_print_heartbeat() {
130159 wait " $command_pid "
131160 status=$?
132161 set -e
133- docker_e2e_print_log " $log_file "
162+ docker_e2e_print_log " $log_file " || {
163+ local print_status=" $? "
164+ cleanup_heartbeat_command 0
165+ return " $print_status "
166+ }
134167 cleanup_heartbeat_command 0
135168 return " $status "
136169}
@@ -144,12 +177,8 @@ docker_e2e_run_log() {
144177
145178docker_e2e_print_log () {
146179 local log_file=" $1 "
147- local max_bytes=" ${OPENCLAW_DOCKER_E2E_LOG_PRINT_BYTES:- 65536} "
148- if ! [[ " $max_bytes " =~ ^[0-9]+$ ]] || [ " $max_bytes " -lt 1 ]; then
149- max_bytes=" 65536"
150- else
151- max_bytes=" $(( 10 #$max_bytes )) "
152- fi
180+ local max_bytes
181+ max_bytes=" $( docker_e2e_read_positive_int_env OPENCLAW_DOCKER_E2E_LOG_PRINT_BYTES 65536) " || return $?
153182 if [ ! -f " $log_file " ]; then
154183 return 0
155184 fi
0 commit comments