Files
fleet/tools/redis-stress/stress_test.go
T
Carlo b67ab72349 Improvements for Redis stress testing tool (#44411)
Refresh `tools/redis-stress` with cluster-aware modes.
2026-04-29 15:52:59 -04:00

83 lines
2.7 KiB
Go

package main
import (
"testing"
"time"
"github.com/stretchr/testify/require"
)
func TestValidateWriteFlags(t *testing.T) {
t.Parallel()
const validRate = 1.0
validDur := 10 * time.Minute
validTTL := 10 * time.Minute
cases := []struct {
name string
workers int
rate float64
duration time.Duration
keyTTL time.Duration
wantErr string // substring; "" means expect success
}{
{"happy path", 1, validRate, validDur, validTTL, ""},
{"workers=0", 0, validRate, validDur, validTTL, "workers must be >= 1"},
{"workers=-1", -1, validRate, validDur, validTTL, "workers must be >= 1"},
{"rate=0", 1, 0, validDur, validTTL, "rate must be > 0"},
{"rate=-1", 1, -1, validDur, validTTL, "rate must be > 0"},
{"rate=1e10 (period truncates to 0)", 1, 1e10, validDur, validTTL, "non-positive ticker period"},
{"duration=0", 1, validRate, 0, validTTL, "duration must be > 0"},
{"duration=-1s", 1, validRate, -1 * time.Second, validTTL, "duration must be > 0"},
{"keyTTL=0", 1, validRate, validDur, 0, "key-ttl must be >= 1ms"},
{"keyTTL=-1ms", 1, validRate, validDur, -time.Millisecond, "key-ttl must be >= 1ms"},
{"keyTTL=500us (sub-ms)", 1, validRate, validDur, 500 * time.Microsecond, "key-ttl must be >= 1ms"},
{"keyTTL=1ms (boundary)", 1, validRate, validDur, time.Millisecond, ""},
}
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
period, err := validateWriteFlags(c.workers, c.rate, c.duration, c.keyTTL)
if c.wantErr == "" {
require.NoError(t, err)
require.Greater(t, period, time.Duration(0))
} else {
require.ErrorContains(t, err, c.wantErr)
}
})
}
}
func TestValidateRaceFlags(t *testing.T) {
t.Parallel()
validIters := 100
validTTL := 4 * time.Minute
cases := []struct {
name string
workers int
iterations int
ttl time.Duration
wantErr string
}{
{"happy path", 1, validIters, validTTL, ""},
{"workers=0", 0, validIters, validTTL, "workers must be >= 1"},
{"workers=-1", -1, validIters, validTTL, "workers must be >= 1"},
{"iterations=0", 1, 0, validTTL, "iterations must be >= 1"},
{"iterations=-1", 1, -1, validTTL, "iterations must be >= 1"},
{"ttl=0", 1, validIters, 0, "ttl must be >= 1ms"},
{"ttl=-1ms", 1, validIters, -time.Millisecond, "ttl must be >= 1ms"},
{"ttl=500us (sub-ms)", 1, validIters, 500 * time.Microsecond, "ttl must be >= 1ms"},
{"ttl=1ms (boundary)", 1, validIters, time.Millisecond, ""},
}
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
err := validateRaceFlags(c.workers, c.iterations, c.ttl)
if c.wantErr == "" {
require.NoError(t, err)
} else {
require.ErrorContains(t, err, c.wantErr)
}
})
}
}