You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
2.4 KiB

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")
}
}