- daemon.go: Update gt-2hzl4 comment to past tense (timeout fallback is implemented) - lifecycle.go: Remove "to be removed" promise for gt-psuw7 (code stays) - keepalive_test.go: Remove tombstoned gt-gaxo epic reference - doctor.go: Remove tombstoned gt-gaxo epic reference - daemon_test.go: Remove tombstoned gt-gaxo epic reference 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
package keepalive
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestTouchInWorkspace(t *testing.T) {
|
|
// Create temp directory
|
|
tmpDir := t.TempDir()
|
|
|
|
// Touch the keepalive
|
|
TouchInWorkspace(tmpDir, "gt status")
|
|
|
|
// Read back
|
|
state := Read(tmpDir)
|
|
if state == nil {
|
|
t.Fatal("expected state to be non-nil")
|
|
}
|
|
|
|
if state.LastCommand != "gt status" {
|
|
t.Errorf("expected last_command 'gt status', got %q", state.LastCommand)
|
|
}
|
|
|
|
// Check timestamp is recent
|
|
if time.Since(state.Timestamp) > time.Minute {
|
|
t.Errorf("timestamp too old: %v", state.Timestamp)
|
|
}
|
|
}
|
|
|
|
func TestReadNonExistent(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
state := Read(tmpDir)
|
|
if state != nil {
|
|
t.Error("expected nil state for non-existent file")
|
|
}
|
|
}
|
|
|
|
func TestStateAge(t *testing.T) {
|
|
// Test nil state returns very large age
|
|
var nilState *State
|
|
if nilState.Age() < 24*time.Hour {
|
|
t.Error("nil state should have very large age")
|
|
}
|
|
|
|
// Test fresh state returns accurate age
|
|
freshState := &State{Timestamp: time.Now().Add(-30 * time.Second)}
|
|
age := freshState.Age()
|
|
if age < 29*time.Second || age > 31*time.Second {
|
|
t.Errorf("expected ~30s age, got %v", age)
|
|
}
|
|
|
|
// Test older state returns accurate age
|
|
olderState := &State{Timestamp: time.Now().Add(-5 * time.Minute)}
|
|
age = olderState.Age()
|
|
if age < 4*time.Minute+55*time.Second || age > 5*time.Minute+5*time.Second {
|
|
t.Errorf("expected ~5m age, got %v", age)
|
|
}
|
|
|
|
// NOTE: IsFresh(), IsStale(), IsVeryStale() were removed as part of ZFC cleanup.
|
|
// Staleness classification belongs in Deacon molecule, not Go code.
|
|
}
|
|
|
|
func TestDirectoryCreation(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
workDir := filepath.Join(tmpDir, "some", "nested", "workspace")
|
|
|
|
// Touch should create .runtime directory
|
|
TouchInWorkspace(workDir, "gt test")
|
|
|
|
// Verify directory was created
|
|
runtimeDir := filepath.Join(workDir, ".runtime")
|
|
if _, err := os.Stat(runtimeDir); os.IsNotExist(err) {
|
|
t.Error("expected .runtime directory to be created")
|
|
}
|
|
}
|