Files
lislgosms/gateway/internal/spike/simulator_test.go
T

49 lines
1.2 KiB
Go

package spike
import (
"context"
"testing"
"time"
)
func TestSimulatorRunsOneMessageLifecycle(t *testing.T) {
sim := NewSimulator()
cmd := NewSubmitCommand(1)
result, receipt, err := sim.Submit(context.Background(), cmd)
if err != nil {
t.Fatalf("submit: %v", err)
}
if result.MessageID != cmd.MessageID {
t.Fatalf("submit result message id mismatch: %s != %s", result.MessageID, cmd.MessageID)
}
if result.SequenceID == 0 {
t.Fatal("expected sequence id")
}
if receipt.GatewayMessageID != result.GatewayMessageID {
t.Fatalf("receipt gateway id mismatch: %s != %s", receipt.GatewayMessageID, result.GatewayMessageID)
}
if receipt.ReceiptStatus != "delivered" {
t.Fatalf("unexpected receipt status: %s", receipt.ReceiptStatus)
}
}
func TestSimulatorLoadMeets500TPSFloor(t *testing.T) {
sim := NewSimulator()
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
result, err := sim.RunLoad(ctx, 15000)
if err != nil {
t.Fatalf("run load: %v", err)
}
if result.SubmitResults != 15000 || result.ReceiptEvents != 15000 {
t.Fatalf("unexpected result counts: %+v", result)
}
if result.MessagesPerSec < 500 {
t.Fatalf("expected at least 500 msg/s, got %.2f", result.MessagesPerSec)
}
}