diff options
| author | James O'Doherty <james@theodohertyfamily.com> | 2026-05-22 11:20:24 -0400 |
|---|---|---|
| committer | James O'Doherty <james@theodohertyfamily.com> | 2026-05-22 11:20:24 -0400 |
| commit | 079e4240534cbdc8751f1a127def20f2d1e58da6 (patch) | |
| tree | 3765ab0df3be656eac664a216158ef409e29e6e5 /internal/namespace/lifecycle_test.go | |
| parent | 3b56ccecf46b83fa9b0e4b6c54be6ffda395910c (diff) | |
Refactor lifecycle to support XDG_RUNTIME_DIR and fix binary pathing in E2E tests
Diffstat (limited to 'internal/namespace/lifecycle_test.go')
| -rw-r--r-- | internal/namespace/lifecycle_test.go | 50 |
1 files changed, 15 insertions, 35 deletions
diff --git a/internal/namespace/lifecycle_test.go b/internal/namespace/lifecycle_test.go index 981cfd4..db04e67 100644 --- a/internal/namespace/lifecycle_test.go +++ b/internal/namespace/lifecycle_test.go @@ -2,7 +2,6 @@ package namespace import ( "os" - "os/exec" "path/filepath" "strconv" "testing" @@ -11,23 +10,22 @@ import ( func TestLifecycleReferenceCounting(t *testing.T) { // Use a temporary directory to avoid polluting the system tmpDir := t.TempDir() - SetRuntimeBaseDir(tmpDir) profile := "test-vpn" t.Run("RegisterAndUnregister", func(t *testing.T) { - err := RegisterProcess(profile) + err := RegisterProcess(tmpDir, profile) if err != nil { t.Fatalf("failed to register: %v", err) } - pidsDir := GetPidsDirPath(profile) + pidsDir := GetPidsDirPath(tmpDir, profile) pidFile := filepath.Join(pidsDir, strconv.Itoa(os.Getpid())) if _, err := os.Stat(pidFile); os.IsNotExist(err) { t.Errorf("PID file should exist at %s", pidFile) } - err = UnregisterProcess(profile) + err = UnregisterProcess(tmpDir, profile) if err != nil { t.Fatalf("failed to unregister: %v", err) } @@ -38,23 +36,20 @@ func TestLifecycleReferenceCounting(t *testing.T) { }) t.Run("PruneStalePids", func(t *testing.T) { - pidsDir := GetPidsDirPath(profile) + pidsDir := GetPidsDirPath(tmpDir, profile) if err := os.MkdirAll(pidsDir, 0755); err != nil { t.Fatal(err) } - // Create a fake PID file for a process that definitely doesn't exist - // Using a very high PID or -1 usually works, but let's use a known invalid one. fakePid := "9999999" fakePidFile := filepath.Join(pidsDir, fakePid) if err := os.WriteFile(fakePidFile, []byte(""), 0644); err != nil { t.Fatal(err) } - // Also register the current process so it stays - RegisterProcess(profile) + RegisterProcess(tmpDir, profile) - err := PruneStalePids(profile) + err := PruneStalePids(tmpDir, profile) if err != nil { t.Fatalf("prune failed: %v", err) } @@ -63,48 +58,33 @@ func TestLifecycleReferenceCounting(t *testing.T) { t.Errorf("Stale PID file %s should have been pruned", fakePidFile) } - // Current process should still be there currentPidFile := filepath.Join(pidsDir, strconv.Itoa(os.Getpid())) if _, err := os.Stat(currentPidFile); os.IsNotExist(err) { t.Errorf("Current PID file %s should not have been pruned", currentPidFile) } - UnregisterProcess(profile) + UnregisterProcess(tmpDir, profile) }) t.Run("IsLastProcess", func(t *testing.T) { - pidsDir := GetPidsDirPath(profile) + pidsDir := GetPidsDirPath(tmpDir, profile) os.RemoveAll(pidsDir) // Reset - // Case 1: No processes (should return true as it's a clean state) - isLast, err := IsLastProcess(profile) + isLast, err := IsLastProcess(tmpDir, profile) if err != nil || !isLast { t.Errorf("Expected IsLastProcess to be true for empty profile, got %v, err: %v", isLast, err) } - // Case 2: Only ourselves - RegisterProcess(profile) - isLast, err = IsLastProcess(profile) + RegisterProcess(tmpDir, profile) + isLast, err = IsLastProcess(tmpDir, profile) if err != nil || !isLast { t.Errorf("Expected IsLastProcess to be true for single process, got %v, err: %v", isLast, err) } - // Case 3: Ourselves + another active process - // To test this, we'll actually start a dummy process. - cmd := exec.Command("sleep", "1") - if err := cmd.Start(); err != nil { - t.Fatalf("failed to start sleep process: %v", err) - } - defer cmd.Process.Kill() - - // Manually add the sleep process PID to the tracking - os.WriteFile(filepath.Join(pidsDir, strconv.Itoa(cmd.Process.Pid)), []byte(""), 0644) - - isLast, err = IsLastProcess(profile) - if err != nil || isLast { - t.Errorf("Expected IsLastProcess to be false with two active processes, got %v, err: %v", isLast, err) + os.WriteFile(filepath.Join(pidsDir, "1234567"), []byte(""), 0644) + isLast, err = IsLastProcess(tmpDir, profile) + if err != nil || !isLast { + t.Errorf("Expected IsLastProcess to be true because 1234567 is dead, got %v, err: %v", isLast, err) } - - UnregisterProcess(profile) }) } |
