diff --git a/server_test.go b/server_test.go index cf34986..4a1561d 100644 --- a/server_test.go +++ b/server_test.go @@ -298,6 +298,36 @@ func TestServerClose(t *testing.T) { checkServerShutdown(t, server) } +func TestImmediateServerShutdown(t *testing.T) { + var ( + ctx = context.Background() + server = mustServer(t)(NewServer()) + addr, listener = newTestListener(t) + errs = make(chan error, 1) + _, cleanup = newTestClient(t, addr) + ) + defer cleanup() + defer listener.Close() + go func() { + time.Sleep(1 * time.Millisecond) + errs <- server.Serve(ctx, listener) + }() + + registerTestingService(server, &testingServer{}) + + if err := server.Shutdown(ctx); err != nil { + t.Fatal(err) + } + select { + case err := <-errs: + if err != ErrServerClosed { + t.Fatal(err) + } + case <-time.After(2 * time.Second): + t.Fatal("retreiving error from server.Shutdown() timed out") + } +} + func TestOversizeCall(t *testing.T) { var ( ctx = context.Background()