46 lines
1.0 KiB
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)
|
|
}
|
|
}
|