package services import ( "bytes" "fmt" "os" "path/filepath" "testing" ) func TestFailedHookRestoresStoredService(t *testing.T) { path := filepath.Join(t.TempDir(), "services.json") m := NewManager(path) if err := m.SetService("ssh", 2222, false); err != nil { t.Fatal(err) } before, _ := os.ReadFile(path) old, _ := m.GetService("ssh") m.RegisterHook("ssh", func(name string, port int, disabled bool) error { _, _ = m.GetService(name) if port == 3333 { return fmt.Errorf("port in use") } return nil }) if err := m.SetService("ssh", 3333, false); err == nil { t.Fatal("listener error lost") } current, _ := m.GetService("ssh") after, _ := os.ReadFile(path) if current != old || !bytes.Equal(before, after) { t.Fatal("failed change was not rolled back") } }