1package app
2
3import (
4 "os"
5 "path/filepath"
6 "strconv"
7 "testing"
8
9 "github.com/stretchr/testify/assert"
10 "github.com/stretchr/testify/require"
11)
12
13func TestFindRunningPidFileInLocations_PrefersLiveProcessOverStale(t *testing.T) {
14 tmpDir := t.TempDir()
15 staleFile := filepath.Join(tmpDir, "stale.pid")
16 liveFile := filepath.Join(tmpDir, "live.pid")
17
18 require.NoError(t, os.WriteFile(staleFile, []byte("999999"), 0600))
19 myPid := os.Getpid()
20 require.NoError(t, os.WriteFile(liveFile, []byte(strconv.Itoa(myPid)), 0600))
21
22 path, pid, err := findRunningPidFileInLocations([]string{staleFile, liveFile})
23 require.NoError(t, err)
24 assert.Equal(t, liveFile, path)
25 assert.Equal(t, myPid, pid)
26
27 _, statErr := os.Stat(staleFile)
28 assert.True(t, os.IsNotExist(statErr))
29}
30
31func TestFindRunningPidFileInLocations_RemovesInvalidAndReturnsError(t *testing.T) {
32 tmpDir := t.TempDir()
33 invalidFile := filepath.Join(tmpDir, "invalid.pid")
34
35 require.NoError(t, os.WriteFile(invalidFile, []byte("not-a-pid"), 0600))
36
37 _, _, err := findRunningPidFileInLocations([]string{invalidFile})
38 require.Error(t, err)
39 assert.Contains(t, err.Error(), "stale gordon PID file")
40
41 _, statErr := os.Stat(invalidFile)
42 assert.True(t, os.IsNotExist(statErr))
43}
44
45func TestFindRunningPidFileInLocations_NoFiles(t *testing.T) {
46 _, _, err := findRunningPidFileInLocations([]string{})
47 require.Error(t, err)
48 assert.Contains(t, err.Error(), "gordon PID file not found")
49}