package netsocket import ( "context" "net" "path/filepath" "testing" "tera-clone/services/tera-api/internal/networkconfig" ) func TestClientServerApplyConfirmRoundTrip(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 := &networkconfig.MockController{} server := Server{Controller: controller} done := make(chan error, 1) go func() { done <- server.Serve(listener) }() client := NewClient(path) config := networkconfig.Config{Interfaces: []networkconfig.Interface{ {Name: "Interface-1", Device: "eth0", Role: "internal", Address: "192.168.0.223/24", Weight: 1}, {Name: "Interface-2", Device: "eth1", Role: "external", Address: "192.168.78.55/24", Gateway: "192.168.78.1", Weight: 1}, }} result, err := client.Apply(context.Background(), config) if err != nil || result.TransactionID == "" { t.Fatalf("Apply() = %+v, %v", result, err) } status, err := client.Confirm(context.Background(), result.TransactionID) if err != nil || status.State != "idle" { t.Fatalf("Confirm() = %+v, %v", status, err) } if _, err := client.Apply(context.Background(), config); err != nil { t.Fatal(err) } if err := client.FactoryReset(context.Background(), config); err != nil { t.Fatal(err) } if controller.Pending != nil { t.Fatal("network rollback survived factory reset") } _ = listener.Close() <-done }