Files
bd2/go/internal/server/lifecycle/gate_test.go
T

32 lines
703 B
Go

package lifecycle
import (
"context"
"testing"
"time"
)
func TestDrainRejectsNewRequestsAndWaitsForAdmittedRequest(t *testing.T) {
gate := NewGate()
done, ok := gate.BeginRequest()
if !ok || !gate.Ready() {
t.Fatal("ready gate rejected request")
}
gate.Drain()
if gate.Ready() {
t.Fatal("draining gate remained ready")
}
if _, ok := gate.BeginRequest(); ok {
t.Fatal("draining gate admitted new request")
}
ctx, cancel := context.WithTimeout(context.Background(), 20*time.Millisecond)
defer cancel()
if err := gate.Wait(ctx); err == nil {
t.Fatal("drain completed before admitted request")
}
done()
if err := gate.Wait(context.Background()); err != nil {
t.Fatal(err)
}
}