package sessionhealth import ( "context" "net/http" "net/http/httptest" "strings" "testing" ) func TestHTTPClientReadsReadyAndDegradedStatus(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(response http.ResponseWriter, request *http.Request) { if request.URL.Path != "/readyz" { t.Fatalf("path = %s", request.URL.Path) } response.WriteHeader(http.StatusServiceUnavailable) _, _ = response.Write([]byte(`{"status":"degraded","broker":{"total_attachments":1,"active_channels":1,"attach_attempts":0,"successful_attachments":0,"rejected_attachments":0,"transport_opens":0,"transport_open_failures":0,"transport_reconnects":0,"transport_failures":0,"slow_consumer_disconnects":0,"rx_bytes":2,"tx_bytes":3,"fanout_bytes":0,"channels":[]},"websocket":{"active_connections":1,"upgraded_connections":0,"accepted_connections":0,"closed_connections":0,"origin_rejections":0,"protocol_rejections":0,"authentication_failures":0,"attachment_failures":0,"lifecycle_failures":0,"heartbeat_failures":0,"outbound_failures":0},"tickets":{"active_bindings":0,"max_active_bindings":0,"consumed":0,"heartbeats":0,"released_writers":0,"closed_streams":0,"expired_streams":0,"lifecycle_failures":0},"serial":{"active_leases":1,"rx_bytes":2,"tx_bytes":3,"dropped_events":0,"channels":[{"channel":"CH01","active":true,"rx_bytes":2,"tx_bytes":3}]},"serial_error":"seriald degraded"}`)) })) defer server.Close() client, err := NewHTTPClient(server.URL + "/readyz") if err != nil { t.Fatal(err) } status, err := client.Status(context.Background()) if err != nil { t.Fatal(err) } if status.Status != "degraded" || status.Broker.TotalAttachments != 1 || len(status.Serial.Channels) != 1 || status.Serial.Channels[0].TXBytes != 3 { t.Fatalf("status = %#v", status) } } func TestHTTPClientRejectsNonLoopbackAndUnknownFields(t *testing.T) { if _, err := NewHTTPClient("http://192.168.0.223:8081/readyz"); err == nil || !strings.Contains(err.Error(), "loopback") { t.Fatalf("non-loopback error = %v", err) } server := httptest.NewServer(http.HandlerFunc(func(response http.ResponseWriter, request *http.Request) { _, _ = response.Write([]byte(`{"status":"ok","unexpected":true}`)) })) defer server.Close() client, err := NewHTTPClient(server.URL) if err != nil { t.Fatal(err) } if _, err := client.Status(context.Background()); err == nil { t.Fatal("unknown status fields must be rejected") } }