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) } }