56 lines
1.8 KiB
Go
56 lines
1.8 KiB
Go
package bootstrap
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"net"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"proxy-pool/internal/config"
|
|
)
|
|
|
|
func TestControlPlaneReadinessTransitionsAfterSuccessfulPull(t *testing.T) {
|
|
readiness := &controlPlaneReadiness{}
|
|
if err := readiness.Ready(context.Background()); !errors.Is(err, ErrNotReady) {
|
|
t.Fatalf("Ready() before pull = %v, want ErrNotReady", err)
|
|
}
|
|
readiness.MarkReady()
|
|
if err := readiness.Ready(context.Background()); err != nil {
|
|
t.Fatalf("Ready() after successful pull = %v", err)
|
|
}
|
|
readiness.MarkUnavailable()
|
|
if err := readiness.Ready(context.Background()); !errors.Is(err, ErrNotReady) {
|
|
t.Fatalf("Ready() after failed pull = %v, want ErrNotReady", err)
|
|
}
|
|
}
|
|
|
|
func TestMetricsRuntimeUsesControlPlaneReadiness(t *testing.T) {
|
|
listener, err := net.Listen("tcp", "127.0.0.1:0")
|
|
if err != nil {
|
|
t.Fatalf("Listen(): %v", err)
|
|
}
|
|
defer listener.Close()
|
|
readiness := &controlPlaneReadiness{}
|
|
runtime, err := newMetricsRuntime(context.Background(), config.Metrics{Enabled: true, Listen: listener.Addr().String()}, Options{
|
|
MetricsListener: listener,
|
|
}, readiness)
|
|
if err != nil {
|
|
t.Fatalf("newMetricsRuntime(): %v", err)
|
|
}
|
|
assertCheckerProbe(t, runtime.handler, "/livez", http.StatusOK, "live\n")
|
|
assertCheckerProbe(t, runtime.handler, "/readyz", http.StatusServiceUnavailable, "unavailable\n")
|
|
readiness.MarkReady()
|
|
assertCheckerProbe(t, runtime.handler, "/readyz", http.StatusOK, "ready\n")
|
|
}
|
|
|
|
func assertCheckerProbe(t *testing.T, handler http.Handler, path string, wantStatus int, wantBody string) {
|
|
t.Helper()
|
|
recorder := httptest.NewRecorder()
|
|
handler.ServeHTTP(recorder, httptest.NewRequest(http.MethodGet, path, nil))
|
|
if recorder.Code != wantStatus || recorder.Body.String() != wantBody {
|
|
t.Fatalf("GET %s = %d %q, want %d %q", path, recorder.Code, recorder.Body.String(), wantStatus, wantBody)
|
|
}
|
|
}
|