fix: absorb multiplex close bursts
This commit is contained in:
@@ -112,3 +112,54 @@ func TestClusterWriteLoopRejectsWritesAfterTermination(t *testing.T) {
|
||||
t.Fatalf("terminated multiplexing session retained %d outbound messages", len(sess.send))
|
||||
}
|
||||
}
|
||||
|
||||
func TestMultiplexEnqueueWaitsForDrain(t *testing.T) {
|
||||
sess := &Session{proto: MULTIPLEX, send: make(chan any, 1)}
|
||||
sess.send <- "existing"
|
||||
|
||||
go func() {
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
<-sess.send
|
||||
}()
|
||||
|
||||
payload := &ServerComMessage{TenantID: types.TenantID(1)}
|
||||
if !sess.enqueueMultiplexOutbound(payload, 200*time.Millisecond) {
|
||||
t.Fatal("multiplex enqueue failed while the drain was making progress")
|
||||
}
|
||||
if got := <-sess.send; got != payload {
|
||||
t.Fatalf("unexpected queued payload: %#v", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMultiplexEnqueueTimesOutWithoutDrain(t *testing.T) {
|
||||
sess := &Session{proto: MULTIPLEX, send: make(chan any, 1)}
|
||||
sess.send <- "existing"
|
||||
|
||||
started := time.Now()
|
||||
if sess.enqueueMultiplexOutbound("next", 20*time.Millisecond) {
|
||||
t.Fatal("multiplex enqueue succeeded without queue capacity")
|
||||
}
|
||||
if elapsed := time.Since(started); elapsed < 15*time.Millisecond || elapsed > 200*time.Millisecond {
|
||||
t.Fatalf("multiplex enqueue timeout outside expected bounds: %s", elapsed)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMultiplexEnqueueStopsWhenSessionTerminates(t *testing.T) {
|
||||
sess := &Session{proto: MULTIPLEX, send: make(chan any, 1)}
|
||||
sess.send <- "existing"
|
||||
|
||||
go func() {
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
sess.clusterQueueMu.Lock()
|
||||
atomic.StoreInt32(&sess.terminating, 1)
|
||||
<-sess.send
|
||||
sess.clusterQueueMu.Unlock()
|
||||
}()
|
||||
|
||||
if !sess.enqueueMultiplexOutbound("next", 200*time.Millisecond) {
|
||||
t.Fatal("terminating multiplex session should discard the pending write")
|
||||
}
|
||||
if len(sess.send) != 0 {
|
||||
t.Fatalf("terminating multiplex session retained %d outbound messages", len(sess.send))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user