Files

89 lines
2.3 KiB
Go

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