diff --git a/enterprise/cli/server_test.go b/enterprise/cli/server_test.go new file mode 100644 index 0000000000..b70d6eab3c --- /dev/null +++ b/enterprise/cli/server_test.go @@ -0,0 +1,52 @@ +package cli_test + +import ( + "fmt" + "io" + "net/http" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/coder/coder/v2/cli/clitest" + "github.com/coder/coder/v2/enterprise/cli" + "github.com/coder/coder/v2/testutil" +) + +// TestServer runs the enterprise server command +// and waits for /healthz to return "OK". +func TestServer(t *testing.T) { + t.Parallel() + + var root cli.RootCmd + cmd, err := root.Command(root.EnterpriseSubcommands()) + require.NoError(t, err) + port := randomPort(t) + inv, _ := clitest.NewWithCommand(t, cmd, + "server", + "--in-memory", + "--http-address", fmt.Sprintf(":%d", port), + "--access-url", "http://example.com", + ) + waiter := clitest.StartWithWaiter(t, inv) + require.Eventually(t, func() bool { + reqCtx := testutil.Context(t, testutil.IntervalMedium) + req, err := http.NewRequestWithContext(reqCtx, http.MethodGet, fmt.Sprintf("http://localhost:%d/healthz", port), nil) + if err != nil { + panic(err) + } + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Log("/healthz not ready yet") + return false + } + defer resp.Body.Close() + bs, err := io.ReadAll(resp.Body) + if err != nil { + panic(err) + } + return assert.Equal(t, "OK", string(bs)) + }, testutil.WaitShort, testutil.IntervalMedium) + waiter.Cancel() +}