mirror of https://github.com/coder/coder.git
73 lines
1.8 KiB
Go
73 lines
1.8 KiB
Go
package cli_test
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"net/http"
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/coder/coder/v2/cli/clitest"
|
|
"github.com/coder/coder/v2/cli/config"
|
|
"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_Single(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
ctx, cancelFunc := context.WithTimeout(context.Background(), testutil.WaitLong)
|
|
defer cancelFunc()
|
|
|
|
var root cli.RootCmd
|
|
cmd, err := root.Command(root.EnterpriseSubcommands())
|
|
require.NoError(t, err)
|
|
inv, cfg := clitest.NewWithCommand(t, cmd,
|
|
"server",
|
|
"--in-memory",
|
|
"--http-address", ":0",
|
|
"--access-url", "http://example.com",
|
|
)
|
|
clitest.Start(t, inv.WithContext(ctx))
|
|
accessURL := waitAccessURL(t, cfg)
|
|
require.Eventually(t, func() bool {
|
|
reqCtx := testutil.Context(t, testutil.IntervalMedium)
|
|
req, err := http.NewRequestWithContext(reqCtx, http.MethodGet, accessURL.String()+"/healthz", 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)
|
|
}
|
|
|
|
func waitAccessURL(t *testing.T, cfg config.Root) *url.URL {
|
|
t.Helper()
|
|
|
|
var err error
|
|
var rawURL string
|
|
require.Eventually(t, func() bool {
|
|
rawURL, err = cfg.URL().Read()
|
|
return err == nil && rawURL != ""
|
|
}, testutil.WaitLong, testutil.IntervalFast, "failed to get access URL")
|
|
|
|
accessURL, err := url.Parse(rawURL)
|
|
require.NoError(t, err, "failed to parse access URL")
|
|
|
|
return accessURL
|
|
}
|