activate_unix_test.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //go:build !windows && !plan9 && !js
  2. package daemon
  3. import (
  4. "io"
  5. "os"
  6. "os/user"
  7. "testing"
  8. "src.elv.sh/pkg/daemon/daemondefs"
  9. "src.elv.sh/pkg/daemon/internal/api"
  10. "src.elv.sh/pkg/testutil"
  11. )
  12. func TestActivate_InterruptsOutdatedServerAndSpawnsNewServer(t *testing.T) {
  13. activated := 0
  14. setupForActivate(t, func(name string, argv []string, attr *os.ProcAttr) error {
  15. startServer(t, argv)
  16. activated++
  17. return nil
  18. })
  19. version := api.Version - 1
  20. oldServer := startServerOpts(t, cli("sock", "db"), ServeOpts{Version: &version})
  21. _, err := Activate(io.Discard,
  22. &daemondefs.SpawnConfig{DbPath: "db", SockPath: "sock", RunDir: "."})
  23. if err != nil {
  24. t.Errorf("got error %v, want nil", err)
  25. }
  26. if activated != 1 {
  27. t.Errorf("got activated %v times, want 1", activated)
  28. }
  29. oldServer.WaitQuit()
  30. }
  31. func TestActivate_FailsIfUnableToRemoveHangingSocket(t *testing.T) {
  32. if u, err := user.Current(); err != nil || u.Uid == "0" {
  33. t.Skip("current user is root or unknown")
  34. }
  35. activated := 0
  36. setupForActivate(t, func(name string, argv []string, attr *os.ProcAttr) error {
  37. activated++
  38. return nil
  39. })
  40. testutil.MustMkdirAll("d")
  41. makeHangingUNIXSocket(t, "d/sock")
  42. // Remove write permission so that removing d/sock will fail
  43. os.Chmod("d", 0600)
  44. defer os.Chmod("d", 0700)
  45. _, err := Activate(io.Discard,
  46. &daemondefs.SpawnConfig{DbPath: "db", SockPath: "d/sock", RunDir: "."})
  47. if err == nil {
  48. t.Errorf("got error nil, want non-nil")
  49. }
  50. if activated != 0 {
  51. t.Errorf("got activated %v times, want 0", activated)
  52. }
  53. }