You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
1.6 KiB

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