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.
49 lines
2.4 KiB
49 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")
|
|
}
|
|
}
|
|
|