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
35// Benchmark CPU usage during polling
36func BenchmarkShellPolling(b *testing.B) {
37	tmpDir, err := os.MkdirTemp("", "shell-bench")
38	require.NoError(b, err)
39	defer os.RemoveAll(tmpDir)
40
41	shell := GetPersistentShell(tmpDir)
42	defer shell.Close()
43
44	b.ResetTimer()
45	b.ReportAllocs()
46
47	for i := 0; i < b.N; i++ {
48		// Use a short sleep to measure polling overhead
49		_, _, exitCode, _, err := shell.Exec(context.Background(), "sleep 0.02", 500)
50		if err != nil || exitCode != 0 {
51			b.Fatalf("Command failed: %v, exit code: %d", err, exitCode)
52		}
53	}
54}