comparison_test.go

 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}