diff options
Diffstat (limited to 'internal/api/server_hardening_test.go')
| -rw-r--r-- | internal/api/server_hardening_test.go | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/internal/api/server_hardening_test.go b/internal/api/server_hardening_test.go index bb9f24c..fcdf87b 100644 --- a/internal/api/server_hardening_test.go +++ b/internal/api/server_hardening_test.go @@ -8,7 +8,6 @@ import ( "strings" "testing" "time" - "github.com/Fuwn/plutia/internal/config" "github.com/Fuwn/plutia/internal/storage" "github.com/Fuwn/plutia/internal/types" @@ -16,10 +15,13 @@ import ( func TestResolveRateLimitPerIP(t *testing.T) { store, err := storage.OpenPebble(t.TempDir()) + if err != nil { t.Fatalf("open pebble: %v", err) } + defer store.Close() + if err := store.PutState(types.StateV1{Version: 1, DID: "did:plc:alice", DIDDocument: []byte(`{"id":"did:plc:alice"}`), ChainTipHash: "tip", LatestOpSeq: 1, UpdatedAt: time.Now().UTC()}); err != nil { t.Fatalf("put state: %v", err) } @@ -31,11 +33,12 @@ func TestResolveRateLimitPerIP(t *testing.T) { cfg.RateLimit.ProofRPS = 1 cfg.RateLimit.ProofBurst = 1 h := NewServer(cfg, store, nil, nil).Handler() - req1 := httptest.NewRequest(http.MethodGet, "/did/did:plc:alice", nil) req1.RemoteAddr = "203.0.113.7:12345" rr1 := httptest.NewRecorder() + h.ServeHTTP(rr1, req1) + if rr1.Code != http.StatusOK { t.Fatalf("first request status: got %d want %d", rr1.Code, http.StatusOK) } @@ -43,7 +46,9 @@ func TestResolveRateLimitPerIP(t *testing.T) { req2 := httptest.NewRequest(http.MethodGet, "/did/did:plc:alice", nil) req2.RemoteAddr = "203.0.113.7:12345" rr2 := httptest.NewRecorder() + h.ServeHTTP(rr2, req2) + if rr2.Code != http.StatusTooManyRequests { t.Fatalf("second request status: got %d want %d", rr2.Code, http.StatusTooManyRequests) } @@ -51,9 +56,11 @@ func TestResolveRateLimitPerIP(t *testing.T) { func TestStatusIncludesBuildInfo(t *testing.T) { store, err := storage.OpenPebble(t.TempDir()) + if err != nil { t.Fatalf("open pebble: %v", err) } + defer store.Close() h := NewServer(config.Default(), store, nil, nil, WithBuildInfo(BuildInfo{ @@ -62,25 +69,31 @@ func TestStatusIncludesBuildInfo(t *testing.T) { BuildDate: "2026-02-26T00:00:00Z", GoVersion: "go1.test", })).Handler() - req := httptest.NewRequest(http.MethodGet, "/status", nil) rr := httptest.NewRecorder() + h.ServeHTTP(rr, req) + if rr.Code != http.StatusOK { t.Fatalf("status code: got %d want %d", rr.Code, http.StatusOK) } var payload map[string]any + if err := json.Unmarshal(rr.Body.Bytes(), &payload); err != nil { t.Fatalf("decode status: %v", err) } + build, ok := payload["build"].(map[string]any) + if !ok { t.Fatalf("missing build section: %v", payload) } + if got := build["version"]; got != "v0.1.0" { t.Fatalf("unexpected build version: %v", got) } + if got := build["commit"]; got != "abc123" { t.Fatalf("unexpected build commit: %v", got) } @@ -88,20 +101,26 @@ func TestStatusIncludesBuildInfo(t *testing.T) { func TestMetricsExposeRequiredSeries(t *testing.T) { store, err := storage.OpenPebble(t.TempDir()) + if err != nil { t.Fatalf("open pebble: %v", err) } + defer store.Close() h := NewServer(config.Default(), store, nil, nil).Handler() req := httptest.NewRequest(http.MethodGet, "/metrics", nil) rr := httptest.NewRecorder() + h.ServeHTTP(rr, req) + if rr.Code != http.StatusOK { t.Fatalf("metrics status: got %d want %d", rr.Code, http.StatusOK) } + body, _ := io.ReadAll(rr.Body) text := string(body) + for _, metric := range []string{ "ingest_ops_total", "ingest_ops_per_second", |