sshkeeper/internal/tunnel/manager_test.go

46 lines
1.0 KiB
Go

package tunnel
import (
"os/exec"
"testing"
"time"
"github.com/mirivlad/sshkeeper/internal/model"
)
func TestInitClearsPreviousInMemoryStates(t *testing.T) {
if err := Init(t.TempDir()); err != nil {
t.Fatalf("init first dir: %v", err)
}
states[123] = &model.TunnelState{ID: 123, ServerAlias: "old", PID: 1}
if err := Init(t.TempDir()); err != nil {
t.Fatalf("init second dir: %v", err)
}
if got := Get(123); got != nil {
t.Fatalf("expected init to clear stale state, got %#v", got)
}
}
func TestIsRunningDetectsLiveProcess(t *testing.T) {
if err := Init(t.TempDir()); err != nil {
t.Fatalf("init: %v", err)
}
cmd := exec.Command("sleep", "2")
if err := cmd.Start(); err != nil {
t.Fatalf("start sleep: %v", err)
}
t.Cleanup(func() {
_ = cmd.Process.Kill()
_, _ = cmd.Process.Wait()
})
states[1] = &model.TunnelState{ID: 1, ServerAlias: "live", PID: cmd.Process.Pid, StartedAt: time.Now()}
if !IsRunning(1) {
t.Fatalf("expected pid %d to be detected as running", cmd.Process.Pid)
}
}