91 lines
1.8 KiB
Go
91 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"os/exec"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestNewPool(t *testing.T) {
|
|
p := NewPool()
|
|
if p == nil {
|
|
t.Fatal("NewPool returned nil")
|
|
}
|
|
}
|
|
|
|
func TestPool_Get_NoSession(t *testing.T) {
|
|
p := NewPool()
|
|
s := p.Get("nonexistent")
|
|
if s != nil {
|
|
t.Fatal("Get on empty pool should return nil")
|
|
}
|
|
}
|
|
|
|
func TestPool_IsAlive_NoSession(t *testing.T) {
|
|
p := NewPool()
|
|
if p.IsAlive("nonexistent") {
|
|
t.Fatal("IsAlive on empty pool should return false")
|
|
}
|
|
}
|
|
|
|
func TestPool_CloseAll_Empty(t *testing.T) {
|
|
p := NewPool()
|
|
p.CloseAll() // must not panic
|
|
}
|
|
|
|
func TestPool_Attach_Real(t *testing.T) {
|
|
if testing.Short() {
|
|
t.Skip("skipping integration test in short mode")
|
|
}
|
|
|
|
name := "test-muxterm"
|
|
|
|
// Ensure the tmux session exists.
|
|
exec.Command("tmux", "kill-session", "-t", name).Run()
|
|
cmd := exec.Command("tmux", "new-session", "-d", "-s", name, "-x", "80", "-y", "24")
|
|
if err := cmd.Run(); err != nil {
|
|
t.Fatalf("failed to create tmux session %q: %v", name, err)
|
|
}
|
|
defer exec.Command("tmux", "kill-session", "-t", name).Run()
|
|
|
|
p := NewPool()
|
|
defer p.CloseAll()
|
|
|
|
// Attach
|
|
sess, err := p.Attach(name, 80, 24)
|
|
if err != nil {
|
|
t.Fatalf("Attach failed: %v", err)
|
|
}
|
|
if sess == nil {
|
|
t.Fatal("Attach returned nil session")
|
|
}
|
|
if sess.PTY == nil {
|
|
t.Fatal("Session PTY is nil")
|
|
}
|
|
|
|
// IsAlive
|
|
if !p.IsAlive(name) {
|
|
t.Fatal("IsAlive should return true after Attach")
|
|
}
|
|
|
|
// Resize
|
|
err = p.Resize(name, 120, 40)
|
|
if err != nil {
|
|
t.Fatalf("Resize failed: %v", err)
|
|
}
|
|
resized := p.Get(name)
|
|
if resized.Cols != 120 {
|
|
t.Errorf("After resize Cols = %d, want 120", resized.Cols)
|
|
}
|
|
if resized.Rows != 40 {
|
|
t.Errorf("After resize Rows = %d, want 40", resized.Rows)
|
|
}
|
|
|
|
// Cleanup
|
|
p.CloseAll()
|
|
time.Sleep(100 * time.Millisecond)
|
|
if p.IsAlive(name) {
|
|
t.Fatal("IsAlive should return false after CloseAll")
|
|
}
|
|
}
|