1package shell
2
3import (
4 "context"
5 "os"
6 "testing"
7 "time"
8
9 "github.com/stretchr/testify/assert"
10 "github.com/stretchr/testify/require"
11)
12
13func TestShellPerformanceComparison(t *testing.T) {
14 tmpDir, err := os.MkdirTemp("", "shell-test")
15 require.NoError(t, err)
16 defer os.RemoveAll(tmpDir)
17
18 shell := GetPersistentShell(tmpDir)
19 defer shell.Close()
20
21 // Test quick command
22 start := time.Now()
23 stdout, stderr, exitCode, _, err := shell.Exec(context.Background(), "echo 'hello'", 0)
24 duration := time.Since(start)
25
26 require.NoError(t, err)
27 assert.Equal(t, 0, exitCode)
28 assert.Contains(t, stdout, "hello")
29 assert.Empty(t, stderr)
30
31 t.Logf("Quick command took: %v", duration)
32}
33
34// Benchmark CPU usage during polling
35func BenchmarkShellPolling(b *testing.B) {
36 tmpDir, err := os.MkdirTemp("", "shell-bench")
37 require.NoError(b, err)
38 defer os.RemoveAll(tmpDir)
39
40 shell := GetPersistentShell(tmpDir)
41 defer shell.Close()
42
43 b.ResetTimer()
44 b.ReportAllocs()
45
46 for i := 0; i < b.N; i++ {
47 // Use a short sleep to measure polling overhead
48 _, _, exitCode, _, err := shell.Exec(context.Background(), "sleep 0.02", 500)
49 if err != nil || exitCode != 0 {
50 b.Fatalf("Command failed: %v, exit code: %d", err, exitCode)
51 }
52 }
53}