chore(cli): avoid use of testutil.RandomPort() in prometheus test (#17297)

Should hopefully fix https://github.com/coder/internal/issues/282

Instead of picking a random port for the prometheus server, listen on
`:0` and read the port from the CLI stdout.
This commit is contained in:
Cian Johnston
2025-04-09 09:20:47 +01:00
committed by GitHub
parent 0e658219b2
commit 8d122aa4ab
2 changed files with 35 additions and 15 deletions
+10 -5
View File
@@ -4,6 +4,7 @@ import (
"context"
"fmt"
"io"
"net"
"net/http"
"net/http/pprof"
"net/url"
@@ -491,8 +492,6 @@ func (r *RootCmd) workspaceAgent() *serpent.Command {
}
func ServeHandler(ctx context.Context, logger slog.Logger, handler http.Handler, addr, name string) (closeFunc func()) {
logger.Debug(ctx, "http server listening", slog.F("addr", addr), slog.F("name", name))
// ReadHeaderTimeout is purposefully not enabled. It caused some issues with
// websockets over the dev tunnel.
// See: https://github.com/coder/coder/pull/3730
@@ -502,9 +501,15 @@ func ServeHandler(ctx context.Context, logger slog.Logger, handler http.Handler,
Handler: handler,
}
go func() {
err := srv.ListenAndServe()
if err != nil && !xerrors.Is(err, http.ErrServerClosed) {
logger.Error(ctx, "http server listen", slog.F("name", name), slog.Error(err))
ln, err := net.Listen("tcp", addr)
if err != nil {
logger.Error(ctx, "http server listen", slog.F("name", name), slog.F("addr", addr), slog.Error(err))
return
}
defer ln.Close()
logger.Info(ctx, "http server listening", slog.F("addr", ln.Addr()), slog.F("name", name))
if err := srv.Serve(ln); err != nil && !xerrors.Is(err, http.ErrServerClosed) {
logger.Error(ctx, "http server serve", slog.F("addr", ln.Addr()), slog.F("name", name), slog.Error(err))
}
}()