File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -16,6 +16,20 @@ openclaw_plugins_read_positive_int_env() {
1616 printf " %s\n" " $(( 10 #$value )) "
1717}
1818
19+ openclaw_plugins_read_nonnegative_decimal_env () {
20+ local name=" ${1:? missing environment variable name} "
21+ local fallback=" ${2:? missing fallback value} "
22+ local value=" ${! name-} "
23+ if [[ -z " ${! name+x} " ]]; then
24+ value=" $fallback "
25+ fi
26+ if [[ ! " $value " =~ ^[0-9]+ ([.][0-9]+)? $ ]]; then
27+ echo " invalid $name : $value " >&2
28+ return 2
29+ fi
30+ printf " %s\n" " $value "
31+ }
32+
1933openclaw_plugins_cleanup_fixture_servers () {
2034 local pid_file
2135 local pid
@@ -47,9 +61,9 @@ openclaw_plugins_fixture_process_alive() {
4761openclaw_plugins_stop_fixture_process () {
4862 local pid=" $1 "
4963 local _
50- local attempts
64+ local attempts interval
5165 attempts=" $( openclaw_plugins_read_positive_int_env OPENCLAW_PLUGINS_FIXTURE_STOP_ATTEMPTS 40) " || return $?
52- local interval=" ${ OPENCLAW_PLUGINS_FIXTURE_STOP_INTERVAL_SECONDS:- 0.25} "
66+ interval=" $( openclaw_plugins_read_nonnegative_decimal_env OPENCLAW_PLUGINS_FIXTURE_STOP_INTERVAL_SECONDS 0.25) " || return $?
5367 if declare -F openclaw_e2e_stop_process > /dev/null 2>&1 ; then
5468 openclaw_e2e_stop_process " $pid "
5569 return
Original file line number Diff line number Diff line change @@ -423,6 +423,40 @@ test -d "$OPENCLAW_PLUGINS_TMP_DIR"
423423 expect ( result . stdout ) . not . toContain ( "probe" ) ;
424424 } ) ;
425425
426+ it ( "rejects invalid fixture stop intervals before cleanup polling" , ( ) => {
427+ const result = spawnSync (
428+ "/bin/bash" ,
429+ [
430+ "-c" ,
431+ [
432+ "set -euo pipefail" ,
433+ "source scripts/e2e/lib/plugins/fixtures.sh" ,
434+ "openclaw_plugins_signal_fixture_process() { echo signal; }" ,
435+ "openclaw_plugins_fixture_process_alive() { echo probe; return 1; }" ,
436+ "set +e" ,
437+ "openclaw_plugins_stop_fixture_process 12345" ,
438+ 'status="$?"' ,
439+ "set -e" ,
440+ 'exit "$status"' ,
441+ ] . join ( "\n" ) ,
442+ ] ,
443+ {
444+ cwd : process . cwd ( ) ,
445+ encoding : "utf8" ,
446+ env : {
447+ ...process . env ,
448+ OPENCLAW_PLUGINS_FIXTURE_STOP_ATTEMPTS : "2" ,
449+ OPENCLAW_PLUGINS_FIXTURE_STOP_INTERVAL_SECONDS : "soon" ,
450+ } ,
451+ } ,
452+ ) ;
453+
454+ expect ( result . status ) . toBe ( 2 ) ;
455+ expect ( result . stderr ) . toContain ( "invalid OPENCLAW_PLUGINS_FIXTURE_STOP_INTERVAL_SECONDS: soon" ) ;
456+ expect ( result . stdout ) . not . toContain ( "signal" ) ;
457+ expect ( result . stdout ) . not . toContain ( "probe" ) ;
458+ } ) ;
459+
426460 it ( "bounds npm fixture registry logs when readiness fails" , ( ) => {
427461 const root = mkdtempSync ( path . join ( tmpdir ( ) , "openclaw-plugin-npm-fixture-log-" ) ) ;
428462 try {
You can’t perform that action at this time.
0 commit comments