perf: expand gateway capacity and prevent receipt replay
This commit is contained in:
@@ -930,6 +930,42 @@ func TestFlushOnlineAccountsFetchesPendingDeliveries(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestFlushPendingCoalescesConcurrentRequestsPerAccount(t *testing.T) {
|
||||
var calls atomic.Int32
|
||||
release := make(chan struct{})
|
||||
api := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.URL.Path != "/api/gateway/events/downstream/pending" {
|
||||
t.Fatalf("unexpected api path: %s", r.URL.Path)
|
||||
}
|
||||
calls.Add(1)
|
||||
<-release
|
||||
_ = json.NewEncoder(w).Encode([]pendingDelivery{})
|
||||
}))
|
||||
defer api.Close()
|
||||
|
||||
server := Server{APIBaseURL: api.URL + "/api", GatewayInstanceID: "gateway-a"}
|
||||
results := make(chan error, 8)
|
||||
for range 8 {
|
||||
go func() {
|
||||
_, err := server.flushPending("100001", log.Default())
|
||||
results <- err
|
||||
}()
|
||||
}
|
||||
deadline := time.Now().Add(time.Second)
|
||||
for calls.Load() == 0 && time.Now().Before(deadline) {
|
||||
time.Sleep(time.Millisecond)
|
||||
}
|
||||
close(release)
|
||||
for range 8 {
|
||||
if err := <-results; err != nil {
|
||||
t.Fatalf("flush failed: %v", err)
|
||||
}
|
||||
}
|
||||
if got := calls.Load(); got != 1 {
|
||||
t.Fatalf("pending fetch calls = %d, want 1", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRecoverPendingCandidatesFetchesPresenceAccounts(t *testing.T) {
|
||||
resetDownstreamRegistry()
|
||||
defer resetDownstreamRegistry()
|
||||
@@ -1085,7 +1121,7 @@ func TestDownstreamDeliveryRequiresAcknowledgement(t *testing.T) {
|
||||
messageID: "MSG-LONG-1", phoneNumber: "18821203795",
|
||||
protocolLog: func(event protocolLogEvent) { protocolEvents <- event },
|
||||
}
|
||||
registerDownstreamAck(session, "delivery-1", 37, 9016479179509871733, time.Now().Add(time.Second))
|
||||
registerDownstreamAck(session, "delivery-1", "", 37, 9016479179509871733, time.Now().Add(time.Second))
|
||||
handleDownstreamAcknowledgement(conn, 37, 9016479179509871733, 0, log.Default())
|
||||
|
||||
select {
|
||||
@@ -1165,6 +1201,7 @@ func TestSendDownstreamRejectsZeroMessageID(t *testing.T) {
|
||||
&downstreamSession{mu: &sync.Mutex{}},
|
||||
&cmpp.Cmpp2DeliverReqPkt{MsgId: 0},
|
||||
"delivery-zero",
|
||||
"",
|
||||
)
|
||||
if err == nil || !strings.Contains(err.Error(), "Msg_Id=0") {
|
||||
t.Fatalf("expected zero Msg_Id rejection, got %v", err)
|
||||
@@ -1180,7 +1217,7 @@ func TestDownstreamDeliveryReportsAckTimeout(t *testing.T) {
|
||||
conn: &cmpp.Conn{}, connectionID: "conn-1",
|
||||
deliveryReport: func(event downstreamDeliveryLifecycleEvent) { events <- event },
|
||||
}
|
||||
registerDownstreamAck(session, "delivery-timeout", 38, 9017467844344255865, time.Now().Add(20*time.Millisecond))
|
||||
registerDownstreamAck(session, "delivery-timeout", "", 38, 9017467844344255865, time.Now().Add(20*time.Millisecond))
|
||||
|
||||
select {
|
||||
case event := <-events:
|
||||
|
||||
Reference in New Issue
Block a user