package activator import ( "bytes" "github.com/carlosframework/platform/internal/registry" "log" "net/http/httptest" "strings" "testing" "time" ) func TestUnseededDiagnosticsStayBoundedWhileEveryRequestRefuses(t *testing.T) { var logs bytes.Buffer old := log.Writer() log.SetOutput(&logs) defer log.SetOutput(old) now := time.Unix(100, 0) a := &Service{now: func() time.Time { return now }} rt := registry.Route{Host: "b.example"} missing := &ServingFilesMissing{Incarnation: "inc-1"} events, due := 0, 0 for i := 0; i < 100; i++ { w := httptest.NewRecorder() a.serveWakeError(w, httptest.NewRequest("GET", "/", nil), rt, missing) if w.Code != 503 { t.Fatal(w.Code) } if _, ok := a.wakeFailureEvent(&actEntry{host: rt.Host}, missing); ok { events++ } a.mu.Lock() if a.allowFilesDiagnosticLocked(a.seedDiagnostics[rt.Host], "due") { due++ } a.mu.Unlock() } if events != 1 || due != 1 || strings.Count(logs.String(), "activator: wake") != 1 { t.Fatal(events, due, logs.String()) } now = now.Add(time.Minute) if !a.allowFilesDiagnostic(rt.Host, missing, "http") { t.Fatal("suppressed next interval") } if !a.allowFilesDiagnostic(rt.Host, &ServingFilesMissing{Incarnation: "inc-2"}, "http") { t.Fatal("suppressed next incarnation") } }