feat: refactor deployment config (#6347)

This commit is contained in:
Ammar Bandukwala
2023-03-07 15:10:01 -06:00
committed by GitHub
parent bb0a996fc2
commit 3b73321a6c
102 changed files with 5643 additions and 6682 deletions
+54 -4
View File
@@ -3,6 +3,7 @@ package clitest
import (
"archive/tar"
"bytes"
"context"
"errors"
"io"
"io/ioutil"
@@ -10,14 +11,17 @@ import (
"path/filepath"
"strings"
"testing"
"time"
"github.com/spf13/cobra"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/coder/coder/cli"
"github.com/coder/coder/cli/config"
"github.com/coder/coder/codersdk"
"github.com/coder/coder/provisioner/echo"
"github.com/coder/coder/testutil"
)
// New creates a CLI instance with a configuration pointed to a
@@ -26,6 +30,22 @@ func New(t *testing.T, args ...string) (*cobra.Command, config.Root) {
return NewWithSubcommands(t, cli.AGPL(), args...)
}
type logWriter struct {
prefix string
t *testing.T
}
func (l *logWriter) Write(p []byte) (n int, err error) {
trimmed := strings.TrimSpace(string(p))
if trimmed == "" {
return len(p), nil
}
l.t.Log(
l.prefix + ": " + trimmed,
)
return len(p), nil
}
func NewWithSubcommands(
t *testing.T, subcommands []*cobra.Command, args ...string,
) (*cobra.Command, config.Root) {
@@ -34,10 +54,9 @@ func NewWithSubcommands(
root := config.Root(dir)
cmd.SetArgs(append([]string{"--global-config", dir}, args...))
// We could consider using writers
// that log via t.Log here instead.
cmd.SetOut(io.Discard)
cmd.SetErr(io.Discard)
// These can be overridden by the test.
cmd.SetOut(&logWriter{prefix: "stdout", t: t})
cmd.SetErr(&logWriter{prefix: "stderr", t: t})
return cmd, root
}
@@ -98,3 +117,34 @@ func extractTar(t *testing.T, data []byte, directory string) {
}
}
}
// Start runs the command in a goroutine and cleans it up when
// the test completed.
func Start(ctx context.Context, t *testing.T, cmd *cobra.Command) {
t.Helper()
closeCh := make(chan struct{})
deadline, hasDeadline := ctx.Deadline()
if !hasDeadline {
// We don't want to wait the full 5 minutes for a test to time out.
deadline = time.Now().Add(testutil.WaitMedium)
}
ctx, cancel := context.WithDeadline(ctx, deadline)
go func() {
defer cancel()
defer close(closeCh)
err := cmd.ExecuteContext(ctx)
if ctx.Err() == nil {
assert.NoError(t, err)
}
}()
// Don't exit test routine until server is done.
t.Cleanup(func() {
cancel()
<-closeCh
})
}