diff --git a/node-tools/internal/launch/state_failed_test.go b/node-tools/internal/launch/state_failed_test.go index 40595c2..8742e0b 100644 --- a/node-tools/internal/launch/state_failed_test.go +++ b/node-tools/internal/launch/state_failed_test.go @@ -80,7 +80,7 @@ const callingBundle = `#!/bin/sh while IFS= read -r line; do id=$(printf '%s' "$line" | sed -n 's/.*"id":\([0-9]*\)[,}].*/\1/p') case "$line" in - *'"method":"initialize"'*) echo started >> "$STARTS"; printf '{"jsonrpc":"2.0","id":%s,"result":{}}\n' "$id" ;; + *'"method":"initialize"'*) echo started >&2; printf '{"jsonrpc":"2.0","id":%s,"result":{}}\n' "$id" ;; *'"method":"tools/list"'*) printf '{"jsonrpc":"2.0","id":%s,"result":{"tools":[{"name":"t","description":"d"}]}}\n' "$id" ;; *'"method":"tools/call"'*) [ "$MODE" = long ] && printf '%4096s\n' x ;; esac @@ -106,13 +106,12 @@ func TestAnOverlongLineAndAnUnansweredCallAreSaid(t *testing.T) { CallTimeout = row.timeout dir := t.TempDir() entry := filepath.Join(dir, "bundle") - starts := filepath.Join(dir, "starts") if err := os.WriteFile(entry, []byte(callingBundle), 0o755); err != nil { t.Fatal(err) } said := make(chan string, 32) logf := func(f string, a ...any) { said <- fmt.Sprintf(f, a...) } - l, err := Start("caller", entry, append(os.Environ(), "MODE="+row.mode, "STARTS="+starts), &refusingState{}, logf) + l, err := Start("caller", entry, append(os.Environ(), "MODE="+row.mode), &refusingState{}, logf) if err != nil { t.Fatal(err) } @@ -134,27 +133,18 @@ func TestAnOverlongLineAndAnUnansweredCallAreSaid(t *testing.T) { t.Fatalf("the call failed with %q, not the cap's reason", err) } } - for found := false; !found; { + // For "long" the bundle is also started again: it says "started" on each start, so twice in all. + started, found := 0, false + for !found || (row.mode == "long" && started < 2) { select { case line := <-said: heard = append(heard, line) - found = strings.Contains(line, want) + found = found || strings.Contains(line, want) + if line == "[caller] started" { + started++ + } case <-timeout: - t.Fatalf("not said; the log: %v", heard) - } - } - if row.mode != "long" { - return - } - // The bundle is started again: its start is written once more. - for { - if b, _ := os.ReadFile(starts); strings.Count(string(b), "started") >= 2 { - return - } - select { - case <-timeout: - t.Fatal("the bundle was not started again") - case <-time.After(10 * time.Millisecond): + t.Fatalf("not said, or the bundle not started again; the log: %v", heard) } } })