diff --git a/cmd/cli/upstream_probe_journal_test.go b/cmd/cli/upstream_probe_journal_test.go index b36208d..93473a0 100644 --- a/cmd/cli/upstream_probe_journal_test.go +++ b/cmd/cli/upstream_probe_journal_test.go @@ -22,14 +22,30 @@ func customProbeUpstream() (string, *ctrld.UpstreamConfig) { } } -// retainedProbeLines returns the captured lines that the journal keeps. -func retainedProbeLines(t *testing.T, logs *syncBuffer) []map[string]any { +// retainedProbeLines returns the captured lines that the journal keeps. When +// messages are given, only the lines that start with one of them come back. +// captureDebugMainLog swaps the process-wide mainLog, so any goroutine of +// another test can add a warn or error line to the same buffer; a caller that +// asserts on field values names the lines its own probe wrote. +func retainedProbeLines(t *testing.T, logs *syncBuffer, messages ...string) []map[string]any { t.Helper() var retained []map[string]any for _, event := range jsonLogEvents(t, logs, "") { switch event["level"] { case "error", "warn": + default: + continue + } + if len(messages) == 0 { retained = append(retained, event) + continue + } + message, _ := event["message"].(string) + for _, want := range messages { + if strings.HasPrefix(message, want) { + retained = append(retained, event) + break + } } } return retained @@ -57,7 +73,7 @@ func Test_upstreamFailureLogKeepsACustomKeyOutOfTheJournal(t *testing.T) { (&upstreamFailureLog{}).report(upstream, uc, errors.New("probe failed"), time.Second) - retained := retainedProbeLines(t, logs) + retained := retainedProbeLines(t, logs, "Upstream check failed after ") if len(retained) != 1 { t.Fatalf("retained lines: got %d, want 1", len(retained)) } @@ -82,7 +98,7 @@ func Test_checkUpstreamOnceKeepsACustomKeyOutOfTheJournal(t *testing.T) { t.Fatal("expected the resolver creation to fail") } - retained := retainedProbeLines(t, logs) + retained := retainedProbeLines(t, logs, "Failed to create resolver") if len(retained) != 1 { t.Fatalf("retained lines: got %d, want 1", len(retained)) } @@ -107,7 +123,7 @@ func Test_checkDnsLoopKeepsACustomKeyOutOfTheJournal(t *testing.T) { p.checkDnsLoop() - retained := retainedProbeLines(t, logs) + retained := retainedProbeLines(t, logs, "could not perform loop check", "could not send DNS loop check query") if len(retained) == 0 { t.Fatal("the loop check failure must stay visible above debug") } @@ -129,7 +145,7 @@ func Test_logUpstreamPingFailuresKeepsACustomKeyOutOfTheJournal(t *testing.T) { logUpstreamPingFailures(map[string]*ctrld.UpstreamConfig{probeSecret: uc}) - retained := retainedProbeLines(t, logs) + retained := retainedProbeLines(t, logs, "failed to connect to the upstream") if len(retained) != 1 { t.Fatalf("retained lines: got %d, want 1", len(retained)) }