86 lines
2.5 KiB
Go
86 lines
2.5 KiB
Go
package loadsim
|
|
|
|
import (
|
|
"flag"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestConfigFromFlagsParsesCapacityKnobs(t *testing.T) {
|
|
fs := flag.NewFlagSet("load-sim", flag.ContinueOnError)
|
|
cfg := RegisterFlags(fs)
|
|
|
|
err := fs.Parse([]string{
|
|
"-protocol", "jt808",
|
|
"-addr", "115.29.187.205:808",
|
|
"-connections", "10000",
|
|
"-connect-rate", "800",
|
|
"-send-interval", "5s",
|
|
"-duration", "30m",
|
|
"-template", "0200",
|
|
"-jt808-phone-base", "138900000000",
|
|
"-send=false",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("parse flags: %v", err)
|
|
}
|
|
|
|
got, err := cfg.Build()
|
|
if err != nil {
|
|
t.Fatalf("build config: %v", err)
|
|
}
|
|
|
|
if got.Protocol != ProtocolJT808 {
|
|
t.Fatalf("Protocol = %q, want %q", got.Protocol, ProtocolJT808)
|
|
}
|
|
if got.Addr != "115.29.187.205:808" {
|
|
t.Fatalf("Addr = %q", got.Addr)
|
|
}
|
|
if got.Connections != 10000 {
|
|
t.Fatalf("Connections = %d", got.Connections)
|
|
}
|
|
if got.ConnectRatePerSecond != 800 {
|
|
t.Fatalf("ConnectRatePerSecond = %d", got.ConnectRatePerSecond)
|
|
}
|
|
if got.SendInterval != 5*time.Second {
|
|
t.Fatalf("SendInterval = %s", got.SendInterval)
|
|
}
|
|
if got.Duration != 30*time.Minute {
|
|
t.Fatalf("Duration = %s", got.Duration)
|
|
}
|
|
if got.Template != "0200" {
|
|
t.Fatalf("Template = %q", got.Template)
|
|
}
|
|
if got.SendFrames {
|
|
t.Fatal("SendFrames = true, want false")
|
|
}
|
|
if got.JT808PhoneBase != 138900000000 {
|
|
t.Fatalf("JT808PhoneBase = %d, want 138900000000", got.JT808PhoneBase)
|
|
}
|
|
if !got.DrainResponses {
|
|
t.Fatal("DrainResponses = false, want true by default")
|
|
}
|
|
}
|
|
|
|
func TestConfigFromFlagsRejectsUnsafeValues(t *testing.T) {
|
|
for name, args := range map[string][]string{
|
|
"missing addr": {"-protocol", "jt808", "-connections", "1"},
|
|
"bad protocol": {"-protocol", "x", "-addr", "127.0.0.1:808", "-connections", "1"},
|
|
"zero connections": {"-protocol", "jt808", "-addr", "127.0.0.1:808", "-connections", "0"},
|
|
"zero connect rate": {"-protocol", "jt808", "-addr", "127.0.0.1:808", "-connections", "1", "-connect-rate", "0"},
|
|
"zero interval": {"-protocol", "jt808", "-addr", "127.0.0.1:808", "-connections", "1", "-send-interval", "0s"},
|
|
"phone overflow": {"-protocol", "jt808", "-addr", "127.0.0.1:808", "-connections", "2", "-jt808-phone-base", "999999999999"},
|
|
} {
|
|
t.Run(name, func(t *testing.T) {
|
|
fs := flag.NewFlagSet("load-sim", flag.ContinueOnError)
|
|
cfg := RegisterFlags(fs)
|
|
if err := fs.Parse(args); err != nil {
|
|
t.Fatalf("parse flags: %v", err)
|
|
}
|
|
if _, err := cfg.Build(); err == nil {
|
|
t.Fatalf("Build() error = nil, want validation error")
|
|
}
|
|
})
|
|
}
|
|
}
|