89 lines
2.3 KiB
Go
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())
|
|
}
|
|
}
|