package gateway import ( "fmt" "net" "net/http" "net/http/httptest" "strings" "testing" "ananta-ps/internal/config" ) func TestGatewayReportsBindFailureAndRollsBack(t *testing.T) { blocker, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { t.Fatal(err) } defer blocker.Close() probe, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { t.Fatal(err) } listPort := probe.Addr().(*net.TCPAddr).Port probe.Close() cfg := &config.Config{Network: config.NetworkConfig{BindHost: "127.0.0.1", Proxy: config.ProxyConfig{ LoginListPort: listPort, HttpPort: blocker.Addr().(*net.TCPAddr).Port, }}} gw := New(cfg, "../../public", "../../certs") if err := gw.Start(); err == nil { gw.Stop() t.Fatal("occupied HTTP port reported as ready") } ln, err := net.Listen("tcp", net.JoinHostPort("127.0.0.1", fmt.Sprint(listPort))) if err != nil { t.Fatalf("partial startup leaked login-list listener: %v", err) } ln.Close() } func TestGatewayRequiresUsableTLSCertificate(t *testing.T) { gw := New(&config.Config{}, t.TempDir(), t.TempDir()) if err := gw.Start(); err == nil { gw.Stop() t.Fatal("missing certificate silently disabled HTTPS") } } func TestGatewayDispatch(t *testing.T) { cfg := &config.Config{ Client: config.ClientConfig{ ServerID: 801, }, Network: config.NetworkConfig{ AdvertisedHost: "127.0.0.1", LoginPorts: []int{5200, 5201}, Proxy: config.ProxyConfig{ LoginListPort: 5801, }, }, } gw := New(cfg, "../../public", "../../certs") // Test LoginList req := httptest.NewRequest("GET", "/LoginList", nil) w := httptest.NewRecorder() gw.handleDispatch(w, req) resp := w.Result() if resp.StatusCode != http.StatusOK { t.Fatalf("expected 200, got %d", resp.StatusCode) } body := w.Body.String() if !strings.Contains(body, "127.0.0.1:5200") { t.Fatalf("expected 127.0.0.1:5200 in LoginList, got %s", body) } // Test ServerList req = httptest.NewRequest("GET", "/OuterTest1/serverlist.txt", nil) w = httptest.NewRecorder() gw.handleDispatch(w, req) if w.Result().StatusCode != http.StatusOK { t.Fatalf("expected 200 for serverlist.txt, got %d", w.Result().StatusCode) } if !strings.Contains(w.Body.String(), "QA101,Outer,http://127.0.0.1:5801/LoginList,1,14") { t.Fatalf("unexpected serverlist body: %s", w.Body.String()) } }