15
)
16
17
>
func AllocListenAddress() string {
server.go
18
>
return fmt.Sprintf("localhost:%d", freeport.MustGetFreePort())
19
>
}
20
21
>
func NewNexusServer(t *testing.T, listenAddr string, handler nexus.Handler) {
server.go
22
>
// Create listener
23
>
listener, err := net.Listen("tcp", listenAddr)
24
>
require.NoError(t, err, "Nexus test server failed to listen on %s", listenAddr)
25
>
26
>
// Create HTTP handler and server
27
>
hh := nexusrpc.NewHTTPHandler(nexusrpc.HandlerOptions{
28
>
Handler: handler,
29
>
})
30
>
srv := &http.Server{Addr: listenAddr, Handler: hh}
31
>
32
>
// Start server
33
>
errCh := make(chan error, 1)
34
>
go func() {
35
>
errCh <- srv.Serve(listener)
36
>
}()
37
39
>
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
40
>
defer cancel()
41
>
42
>
// Shutdown server gracefully
43
>
err = srv.Shutdown(ctx)
44
>
if err != nil {
45
// Graceful shutdown failed, force close
46
require.ErrorIs(t, err, context.DeadlineExceeded, "Nexus test server graceful shutdown failed")