manager_test.go 795 B

12345678910111213141516171819202122232425262728293031323334
  1. package services
  2. import (
  3. "bytes"
  4. "fmt"
  5. "os"
  6. "path/filepath"
  7. "testing"
  8. )
  9. func TestFailedHookRestoresStoredService(t *testing.T) {
  10. path := filepath.Join(t.TempDir(), "services.json")
  11. m := NewManager(path)
  12. if err := m.SetService("ssh", 2222, false); err != nil {
  13. t.Fatal(err)
  14. }
  15. before, _ := os.ReadFile(path)
  16. old, _ := m.GetService("ssh")
  17. m.RegisterHook("ssh", func(name string, port int, disabled bool) error {
  18. _, _ = m.GetService(name)
  19. if port == 3333 {
  20. return fmt.Errorf("port in use")
  21. }
  22. return nil
  23. })
  24. if err := m.SetService("ssh", 3333, false); err == nil {
  25. t.Fatal("listener error lost")
  26. }
  27. current, _ := m.GetService("ssh")
  28. after, _ := os.ReadFile(path)
  29. if current != old || !bytes.Equal(before, after) {
  30. t.Fatal("failed change was not rolled back")
  31. }
  32. }