mirror of
https://github.com/YspCoder/clawgo.git
synced 2026-04-13 18:07:36 +08:00
feat: harden concurrency scheduling and task watchdog
This commit is contained in:
48
pkg/tools/shell_timeout_test.go
Normal file
48
pkg/tools/shell_timeout_test.go
Normal file
@@ -0,0 +1,48 @@
|
||||
package tools
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestIsHeavyCommand(t *testing.T) {
|
||||
tests := []struct {
|
||||
command string
|
||||
heavy bool
|
||||
}{
|
||||
{command: "docker build -t app .", heavy: true},
|
||||
{command: "docker compose build api", heavy: true},
|
||||
{command: "go test ./...", heavy: true},
|
||||
{command: "npm run build", heavy: true},
|
||||
{command: "echo hello", heavy: false},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
if got := isHeavyCommand(tt.command); got != tt.heavy {
|
||||
t.Fatalf("isHeavyCommand(%q)=%v want %v", tt.command, got, tt.heavy)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCommandTickBase(t *testing.T) {
|
||||
light := (&ExecTool{}).commandTickBase("echo hello")
|
||||
heavy := (&ExecTool{}).commandTickBase("docker build -t app .")
|
||||
if heavy <= light {
|
||||
t.Fatalf("expected heavy command base tick > light, got heavy=%v light=%v", heavy, light)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNextCommandTick(t *testing.T) {
|
||||
base := 2 * time.Second
|
||||
t1 := nextCommandTick(base, 30*time.Second)
|
||||
t2 := nextCommandTick(base, 5*time.Minute)
|
||||
if t1 < base {
|
||||
t.Fatalf("tick should not shrink below base: %v", t1)
|
||||
}
|
||||
if t2 <= t1 {
|
||||
t.Fatalf("tick should grow with elapsed time: t1=%v t2=%v", t1, t2)
|
||||
}
|
||||
if t2 > 45*time.Second {
|
||||
t.Fatalf("tick should be capped, got %v", t2)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user