Files
relata/internal/api/health_test.go
T
2026-08-11 10:40:10 +01:00

45 lines
1.3 KiB
Go

package api
import (
"context"
"fmt"
"net/http"
"net/http/httptest"
"strings"
"testing"
"time"
)
// The readiness probe is unauthenticated. MongoDB's driver errors embed the
// topology — host, port, and, when the connection string carries them,
// credentials — so the raw error must never reach the response body.
func TestReadinessDoesNotEchoDependencyErrorText(t *testing.T) {
secret := "mongodb://relata:sup3rs3cr3t@db.internal:27017/relata?authSource=admin"
h := &HealthChecker{
Mongo: func(context.Context) error {
return fmt.Errorf("server selection error: current topology: { Servers: [{ Addr: %s }] }", secret)
},
Version: "test",
Started: time.Now(),
}
w := httptest.NewRecorder()
h.Ready(w, httptest.NewRequest(http.MethodGet, "/health/ready", nil))
body := w.Body.String()
for _, leak := range []string{"sup3rs3cr3t", "db.internal", "27017", "authSource", "topology"} {
if strings.Contains(body, leak) {
t.Fatalf("readiness response leaks %q from the driver error:\n%s", leak, body)
}
}
// It must still report the failure clearly.
if w.Code != http.StatusServiceUnavailable {
t.Fatalf("status = %d, want %d when a required dependency is down",
w.Code, http.StatusServiceUnavailable)
}
if !strings.Contains(body, "unavailable") {
t.Fatalf("readiness hid the failure entirely:\n%s", body)
}
}