mirror of
https://github.com/tiennm99/goclaw.git
synced 2026-07-25 04:20:16 +00:00
137 lines
3.8 KiB
Go
137 lines
3.8 KiB
Go
package cmd
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
)
|
|
|
|
func TestResolveGatewayClientOverrides(t *testing.T) {
|
|
t.Setenv("GOCLAW_GATEWAY_TOKEN", "env-token")
|
|
t.Setenv("GOCLAW_SERVER", "")
|
|
t.Setenv("GOCLAW_GATEWAY_URL", "")
|
|
|
|
oldServer := gatewayServerOverride
|
|
oldToken := gatewayTokenOverride
|
|
oldCfg := cfgFile
|
|
t.Cleanup(func() {
|
|
gatewayServerOverride = oldServer
|
|
gatewayTokenOverride = oldToken
|
|
cfgFile = oldCfg
|
|
})
|
|
|
|
cfgFile = "/path/that/does/not/exist"
|
|
gatewayServerOverride = "https://goclaw.example.com/"
|
|
gatewayTokenOverride = "flag-token"
|
|
|
|
if got := resolveGatewayBaseURL(); got != "https://goclaw.example.com" {
|
|
t.Fatalf("resolveGatewayBaseURL() = %q, want trimmed override", got)
|
|
}
|
|
if got := resolveGatewayToken(); got != "flag-token" {
|
|
t.Fatalf("resolveGatewayToken() = %q, want flag token", got)
|
|
}
|
|
|
|
gatewayTokenOverride = ""
|
|
if got := resolveGatewayToken(); got != "env-token" {
|
|
t.Fatalf("resolveGatewayToken() = %q, want env token", got)
|
|
}
|
|
|
|
gatewayServerOverride = ""
|
|
t.Setenv("GOCLAW_SERVER", "remote.example.com:18790/")
|
|
if got := resolveGatewayBaseURL(); got != "http://remote.example.com:18790" {
|
|
t.Fatalf("resolveGatewayBaseURL() = %q, want normalized env URL", got)
|
|
}
|
|
|
|
t.Setenv("GOCLAW_SERVER", "http://127.0.0.1:19999/")
|
|
if got := resolveGatewayBaseURL(); got != "http://127.0.0.1:19999" {
|
|
t.Fatalf("resolveGatewayBaseURL() = %q, want trimmed GOCLAW_SERVER URL", got)
|
|
}
|
|
}
|
|
|
|
func TestGatewayHTTPDoRawUsesServerAndTokenOverride(t *testing.T) {
|
|
oldServer := gatewayServerOverride
|
|
oldToken := gatewayTokenOverride
|
|
oldClient := httpClient
|
|
t.Cleanup(func() {
|
|
gatewayServerOverride = oldServer
|
|
gatewayTokenOverride = oldToken
|
|
httpClient = oldClient
|
|
})
|
|
|
|
var sawRequest bool
|
|
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
sawRequest = true
|
|
if r.URL.Path != "/v1/traces" {
|
|
t.Errorf("path = %q, want /v1/traces", r.URL.Path)
|
|
}
|
|
if got := r.Header.Get("Authorization"); got != "Bearer flag-token" {
|
|
t.Errorf("Authorization = %q, want Bearer flag-token", got)
|
|
}
|
|
if got := r.Header.Get("X-GoClaw-User-Id"); got != "system" {
|
|
t.Errorf("X-GoClaw-User-Id = %q, want system", got)
|
|
}
|
|
w.Header().Set("Content-Type", "application/json")
|
|
_, _ = w.Write([]byte(`{"ok":true}`))
|
|
}))
|
|
defer srv.Close()
|
|
|
|
gatewayServerOverride = srv.URL
|
|
gatewayTokenOverride = "flag-token"
|
|
httpClient = srv.Client()
|
|
|
|
raw, status, err := gatewayHTTPDoRaw(http.MethodGet, "/v1/traces", nil)
|
|
if err != nil {
|
|
t.Fatalf("gatewayHTTPDoRaw: %v", err)
|
|
}
|
|
if status != http.StatusOK {
|
|
t.Fatalf("status = %d, want 200", status)
|
|
}
|
|
if string(raw) != `{"ok":true}` {
|
|
t.Fatalf("raw = %s", raw)
|
|
}
|
|
if !sawRequest {
|
|
t.Fatal("test server did not receive request")
|
|
}
|
|
}
|
|
|
|
func TestResolveGatewayWebSocketURLUsesServerOverride(t *testing.T) {
|
|
oldServer := gatewayServerOverride
|
|
oldCfg := cfgFile
|
|
t.Cleanup(func() {
|
|
gatewayServerOverride = oldServer
|
|
cfgFile = oldCfg
|
|
})
|
|
|
|
cfgFile = "/path/that/does/not/exist"
|
|
gatewayServerOverride = "https://goclaw.example.com/base/"
|
|
|
|
got, err := resolveGatewayWebSocketURL()
|
|
if err != nil {
|
|
t.Fatalf("resolveGatewayWebSocketURL: %v", err)
|
|
}
|
|
if got != "wss://goclaw.example.com/base/ws" {
|
|
t.Fatalf("resolveGatewayWebSocketURL() = %q", got)
|
|
}
|
|
}
|
|
|
|
func TestGatewayHTTPDoRawWithLimitRejectsOversizedResponse(t *testing.T) {
|
|
oldServer := gatewayServerOverride
|
|
oldClient := httpClient
|
|
t.Cleanup(func() {
|
|
gatewayServerOverride = oldServer
|
|
httpClient = oldClient
|
|
})
|
|
|
|
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
_, _ = w.Write([]byte("12345"))
|
|
}))
|
|
defer srv.Close()
|
|
|
|
gatewayServerOverride = srv.URL
|
|
httpClient = srv.Client()
|
|
|
|
if _, _, err := gatewayHTTPDoRawWithLimit(http.MethodGet, "/big", nil, 4); err == nil {
|
|
t.Fatal("expected oversized response error")
|
|
}
|
|
}
|