package managementaccess import ( "context" "net" "path/filepath" "testing" "tera-clone/services/tera-api/internal/domain" ) type recordingController struct { settings domain.ManagementAccessSettings } func (c *recordingController) Apply(_ context.Context, settings domain.ManagementAccessSettings) error { c.settings = settings return nil } func TestSocketApplyRoundTrip(t *testing.T) { path := filepath.Join(t.TempDir(), "control.sock") listener, err := net.Listen("unix", path) if err != nil { t.Skipf("Unix sockets unavailable: %v", err) } defer listener.Close() controller := &recordingController{} done := make(chan error, 1) go func() { done <- (SocketServer{Controller: controller}).Serve(listener) }() settings := domain.ManagementAccessSettings{ HTTPEnabled: true, HTTPPort: 8081, HTTPSEnabled: true, HTTPSPort: 8443, SSHPort: 22, TelnetPort: 2323, SerialConsoleEnabled: true, IdleTimeoutMinutes: 20, } if err := NewSocketClient(path).Apply(context.Background(), settings); err != nil { t.Fatalf("Apply() error = %v", err) } if controller.settings.HTTPSPort != 8443 || controller.settings.SSHEnabled || controller.settings.TelnetEnabled { t.Fatalf("controller settings = %+v", controller.settings) } _ = listener.Close() <-done } func TestValidateRejectsRecoveryEndpointCollision(t *testing.T) { settings := domain.ManagementAccessSettings{ HTTPEnabled: true, HTTPPort: 8080, HTTPSEnabled: true, HTTPSPort: 443, SSHPort: 22, TelnetPort: 23, SerialConsoleEnabled: true, IdleTimeoutMinutes: 15, } if err := Validate(settings); err == nil { t.Fatal("Validate() accepted reserved port 8080") } }