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