mirror of
https://github.com/coder/coder.git
synced 2026-06-02 20:48:20 +00:00
test: rename ExpectMatchContext to ExpectMatch
This commit is contained in:
+1
-1
@@ -673,7 +673,7 @@ func TestAgent_SessionTTYShell(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
_ = ptty.Peek(ctx, 1) // wait for the prompt
|
||||
ptty.WriteLine("echo test")
|
||||
ptty.ExpectMatch("test")
|
||||
ptty.ExpectMatch(ctx, "test")
|
||||
ptty.WriteLine("exit")
|
||||
err = session.Wait()
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -203,7 +203,7 @@ func TestNewServer_CloseActiveConnections(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Allow the session to settle (i.e. reach echo).
|
||||
pty.ExpectMatchContext(ctx, "started")
|
||||
pty.ExpectMatch(ctx, "started")
|
||||
// Sleep a bit to ensure the sleep has started.
|
||||
time.Sleep(testutil.IntervalMedium)
|
||||
|
||||
|
||||
@@ -24,5 +24,5 @@ func TestCli(t *testing.T) {
|
||||
clitest.SetupConfig(t, client, config)
|
||||
stdout := expecter.NewAttachedToInvocation(t, i)
|
||||
clitest.Start(t, i)
|
||||
stdout.ExpectMatchContext(ctx, "coder")
|
||||
stdout.ExpectMatch(ctx, "coder")
|
||||
}
|
||||
|
||||
@@ -49,8 +49,8 @@ func TestExternalAuth(t *testing.T) {
|
||||
err := inv.Run()
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
stdout.ExpectMatchContext(ctx, "You must authenticate with")
|
||||
stdout.ExpectMatchContext(ctx, "https://example.com/gitauth/github")
|
||||
stdout.ExpectMatchContext(ctx, "Successfully authenticated with GitHub")
|
||||
stdout.ExpectMatch(ctx, "You must authenticate with")
|
||||
stdout.ExpectMatch(ctx, "https://example.com/gitauth/github")
|
||||
stdout.ExpectMatch(ctx, "Successfully authenticated with GitHub")
|
||||
<-done
|
||||
}
|
||||
|
||||
+11
-10
@@ -33,7 +33,7 @@ func TestPrompt(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
msgChan <- resp
|
||||
}()
|
||||
ptty.ExpectMatch("Example")
|
||||
ptty.ExpectMatch(ctx, "Example")
|
||||
ptty.WriteLine("hello")
|
||||
resp := testutil.TryReceive(ctx, t, msgChan)
|
||||
require.Equal(t, "hello", resp)
|
||||
@@ -52,7 +52,7 @@ func TestPrompt(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
doneChan <- resp
|
||||
}()
|
||||
ptty.ExpectMatch("Example")
|
||||
ptty.ExpectMatch(ctx, "Example")
|
||||
ptty.WriteLine("yes")
|
||||
resp := testutil.TryReceive(ctx, t, doneChan)
|
||||
require.Equal(t, "yes", resp)
|
||||
@@ -113,7 +113,7 @@ func TestPrompt(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
doneChan <- resp
|
||||
}()
|
||||
ptty.ExpectMatch("Example")
|
||||
ptty.ExpectMatch(ctx, "Example")
|
||||
ptty.WriteLine("{}")
|
||||
resp := testutil.TryReceive(ctx, t, doneChan)
|
||||
require.Equal(t, "{}", resp)
|
||||
@@ -131,7 +131,7 @@ func TestPrompt(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
doneChan <- resp
|
||||
}()
|
||||
ptty.ExpectMatch("Example")
|
||||
ptty.ExpectMatch(ctx, "Example")
|
||||
ptty.WriteLine("{a")
|
||||
resp := testutil.TryReceive(ctx, t, doneChan)
|
||||
require.Equal(t, "{a", resp)
|
||||
@@ -149,7 +149,7 @@ func TestPrompt(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
doneChan <- resp
|
||||
}()
|
||||
ptty.ExpectMatch("Example")
|
||||
ptty.ExpectMatch(ctx, "Example")
|
||||
ptty.WriteLine(`{
|
||||
"test": "wow"
|
||||
}`)
|
||||
@@ -176,7 +176,7 @@ func TestPrompt(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
doneChan <- resp
|
||||
}()
|
||||
ptty.ExpectMatch("Example")
|
||||
ptty.ExpectMatch(ctx, "Example")
|
||||
ptty.WriteLine("foo\nbar\nbaz\n\n\nvalid\n")
|
||||
resp := testutil.TryReceive(ctx, t, doneChan)
|
||||
require.Equal(t, "valid", resp)
|
||||
@@ -195,7 +195,7 @@ func TestPrompt(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
doneChan <- resp
|
||||
}()
|
||||
ptty.ExpectMatch("Password: ")
|
||||
ptty.ExpectMatch(ctx, "Password: ")
|
||||
|
||||
ptty.WriteLine("test")
|
||||
|
||||
@@ -216,7 +216,7 @@ func TestPrompt(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
doneChan <- resp
|
||||
}()
|
||||
ptty.ExpectMatch("Password: ")
|
||||
ptty.ExpectMatch(ctx, "Password: ")
|
||||
|
||||
ptty.WriteLine("和製漢字")
|
||||
|
||||
@@ -257,6 +257,7 @@ func TestPasswordTerminalState(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
ptty := ptytest.New(t)
|
||||
ctx := testutil.Context(t, testutil.WaitShort)
|
||||
|
||||
cmd := exec.Command(os.Args[0], "-test.run=TestPasswordTerminalState") //nolint:gosec
|
||||
cmd.Env = append(os.Environ(), "TEST_SUBPROCESS=1")
|
||||
@@ -269,12 +270,12 @@ func TestPasswordTerminalState(t *testing.T) {
|
||||
process := cmd.Process
|
||||
defer process.Kill()
|
||||
|
||||
ptty.ExpectMatch("Password: ")
|
||||
ptty.ExpectMatch(ctx, "Password: ")
|
||||
ptty.Write('t')
|
||||
ptty.Write('e')
|
||||
ptty.Write('s')
|
||||
ptty.Write('t')
|
||||
ptty.ExpectMatch("****")
|
||||
ptty.ExpectMatch(ctx, "****")
|
||||
|
||||
err = process.Signal(os.Interrupt)
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -48,12 +48,12 @@ func TestProvisionerJob(t *testing.T) {
|
||||
test.JobMutex.Unlock()
|
||||
})
|
||||
testutil.Eventually(ctx, t, func(ctx context.Context) (done bool) {
|
||||
test.Stdout.ExpectMatchContext(ctx, cliui.ProvisioningStateQueued)
|
||||
test.Stdout.ExpectMatch(ctx, cliui.ProvisioningStateQueued)
|
||||
test.Next <- struct{}{}
|
||||
test.Stdout.ExpectMatchContext(ctx, cliui.ProvisioningStateQueued)
|
||||
test.Stdout.ExpectMatchContext(ctx, cliui.ProvisioningStateRunning)
|
||||
test.Stdout.ExpectMatch(ctx, cliui.ProvisioningStateQueued)
|
||||
test.Stdout.ExpectMatch(ctx, cliui.ProvisioningStateRunning)
|
||||
test.Next <- struct{}{}
|
||||
test.Stdout.ExpectMatchContext(ctx, cliui.ProvisioningStateRunning)
|
||||
test.Stdout.ExpectMatch(ctx, cliui.ProvisioningStateRunning)
|
||||
return true
|
||||
}, testutil.IntervalFast)
|
||||
})
|
||||
@@ -85,12 +85,12 @@ func TestProvisionerJob(t *testing.T) {
|
||||
test.JobMutex.Unlock()
|
||||
})
|
||||
testutil.Eventually(ctx, t, func(ctx context.Context) (done bool) {
|
||||
test.Stdout.ExpectMatchContext(ctx, cliui.ProvisioningStateQueued)
|
||||
test.Stdout.ExpectMatch(ctx, cliui.ProvisioningStateQueued)
|
||||
test.Next <- struct{}{}
|
||||
test.Stdout.ExpectMatchContext(ctx, cliui.ProvisioningStateQueued)
|
||||
test.Stdout.ExpectMatchContext(ctx, "Something")
|
||||
test.Stdout.ExpectMatch(ctx, cliui.ProvisioningStateQueued)
|
||||
test.Stdout.ExpectMatch(ctx, "Something")
|
||||
test.Next <- struct{}{}
|
||||
test.Stdout.ExpectMatchContext(ctx, "Something")
|
||||
test.Stdout.ExpectMatch(ctx, "Something")
|
||||
return true
|
||||
}, testutil.IntervalFast)
|
||||
})
|
||||
@@ -151,12 +151,12 @@ func TestProvisionerJob(t *testing.T) {
|
||||
test.JobMutex.Unlock()
|
||||
})
|
||||
testutil.Eventually(ctx, t, func(ctx context.Context) (done bool) {
|
||||
test.Stdout.ExpectRegexMatchContext(ctx, tc.expected)
|
||||
test.Stdout.ExpectRegexMatch(ctx, tc.expected)
|
||||
test.Next <- struct{}{}
|
||||
test.Stdout.ExpectMatchContext(ctx, cliui.ProvisioningStateQueued) // step completed
|
||||
test.Stdout.ExpectMatchContext(ctx, cliui.ProvisioningStateRunning)
|
||||
test.Stdout.ExpectMatch(ctx, cliui.ProvisioningStateQueued) // step completed
|
||||
test.Stdout.ExpectMatch(ctx, cliui.ProvisioningStateRunning)
|
||||
test.Next <- struct{}{}
|
||||
test.Stdout.ExpectMatchContext(ctx, cliui.ProvisioningStateRunning)
|
||||
test.Stdout.ExpectMatch(ctx, cliui.ProvisioningStateRunning)
|
||||
return true
|
||||
}, testutil.IntervalFast)
|
||||
})
|
||||
@@ -193,11 +193,11 @@ func TestProvisionerJob(t *testing.T) {
|
||||
test.JobMutex.Unlock()
|
||||
})
|
||||
testutil.Eventually(ctx, t, func(ctx context.Context) (done bool) {
|
||||
test.Stdout.ExpectMatchContext(ctx, cliui.ProvisioningStateQueued)
|
||||
test.Stdout.ExpectMatch(ctx, cliui.ProvisioningStateQueued)
|
||||
test.Next <- struct{}{}
|
||||
test.Stdout.ExpectMatchContext(ctx, "Gracefully canceling")
|
||||
test.Stdout.ExpectMatch(ctx, "Gracefully canceling")
|
||||
test.Next <- struct{}{}
|
||||
test.Stdout.ExpectMatchContext(ctx, cliui.ProvisioningStateQueued)
|
||||
test.Stdout.ExpectMatch(ctx, cliui.ProvisioningStateQueued)
|
||||
return true
|
||||
}, testutil.IntervalFast)
|
||||
})
|
||||
|
||||
+13
-10
@@ -10,12 +10,14 @@ import (
|
||||
"github.com/coder/coder/v2/coderd/database/dbtime"
|
||||
"github.com/coder/coder/v2/codersdk"
|
||||
"github.com/coder/coder/v2/pty/ptytest"
|
||||
"github.com/coder/coder/v2/testutil"
|
||||
)
|
||||
|
||||
func TestWorkspaceResources(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Run("SingleAgentSSH", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := testutil.Context(t, testutil.WaitMedium)
|
||||
ptty := ptytest.New(t)
|
||||
done := make(chan struct{})
|
||||
go func() {
|
||||
@@ -37,12 +39,13 @@ func TestWorkspaceResources(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
close(done)
|
||||
}()
|
||||
ptty.ExpectMatch("coder ssh example")
|
||||
ptty.ExpectMatch(ctx, "coder ssh example")
|
||||
<-done
|
||||
})
|
||||
|
||||
t.Run("MultipleStates", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := testutil.Context(t, testutil.WaitMedium)
|
||||
ptty := ptytest.New(t)
|
||||
disconnected := dbtime.Now().Add(-4 * time.Second)
|
||||
done := make(chan struct{})
|
||||
@@ -99,15 +102,15 @@ func TestWorkspaceResources(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
close(done)
|
||||
}()
|
||||
ptty.ExpectMatch("google_compute_disk.root")
|
||||
ptty.ExpectMatch("google_compute_instance.dev")
|
||||
ptty.ExpectMatch("healthy")
|
||||
ptty.ExpectMatch("coder ssh dev.dev")
|
||||
ptty.ExpectMatch("kubernetes_pod.dev")
|
||||
ptty.ExpectMatch("healthy")
|
||||
ptty.ExpectMatch("coder ssh dev.go")
|
||||
ptty.ExpectMatch("agent has lost connection")
|
||||
ptty.ExpectMatch("coder ssh dev.postgres")
|
||||
ptty.ExpectMatch(ctx, "google_compute_disk.root")
|
||||
ptty.ExpectMatch(ctx, "google_compute_instance.dev")
|
||||
ptty.ExpectMatch(ctx, "healthy")
|
||||
ptty.ExpectMatch(ctx, "coder ssh dev.dev")
|
||||
ptty.ExpectMatch(ctx, "kubernetes_pod.dev")
|
||||
ptty.ExpectMatch(ctx, "healthy")
|
||||
ptty.ExpectMatch(ctx, "coder ssh dev.go")
|
||||
ptty.ExpectMatch(ctx, "agent has lost connection")
|
||||
ptty.ExpectMatch(ctx, "coder ssh dev.postgres")
|
||||
<-done
|
||||
})
|
||||
}
|
||||
|
||||
@@ -144,7 +144,7 @@ func TestConfigSSH(t *testing.T) {
|
||||
{match: "Continue?", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
|
||||
@@ -731,7 +731,7 @@ func TestConfigSSH_FileWriteAndOptionsFlow(t *testing.T) {
|
||||
})
|
||||
|
||||
for _, m := range tt.matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
|
||||
|
||||
+59
-59
@@ -81,7 +81,7 @@ func TestCreateDynamic(t *testing.T) {
|
||||
doneChan <- inv.Run()
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "has been created")
|
||||
stdout.ExpectMatch(ctx, "has been created")
|
||||
err := testutil.RequireReceive(ctx, t, doneChan)
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -110,7 +110,7 @@ func TestCreateDynamic(t *testing.T) {
|
||||
doneChan <- inv.Run()
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "has been created")
|
||||
stdout.ExpectMatch(ctx, "has been created")
|
||||
|
||||
err = testutil.RequireReceive(ctx, t, doneChan)
|
||||
require.NoError(t, err)
|
||||
@@ -153,14 +153,14 @@ func TestCreateDynamic(t *testing.T) {
|
||||
}()
|
||||
|
||||
// CLI should prompt for the region parameter since enable_region=true
|
||||
stdout.ExpectMatchContext(ctx, "region")
|
||||
stdout.ExpectMatch(ctx, "region")
|
||||
stdin.WriteLine("eu-west")
|
||||
|
||||
// Confirm creation
|
||||
stdout.ExpectMatchContext(ctx, "Confirm create?")
|
||||
stdout.ExpectMatch(ctx, "Confirm create?")
|
||||
stdin.WriteLine("yes")
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "has been created")
|
||||
stdout.ExpectMatch(ctx, "has been created")
|
||||
|
||||
err := <-doneChan
|
||||
require.NoError(t, err)
|
||||
@@ -314,7 +314,7 @@ func TestCreateDynamic(t *testing.T) {
|
||||
doneChan <- inv.Run()
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "has been created")
|
||||
stdout.ExpectMatch(ctx, "has been created")
|
||||
|
||||
err = <-doneChan
|
||||
require.NoError(t, err, "slider=8 should succeed when max_slider=10")
|
||||
@@ -368,7 +368,7 @@ func TestCreate(t *testing.T) {
|
||||
{match: "Confirm create", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
if len(m.write) > 0 {
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
@@ -426,7 +426,7 @@ func TestCreate(t *testing.T) {
|
||||
{match: "Confirm create", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
if len(m.write) > 0 {
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
@@ -493,7 +493,7 @@ func TestCreate(t *testing.T) {
|
||||
{match: "Confirm create", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
if len(m.write) > 0 {
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
@@ -547,7 +547,7 @@ func TestCreate(t *testing.T) {
|
||||
{match: "Confirm create", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
if len(m.write) > 0 {
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
@@ -609,7 +609,7 @@ func TestCreate(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
stdin.WriteLine(value)
|
||||
}
|
||||
<-doneChan
|
||||
@@ -645,7 +645,7 @@ func TestCreate(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "building in the background")
|
||||
stdout.ExpectMatch(ctx, "building in the background")
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
|
||||
// Verify workspace was actually created.
|
||||
@@ -682,7 +682,7 @@ func TestCreate(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "building in the background")
|
||||
stdout.ExpectMatch(ctx, "building in the background")
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
|
||||
// Verify workspace was created and parameters were applied.
|
||||
@@ -730,7 +730,7 @@ func TestCreate(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "building in the background")
|
||||
stdout.ExpectMatch(ctx, "building in the background")
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
|
||||
ws, err := member.WorkspaceByOwnerAndName(ctx, codersdk.Me, "my-workspace", codersdk.WorkspaceOptions{})
|
||||
@@ -838,11 +838,11 @@ func TestCreateWithRichParameters(t *testing.T) {
|
||||
handlePty: func(ctx context.Context, stdout *expecter.Expecter, stdin *testutil.Writer) {
|
||||
// Enter the value for each parameter as prompted.
|
||||
for _, param := range params {
|
||||
stdout.ExpectMatchContext(ctx, param.name)
|
||||
stdout.ExpectMatch(ctx, param.name)
|
||||
stdin.WriteLine(param.value)
|
||||
}
|
||||
// Confirm the creation.
|
||||
stdout.ExpectMatchContext(ctx, "Confirm create?")
|
||||
stdout.ExpectMatch(ctx, "Confirm create?")
|
||||
stdin.WriteLine("yes")
|
||||
},
|
||||
},
|
||||
@@ -859,12 +859,12 @@ func TestCreateWithRichParameters(t *testing.T) {
|
||||
handlePty: func(ctx context.Context, stdout *expecter.Expecter, stdin *testutil.Writer) {
|
||||
// Simply accept the defaults.
|
||||
for _, param := range params {
|
||||
stdout.ExpectMatchContext(ctx, param.name)
|
||||
stdout.ExpectMatchContext(ctx, `Enter a value (default: "`+param.value+`")`)
|
||||
stdout.ExpectMatch(ctx, param.name)
|
||||
stdout.ExpectMatch(ctx, `Enter a value (default: "`+param.value+`")`)
|
||||
stdin.WriteLine("")
|
||||
}
|
||||
// Confirm the creation.
|
||||
stdout.ExpectMatchContext(ctx, "Confirm create?")
|
||||
stdout.ExpectMatch(ctx, "Confirm create?")
|
||||
stdin.WriteLine("yes")
|
||||
},
|
||||
},
|
||||
@@ -884,7 +884,7 @@ func TestCreateWithRichParameters(t *testing.T) {
|
||||
},
|
||||
handlePty: func(ctx context.Context, stdout *expecter.Expecter, stdin *testutil.Writer) {
|
||||
// No prompts, we only need to confirm.
|
||||
stdout.ExpectMatchContext(ctx, "Confirm create?")
|
||||
stdout.ExpectMatch(ctx, "Confirm create?")
|
||||
stdin.WriteLine("yes")
|
||||
},
|
||||
},
|
||||
@@ -900,7 +900,7 @@ func TestCreateWithRichParameters(t *testing.T) {
|
||||
},
|
||||
handlePty: func(ctx context.Context, stdout *expecter.Expecter, stdin *testutil.Writer) {
|
||||
// No prompts, we only need to confirm.
|
||||
stdout.ExpectMatchContext(ctx, "Confirm create?")
|
||||
stdout.ExpectMatch(ctx, "Confirm create?")
|
||||
stdin.WriteLine("yes")
|
||||
},
|
||||
},
|
||||
@@ -976,12 +976,12 @@ func TestCreateWithRichParameters(t *testing.T) {
|
||||
handlePty: func(ctx context.Context, stdout *expecter.Expecter, stdin *testutil.Writer) {
|
||||
// Simply accept the defaults.
|
||||
for _, param := range params {
|
||||
stdout.ExpectMatchContext(ctx, param.name)
|
||||
stdout.ExpectMatchContext(ctx, `Enter a value (default: "`+param.value+`")`)
|
||||
stdout.ExpectMatch(ctx, param.name)
|
||||
stdout.ExpectMatch(ctx, `Enter a value (default: "`+param.value+`")`)
|
||||
stdin.WriteLine("")
|
||||
}
|
||||
// Confirm the creation.
|
||||
stdout.ExpectMatchContext(ctx, "Confirm create?")
|
||||
stdout.ExpectMatch(ctx, "Confirm create?")
|
||||
stdin.WriteLine("yes")
|
||||
},
|
||||
withDefaults: true,
|
||||
@@ -994,10 +994,10 @@ func TestCreateWithRichParameters(t *testing.T) {
|
||||
handlePty: func(ctx context.Context, stdout *expecter.Expecter, stdin *testutil.Writer) {
|
||||
// Default values should get printed.
|
||||
for _, param := range params {
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("%s: '%s'", param.name, param.value))
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("%s: '%s'", param.name, param.value))
|
||||
}
|
||||
// No prompts, we only need to confirm.
|
||||
stdout.ExpectMatchContext(ctx, "Confirm create?")
|
||||
stdout.ExpectMatch(ctx, "Confirm create?")
|
||||
stdin.WriteLine("yes")
|
||||
},
|
||||
withDefaults: true,
|
||||
@@ -1015,10 +1015,10 @@ func TestCreateWithRichParameters(t *testing.T) {
|
||||
handlePty: func(ctx context.Context, stdout *expecter.Expecter, stdin *testutil.Writer) {
|
||||
// Default values should get printed.
|
||||
for _, param := range params {
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("%s: '%s'", param.name, param.value))
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("%s: '%s'", param.name, param.value))
|
||||
}
|
||||
// No prompts, we only need to confirm.
|
||||
stdout.ExpectMatchContext(ctx, "Confirm create?")
|
||||
stdout.ExpectMatch(ctx, "Confirm create?")
|
||||
stdin.WriteLine("yes")
|
||||
},
|
||||
},
|
||||
@@ -1044,11 +1044,11 @@ cli_param: from file`)
|
||||
},
|
||||
handlePty: func(ctx context.Context, stdout *expecter.Expecter, stdin *testutil.Writer) {
|
||||
// Should get prompted for the input param since it has no default.
|
||||
stdout.ExpectMatchContext(ctx, "input_param")
|
||||
stdout.ExpectMatch(ctx, "input_param")
|
||||
stdin.WriteLine("from input")
|
||||
|
||||
// Confirm the creation.
|
||||
stdout.ExpectMatchContext(ctx, "Confirm create?")
|
||||
stdout.ExpectMatch(ctx, "Confirm create?")
|
||||
stdin.WriteLine("yes")
|
||||
},
|
||||
withDefaults: true,
|
||||
@@ -1284,9 +1284,9 @@ func TestCreateWithPreset(t *testing.T) {
|
||||
|
||||
// Should: display the selected preset as well as its parameters
|
||||
presetName := fmt.Sprintf("Preset '%s' applied:", preset.Name)
|
||||
stdout.ExpectMatchContext(ctx, presetName)
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("%s: '%s'", firstParameterName, secondOptionalParameterValue))
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("%s: '%s'", thirdParameterName, thirdParameterValue))
|
||||
stdout.ExpectMatch(ctx, presetName)
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("%s: '%s'", firstParameterName, secondOptionalParameterValue))
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("%s: '%s'", thirdParameterName, thirdParameterValue))
|
||||
|
||||
// Verify if the new workspace uses expected parameters.
|
||||
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort)
|
||||
@@ -1360,9 +1360,9 @@ func TestCreateWithPreset(t *testing.T) {
|
||||
|
||||
// Should: display the default preset as well as its parameters
|
||||
presetName := fmt.Sprintf("Preset '%s' (default) applied:", defaultPreset.Name)
|
||||
stdout.ExpectMatchContext(ctx, presetName)
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("%s: '%s'", firstParameterName, secondOptionalParameterValue))
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("%s: '%s'", thirdParameterName, thirdParameterValue))
|
||||
stdout.ExpectMatch(ctx, presetName)
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("%s: '%s'", firstParameterName, secondOptionalParameterValue))
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("%s: '%s'", thirdParameterName, thirdParameterValue))
|
||||
|
||||
// Verify if the new workspace uses expected parameters.
|
||||
tvPresets, err := client.TemplateVersionPresets(ctx, version.ID)
|
||||
@@ -1434,11 +1434,11 @@ func TestCreateWithPreset(t *testing.T) {
|
||||
}()
|
||||
|
||||
// Should: prompt the user for the preset
|
||||
stdout.ExpectMatchContext(ctx, "Select a preset below:")
|
||||
stdout.ExpectMatch(ctx, "Select a preset below:")
|
||||
// We don't actually have to respond to the selector, since we hardcode the cliui.Select to return the
|
||||
// first option in test scenarios (c.f. cliui/select.go)
|
||||
stdout.ExpectMatchContext(ctx, "Preset 'preset-test' applied")
|
||||
stdout.ExpectMatchContext(ctx, "Confirm create?")
|
||||
stdout.ExpectMatch(ctx, "Preset 'preset-test' applied")
|
||||
stdout.ExpectMatch(ctx, "Confirm create?")
|
||||
stdin.WriteLine("yes")
|
||||
|
||||
<-doneChan
|
||||
@@ -1490,7 +1490,7 @@ func TestCreateWithPreset(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
err := inv.Run()
|
||||
require.NoError(t, err)
|
||||
stdout.ExpectMatchContext(ctx, "No preset applied.")
|
||||
stdout.ExpectMatch(ctx, "No preset applied.")
|
||||
|
||||
// Verify if the new workspace uses expected parameters.
|
||||
workspaces, err := client.Workspaces(ctx, codersdk.WorkspaceFilter{
|
||||
@@ -1543,7 +1543,7 @@ func TestCreateWithPreset(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
err := inv.Run()
|
||||
require.NoError(t, err)
|
||||
stdout.ExpectMatchContext(ctx, "No preset applied.")
|
||||
stdout.ExpectMatch(ctx, "No preset applied.")
|
||||
|
||||
// Verify that the new workspace doesn't use the preset parameters.
|
||||
tvPresets, err := client.TemplateVersionPresets(ctx, version.ID)
|
||||
@@ -1639,8 +1639,8 @@ func TestCreateWithPreset(t *testing.T) {
|
||||
|
||||
// Should: display the selected preset as well as its parameter
|
||||
presetName := fmt.Sprintf("Preset '%s' applied:", preset.Name)
|
||||
stdout.ExpectMatchContext(ctx, presetName)
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("%s: '%s'", firstParameterName, secondOptionalParameterValue))
|
||||
stdout.ExpectMatch(ctx, presetName)
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("%s: '%s'", firstParameterName, secondOptionalParameterValue))
|
||||
|
||||
// Verify if the new workspace uses expected parameters.
|
||||
tvPresets, err := client.TemplateVersionPresets(ctx, version.ID)
|
||||
@@ -1709,8 +1709,8 @@ func TestCreateWithPreset(t *testing.T) {
|
||||
|
||||
// Should: display the selected preset as well as its parameter
|
||||
presetName := fmt.Sprintf("Preset '%s' applied:", preset.Name)
|
||||
stdout.ExpectMatchContext(ctx, presetName)
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("%s: '%s'", firstParameterName, secondOptionalParameterValue))
|
||||
stdout.ExpectMatch(ctx, presetName)
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("%s: '%s'", firstParameterName, secondOptionalParameterValue))
|
||||
|
||||
// Verify if the new workspace uses expected parameters.
|
||||
tvPresets, err := client.TemplateVersionPresets(ctx, version.ID)
|
||||
@@ -1771,13 +1771,13 @@ func TestCreateWithPreset(t *testing.T) {
|
||||
|
||||
// Should: display the selected preset as well as its parameters
|
||||
presetName := fmt.Sprintf("Preset '%s' applied:", preset.Name)
|
||||
stdout.ExpectMatchContext(ctx, presetName)
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("%s: '%s'", firstParameterName, secondOptionalParameterValue))
|
||||
stdout.ExpectMatch(ctx, presetName)
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("%s: '%s'", firstParameterName, secondOptionalParameterValue))
|
||||
|
||||
// Should: prompt for the missing parameter
|
||||
stdout.ExpectMatchContext(ctx, thirdParameterDescription)
|
||||
stdout.ExpectMatch(ctx, thirdParameterDescription)
|
||||
stdin.WriteLine(thirdParameterValue)
|
||||
stdout.ExpectMatchContext(ctx, "Confirm create?")
|
||||
stdout.ExpectMatch(ctx, "Confirm create?")
|
||||
stdin.WriteLine("yes")
|
||||
|
||||
<-doneChan
|
||||
@@ -1877,7 +1877,7 @@ func TestCreateValidateRichParameters(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
if value != "" {
|
||||
stdin.WriteLine(value)
|
||||
}
|
||||
@@ -1918,7 +1918,7 @@ func TestCreateValidateRichParameters(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
if value != "" {
|
||||
stdin.WriteLine(value)
|
||||
}
|
||||
@@ -1959,7 +1959,7 @@ func TestCreateValidateRichParameters(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
if value != "" {
|
||||
stdin.WriteLine(value)
|
||||
}
|
||||
@@ -2000,7 +2000,7 @@ func TestCreateValidateRichParameters(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
if value != "" {
|
||||
stdin.WriteLine(value)
|
||||
}
|
||||
@@ -2027,9 +2027,9 @@ func TestCreateValidateRichParameters(t *testing.T) {
|
||||
stdin := testutil.NewWriterAttachedToInvocation(t, logger.Named("stdin"), inv)
|
||||
clitest.Start(t, inv)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, listOfStringsParameterName)
|
||||
stdout.ExpectMatchContext(ctx, "aaa, bbb, ccc")
|
||||
stdout.ExpectMatchContext(ctx, "Confirm create?")
|
||||
stdout.ExpectMatch(ctx, listOfStringsParameterName)
|
||||
stdout.ExpectMatch(ctx, "aaa, bbb, ccc")
|
||||
stdout.ExpectMatch(ctx, "Confirm create?")
|
||||
stdin.WriteLine("yes")
|
||||
})
|
||||
|
||||
@@ -2082,7 +2082,7 @@ func TestCreateValidateRichParameters(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
if value != "" {
|
||||
stdin.WriteLine(value)
|
||||
}
|
||||
@@ -2132,10 +2132,10 @@ func TestCreateWithGitAuth(t *testing.T) {
|
||||
stdin := testutil.NewWriterAttachedToInvocation(t, logger.Named("stdin"), inv)
|
||||
clitest.Start(t, inv)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "You must authenticate with GitHub to create a workspace")
|
||||
stdout.ExpectMatch(ctx, "You must authenticate with GitHub to create a workspace")
|
||||
resp := coderdtest.RequestExternalAuthCallback(t, "github", member)
|
||||
_ = resp.Body.Close()
|
||||
require.Equal(t, http.StatusTemporaryRedirect, resp.StatusCode)
|
||||
stdout.ExpectMatchContext(ctx, "Confirm create?")
|
||||
stdout.ExpectMatch(ctx, "Confirm create?")
|
||||
stdin.WriteLine("yes")
|
||||
}
|
||||
|
||||
+6
-6
@@ -52,7 +52,7 @@ func TestDelete(t *testing.T) {
|
||||
assert.ErrorIs(t, err, io.EOF)
|
||||
}
|
||||
}()
|
||||
stdout.ExpectMatchContext(ctx, "has been deleted")
|
||||
stdout.ExpectMatch(ctx, "has been deleted")
|
||||
<-doneChan
|
||||
})
|
||||
|
||||
@@ -81,7 +81,7 @@ func TestDelete(t *testing.T) {
|
||||
assert.ErrorIs(t, err, io.EOF)
|
||||
}
|
||||
}()
|
||||
stdout.ExpectMatchContext(ctx, "has been deleted")
|
||||
stdout.ExpectMatch(ctx, "has been deleted")
|
||||
testutil.TryReceive(ctx, t, doneChan)
|
||||
|
||||
_, err := client.Workspace(ctx, workspace.ID)
|
||||
@@ -126,7 +126,7 @@ func TestDelete(t *testing.T) {
|
||||
assert.ErrorIs(t, err, io.EOF)
|
||||
}
|
||||
}()
|
||||
stdout.ExpectMatchContext(ctx, "has been deleted")
|
||||
stdout.ExpectMatch(ctx, "has been deleted")
|
||||
<-doneChan
|
||||
})
|
||||
|
||||
@@ -160,7 +160,7 @@ func TestDelete(t *testing.T) {
|
||||
}
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "has been deleted")
|
||||
stdout.ExpectMatch(ctx, "has been deleted")
|
||||
<-doneChan
|
||||
|
||||
workspace, err = client.Workspace(context.Background(), workspace.ID)
|
||||
@@ -216,7 +216,7 @@ func TestDelete(t *testing.T) {
|
||||
defer close(doneChan)
|
||||
_ = inv.WithContext(ctx).Run()
|
||||
}()
|
||||
stdout.ExpectMatchContext(ctx, "there are no provisioners that accept the required tags")
|
||||
stdout.ExpectMatch(ctx, "there are no provisioners that accept the required tags")
|
||||
cancel()
|
||||
<-doneChan
|
||||
})
|
||||
@@ -324,7 +324,7 @@ func TestDelete(t *testing.T) {
|
||||
require.Error(t, runErr)
|
||||
require.Contains(t, runErr.Error(), expectedErr)
|
||||
} else {
|
||||
stdout.ExpectMatchContext(ctx, "has been deleted")
|
||||
stdout.ExpectMatch(ctx, "has been deleted")
|
||||
<-doneChan
|
||||
|
||||
// When running with the race detector on, we sometimes get an EOF.
|
||||
|
||||
+1
-1
@@ -685,7 +685,7 @@ func TestExpMcpReporter(t *testing.T) {
|
||||
assert.Error(t, err)
|
||||
}()
|
||||
|
||||
stderr.ExpectMatchContext(ctx, "Failed to connect to agent socket")
|
||||
stderr.ExpectMatch(ctx, "Failed to connect to agent socket")
|
||||
cancel()
|
||||
<-cmdDone
|
||||
})
|
||||
|
||||
@@ -63,7 +63,7 @@ func TestExpRpty(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
|
||||
stdout.ExpectMatchContext(ctx, randStr)
|
||||
stdout.ExpectMatch(ctx, randStr)
|
||||
<-cmdDone
|
||||
})
|
||||
|
||||
@@ -134,9 +134,9 @@ func TestExpRpty(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
|
||||
stdout.ExpectMatchContext(ctx, " #")
|
||||
stdout.ExpectMatch(ctx, " #")
|
||||
stdin.WriteLine("hostname")
|
||||
stdout.ExpectMatchContext(ctx, ct.Container.Config.Hostname)
|
||||
stdout.ExpectMatch(ctx, ct.Container.Config.Hostname)
|
||||
stdin.WriteLine("exit")
|
||||
<-cmdDone
|
||||
})
|
||||
|
||||
@@ -29,7 +29,7 @@ func TestExternalAuth(t *testing.T) {
|
||||
inv, _ := clitest.New(t, "--agent-url", url, "--agent-token", "foo", "external-auth", "access-token", "github")
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
waiter := clitest.StartWithWaiter(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "https://github.com")
|
||||
stdout.ExpectMatch(ctx, "https://github.com")
|
||||
waiter.RequireIs(cliui.ErrCanceled)
|
||||
})
|
||||
t.Run("SuccessWithToken", func(t *testing.T) {
|
||||
@@ -45,7 +45,7 @@ func TestExternalAuth(t *testing.T) {
|
||||
inv, _ := clitest.New(t, "--agent-url", url, "--agent-token", "foo", "external-auth", "access-token", "github")
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
clitest.Start(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "bananas")
|
||||
stdout.ExpectMatch(ctx, "bananas")
|
||||
})
|
||||
t.Run("NoArgs", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
@@ -76,6 +76,6 @@ func TestExternalAuth(t *testing.T) {
|
||||
inv, _ := clitest.New(t, "--agent-url", url, "--agent-token", "foo", "external-auth", "access-token", "github", "--extra", "hey")
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
clitest.Start(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "there")
|
||||
stdout.ExpectMatch(ctx, "there")
|
||||
})
|
||||
}
|
||||
|
||||
@@ -37,14 +37,14 @@ func TestGitAskpass(t *testing.T) {
|
||||
inv.Environ.Set("CODER_AGENT_TOKEN", "fake-token")
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
clitest.Start(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "something")
|
||||
stdout.ExpectMatch(ctx, "something")
|
||||
|
||||
inv, _ = clitest.New(t, "--agent-url", url, "Password for 'https://potato@github.com':")
|
||||
inv.Environ.Set("GIT_PREFIX", "/")
|
||||
inv.Environ.Set("CODER_AGENT_TOKEN", "fake-token")
|
||||
stdout = expecter.NewAttachedToInvocation(t, inv)
|
||||
clitest.Start(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "bananas")
|
||||
stdout.ExpectMatch(ctx, "bananas")
|
||||
})
|
||||
|
||||
t.Run("NoHost", func(t *testing.T) {
|
||||
@@ -63,7 +63,7 @@ func TestGitAskpass(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
err := inv.Run()
|
||||
require.ErrorIs(t, err, cliui.ErrCanceled)
|
||||
stdout.ExpectMatchContext(ctx, "Nope!")
|
||||
stdout.ExpectMatch(ctx, "Nope!")
|
||||
})
|
||||
|
||||
t.Run("Poll", func(t *testing.T) {
|
||||
@@ -99,11 +99,11 @@ func TestGitAskpass(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
testutil.RequireReceive(ctx, t, poll)
|
||||
stderr.ExpectMatchContext(ctx, "Open the following URL to authenticate")
|
||||
stderr.ExpectMatch(ctx, "Open the following URL to authenticate")
|
||||
resp.Store(&agentsdk.ExternalAuthResponse{
|
||||
Username: "username",
|
||||
Password: "password",
|
||||
})
|
||||
stdout.ExpectMatchContext(ctx, "username")
|
||||
stdout.ExpectMatch(ctx, "username")
|
||||
})
|
||||
}
|
||||
|
||||
+14
-14
@@ -92,9 +92,9 @@ func TestUseKeyring(t *testing.T) {
|
||||
}()
|
||||
|
||||
// Provide the token when prompted
|
||||
stdout.ExpectMatchContext(ctx, "Paste your token here:")
|
||||
stdout.ExpectMatch(ctx, "Paste your token here:")
|
||||
stdin.WriteLine(client.SessionToken())
|
||||
stdout.ExpectMatchContext(ctx, "Welcome to Coder")
|
||||
stdout.ExpectMatch(ctx, "Welcome to Coder")
|
||||
<-doneChan
|
||||
|
||||
// Verify that session file was NOT created (using keyring instead)
|
||||
@@ -139,9 +139,9 @@ func TestUseKeyring(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Paste your token here:")
|
||||
stdout.ExpectMatch(ctx, "Paste your token here:")
|
||||
stdin.WriteLine(client.SessionToken())
|
||||
stdout.ExpectMatchContext(ctx, "Welcome to Coder")
|
||||
stdout.ExpectMatch(ctx, "Welcome to Coder")
|
||||
<-doneChan
|
||||
|
||||
// Verify credential exists in OS keyring
|
||||
@@ -203,9 +203,9 @@ func TestUseKeyring(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Paste your token here:")
|
||||
stdout.ExpectMatch(ctx, "Paste your token here:")
|
||||
stdin.WriteLine(client.SessionToken())
|
||||
stdout.ExpectMatchContext(ctx, "Welcome to Coder")
|
||||
stdout.ExpectMatch(ctx, "Welcome to Coder")
|
||||
<-doneChan
|
||||
|
||||
// Verify that session file WAS created (not using keyring)
|
||||
@@ -248,9 +248,9 @@ func TestUseKeyring(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Paste your token here:")
|
||||
stdout.ExpectMatch(ctx, "Paste your token here:")
|
||||
stdin.WriteLine(client.SessionToken())
|
||||
stdout.ExpectMatchContext(ctx, "Welcome to Coder")
|
||||
stdout.ExpectMatch(ctx, "Welcome to Coder")
|
||||
<-doneChan
|
||||
|
||||
// Verify that session file WAS created (not using keyring)
|
||||
@@ -292,9 +292,9 @@ func TestUseKeyring(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Paste your token here:")
|
||||
stdout.ExpectMatch(ctx, "Paste your token here:")
|
||||
stdin.WriteLine(client.SessionToken())
|
||||
stdout.ExpectMatchContext(ctx, "Welcome to Coder")
|
||||
stdout.ExpectMatch(ctx, "Welcome to Coder")
|
||||
<-doneChan
|
||||
|
||||
// Verify that session file WAS created (not using keyring)
|
||||
@@ -344,9 +344,9 @@ func TestUseKeyringUnsupportedOS(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Paste your token here:")
|
||||
stdout.ExpectMatch(ctx, "Paste your token here:")
|
||||
stdin.WriteLine(client.SessionToken())
|
||||
stdout.ExpectMatchContext(ctx, "Welcome to Coder")
|
||||
stdout.ExpectMatch(ctx, "Welcome to Coder")
|
||||
<-doneChan
|
||||
|
||||
// Verify that session file WAS created (automatic fallback to file storage)
|
||||
@@ -385,9 +385,9 @@ func TestUseKeyringUnsupportedOS(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Paste your token here:")
|
||||
stdout.ExpectMatch(ctx, "Paste your token here:")
|
||||
stdin.WriteLine(client.SessionToken())
|
||||
stdout.ExpectMatchContext(ctx, "Welcome to Coder")
|
||||
stdout.ExpectMatch(ctx, "Welcome to Coder")
|
||||
<-doneChan
|
||||
|
||||
// Verify session file exists
|
||||
|
||||
+2
-2
@@ -44,8 +44,8 @@ func TestList(t *testing.T) {
|
||||
assert.NoError(t, errC)
|
||||
close(done)
|
||||
}()
|
||||
stdout.ExpectMatchContext(ctx, r.Workspace.Name)
|
||||
stdout.ExpectMatchContext(ctx, "Started")
|
||||
stdout.ExpectMatch(ctx, r.Workspace.Name)
|
||||
stdout.ExpectMatch(ctx, "Started")
|
||||
cancelFunc()
|
||||
<-done
|
||||
})
|
||||
|
||||
+42
-42
@@ -107,10 +107,10 @@ func TestLogin(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
stdin.WriteLine(value)
|
||||
}
|
||||
stdout.ExpectMatchContext(ctx, "Welcome to Coder")
|
||||
stdout.ExpectMatch(ctx, "Welcome to Coder")
|
||||
<-doneChan
|
||||
resp, err := client.LoginWithPassword(ctx, codersdk.LoginWithPasswordRequest{
|
||||
Email: coderdtest.FirstUserParams.Email,
|
||||
@@ -155,10 +155,10 @@ func TestLogin(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
stdin.WriteLine(value)
|
||||
}
|
||||
stdout.ExpectMatchContext(ctx, "Welcome to Coder")
|
||||
stdout.ExpectMatch(ctx, "Welcome to Coder")
|
||||
<-doneChan
|
||||
resp, err := client.LoginWithPassword(ctx, codersdk.LoginWithPasswordRequest{
|
||||
Email: coderdtest.FirstUserParams.Email,
|
||||
@@ -209,10 +209,10 @@ func TestLogin(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
stdin.WriteLine(value)
|
||||
}
|
||||
stdout.ExpectMatchContext(ctx, "Welcome to Coder")
|
||||
stdout.ExpectMatch(ctx, "Welcome to Coder")
|
||||
<-doneChan
|
||||
resp, err := client.LoginWithPassword(ctx, codersdk.LoginWithPasswordRequest{
|
||||
Email: coderdtest.FirstUserParams.Email,
|
||||
@@ -241,7 +241,7 @@ func TestLogin(t *testing.T) {
|
||||
|
||||
clitest.Start(t, inv)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("Attempting to authenticate with flag URL: '%s'", client.URL.String()))
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("Attempting to authenticate with flag URL: '%s'", client.URL.String()))
|
||||
matches := []string{
|
||||
"first user?", "yes",
|
||||
"username", coderdtest.FirstUserParams.Username,
|
||||
@@ -260,10 +260,10 @@ func TestLogin(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
stdin.WriteLine(value)
|
||||
}
|
||||
stdout.ExpectMatchContext(ctx, "Welcome to Coder")
|
||||
stdout.ExpectMatch(ctx, "Welcome to Coder")
|
||||
resp, err := client.LoginWithPassword(ctx, codersdk.LoginWithPasswordRequest{
|
||||
Email: coderdtest.FirstUserParams.Email,
|
||||
Password: coderdtest.FirstUserParams.Password,
|
||||
@@ -293,18 +293,18 @@ func TestLogin(t *testing.T) {
|
||||
stdin := testutil.NewWriterAttachedToInvocation(t, logger.Named("stdin"), inv)
|
||||
ctx := testutil.Context(t, testutil.WaitMedium)
|
||||
w := clitest.StartWithWaiter(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "firstName")
|
||||
stdout.ExpectMatch(ctx, "firstName")
|
||||
stdin.WriteLine(coderdtest.TrialUserParams.FirstName)
|
||||
stdout.ExpectMatchContext(ctx, "lastName")
|
||||
stdout.ExpectMatch(ctx, "lastName")
|
||||
stdin.WriteLine(coderdtest.TrialUserParams.LastName)
|
||||
stdout.ExpectMatchContext(ctx, "phoneNumber")
|
||||
stdout.ExpectMatch(ctx, "phoneNumber")
|
||||
stdin.WriteLine(coderdtest.TrialUserParams.PhoneNumber)
|
||||
stdout.ExpectMatchContext(ctx, "jobTitle")
|
||||
stdout.ExpectMatch(ctx, "jobTitle")
|
||||
stdin.WriteLine(coderdtest.TrialUserParams.JobTitle)
|
||||
stdout.ExpectMatchContext(ctx, "companyName")
|
||||
stdout.ExpectMatch(ctx, "companyName")
|
||||
stdin.WriteLine(coderdtest.TrialUserParams.CompanyName)
|
||||
// `developers` and `country` `cliui.Select` automatically selects the first option during tests.
|
||||
stdout.ExpectMatchContext(ctx, "Welcome to Coder")
|
||||
stdout.ExpectMatch(ctx, "Welcome to Coder")
|
||||
w.RequireSuccess()
|
||||
resp, err := client.LoginWithPassword(ctx, codersdk.LoginWithPasswordRequest{
|
||||
Email: coderdtest.FirstUserParams.Email,
|
||||
@@ -334,18 +334,18 @@ func TestLogin(t *testing.T) {
|
||||
stdin := testutil.NewWriterAttachedToInvocation(t, logger.Named("stdin"), inv)
|
||||
ctx := testutil.Context(t, testutil.WaitMedium)
|
||||
w := clitest.StartWithWaiter(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "firstName")
|
||||
stdout.ExpectMatch(ctx, "firstName")
|
||||
stdin.WriteLine(coderdtest.TrialUserParams.FirstName)
|
||||
stdout.ExpectMatchContext(ctx, "lastName")
|
||||
stdout.ExpectMatch(ctx, "lastName")
|
||||
stdin.WriteLine(coderdtest.TrialUserParams.LastName)
|
||||
stdout.ExpectMatchContext(ctx, "phoneNumber")
|
||||
stdout.ExpectMatch(ctx, "phoneNumber")
|
||||
stdin.WriteLine(coderdtest.TrialUserParams.PhoneNumber)
|
||||
stdout.ExpectMatchContext(ctx, "jobTitle")
|
||||
stdout.ExpectMatch(ctx, "jobTitle")
|
||||
stdin.WriteLine(coderdtest.TrialUserParams.JobTitle)
|
||||
stdout.ExpectMatchContext(ctx, "companyName")
|
||||
stdout.ExpectMatch(ctx, "companyName")
|
||||
stdin.WriteLine(coderdtest.TrialUserParams.CompanyName)
|
||||
// `developers` and `country` `cliui.Select` automatically selects the first option during tests.
|
||||
stdout.ExpectMatchContext(ctx, "Welcome to Coder")
|
||||
stdout.ExpectMatch(ctx, "Welcome to Coder")
|
||||
w.RequireSuccess()
|
||||
resp, err := client.LoginWithPassword(ctx, codersdk.LoginWithPasswordRequest{
|
||||
Email: coderdtest.FirstUserParams.Email,
|
||||
@@ -390,29 +390,29 @@ func TestLogin(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
stdin.WriteLine(value)
|
||||
}
|
||||
|
||||
// Validate that we reprompt for matching passwords.
|
||||
stdout.ExpectMatchContext(ctx, "Passwords do not match")
|
||||
stdout.ExpectMatchContext(ctx, "Enter a "+pretty.Sprint(cliui.DefaultStyles.Field, "password"))
|
||||
stdout.ExpectMatch(ctx, "Passwords do not match")
|
||||
stdout.ExpectMatch(ctx, "Enter a "+pretty.Sprint(cliui.DefaultStyles.Field, "password"))
|
||||
stdin.WriteLine(coderdtest.FirstUserParams.Password)
|
||||
stdout.ExpectMatchContext(ctx, "Confirm")
|
||||
stdout.ExpectMatch(ctx, "Confirm")
|
||||
stdin.WriteLine(coderdtest.FirstUserParams.Password)
|
||||
stdout.ExpectMatchContext(ctx, "trial")
|
||||
stdout.ExpectMatch(ctx, "trial")
|
||||
stdin.WriteLine("yes")
|
||||
stdout.ExpectMatchContext(ctx, "firstName")
|
||||
stdout.ExpectMatch(ctx, "firstName")
|
||||
stdin.WriteLine(coderdtest.TrialUserParams.FirstName)
|
||||
stdout.ExpectMatchContext(ctx, "lastName")
|
||||
stdout.ExpectMatch(ctx, "lastName")
|
||||
stdin.WriteLine(coderdtest.TrialUserParams.LastName)
|
||||
stdout.ExpectMatchContext(ctx, "phoneNumber")
|
||||
stdout.ExpectMatch(ctx, "phoneNumber")
|
||||
stdin.WriteLine(coderdtest.TrialUserParams.PhoneNumber)
|
||||
stdout.ExpectMatchContext(ctx, "jobTitle")
|
||||
stdout.ExpectMatch(ctx, "jobTitle")
|
||||
stdin.WriteLine(coderdtest.TrialUserParams.JobTitle)
|
||||
stdout.ExpectMatchContext(ctx, "companyName")
|
||||
stdout.ExpectMatch(ctx, "companyName")
|
||||
stdin.WriteLine(coderdtest.TrialUserParams.CompanyName)
|
||||
stdout.ExpectMatchContext(ctx, "Welcome to Coder")
|
||||
stdout.ExpectMatch(ctx, "Welcome to Coder")
|
||||
<-doneChan
|
||||
})
|
||||
|
||||
@@ -433,10 +433,10 @@ func TestLogin(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("Attempting to authenticate with argument URL: '%s'", client.URL.String()))
|
||||
stdout.ExpectMatchContext(ctx, "Paste your token here:")
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("Attempting to authenticate with argument URL: '%s'", client.URL.String()))
|
||||
stdout.ExpectMatch(ctx, "Paste your token here:")
|
||||
stdin.WriteLine(client.SessionToken())
|
||||
stdout.ExpectMatchContext(ctx, "Welcome to Coder")
|
||||
stdout.ExpectMatch(ctx, "Welcome to Coder")
|
||||
<-doneChan
|
||||
})
|
||||
|
||||
@@ -460,8 +460,8 @@ func TestLogin(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("Attempting to authenticate with config URL: '%s'", url))
|
||||
stdout.ExpectMatchContext(ctx, "Paste your token here:")
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("Attempting to authenticate with config URL: '%s'", url))
|
||||
stdout.ExpectMatch(ctx, "Paste your token here:")
|
||||
stdin.WriteLine(client.SessionToken())
|
||||
<-doneChan
|
||||
})
|
||||
@@ -486,8 +486,8 @@ func TestLogin(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("Attempting to authenticate with environment URL: '%s'", url))
|
||||
stdout.ExpectMatchContext(ctx, "Paste your token here:")
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("Attempting to authenticate with environment URL: '%s'", url))
|
||||
stdout.ExpectMatch(ctx, "Paste your token here:")
|
||||
stdin.WriteLine(client.SessionToken())
|
||||
<-doneChan
|
||||
})
|
||||
@@ -511,9 +511,9 @@ func TestLogin(t *testing.T) {
|
||||
assert.Error(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Paste your token here:")
|
||||
stdout.ExpectMatch(ctx, "Paste your token here:")
|
||||
stdin.WriteLine("an-invalid-token")
|
||||
stdout.ExpectMatchContext(ctx, "That's not a valid token!")
|
||||
stdout.ExpectMatch(ctx, "That's not a valid token!")
|
||||
cancelFunc()
|
||||
<-doneChan
|
||||
})
|
||||
@@ -603,7 +603,7 @@ func TestLoginToken(t *testing.T) {
|
||||
err := inv.WithContext(ctx).Run()
|
||||
require.NoError(t, err)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, client.SessionToken())
|
||||
stdout.ExpectMatch(ctx, client.SessionToken())
|
||||
})
|
||||
|
||||
t.Run("NoTokenStored", func(t *testing.T) {
|
||||
|
||||
+6
-6
@@ -43,9 +43,9 @@ func TestLogout(t *testing.T) {
|
||||
assert.NoFileExists(t, string(config.Session()))
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Are you sure you want to log out?")
|
||||
stdout.ExpectMatch(ctx, "Are you sure you want to log out?")
|
||||
stdin.WriteLine("yes")
|
||||
stdout.ExpectMatchContext(ctx, "You are no longer logged in. You can log in using 'coder login <url>'.")
|
||||
stdout.ExpectMatch(ctx, "You are no longer logged in. You can log in using 'coder login <url>'.")
|
||||
<-logoutChan
|
||||
})
|
||||
t.Run("SkipPrompt", func(t *testing.T) {
|
||||
@@ -70,7 +70,7 @@ func TestLogout(t *testing.T) {
|
||||
assert.NoFileExists(t, string(config.Session()))
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "You are no longer logged in. You can log in using 'coder login <url>'.")
|
||||
stdout.ExpectMatch(ctx, "You are no longer logged in. You can log in using 'coder login <url>'.")
|
||||
<-logoutChan
|
||||
})
|
||||
t.Run("NoURLFile", func(t *testing.T) {
|
||||
@@ -148,7 +148,7 @@ func TestLogout(t *testing.T) {
|
||||
stdin := testutil.NewWriterAttachedToInvocation(t, logger.Named("stdin"), logout)
|
||||
|
||||
go func() {
|
||||
stdout.ExpectMatchContext(ctx, "Are you sure you want to log out?")
|
||||
stdout.ExpectMatch(ctx, "Are you sure you want to log out?")
|
||||
stdin.WriteLine("yes")
|
||||
}()
|
||||
err = logout.Run()
|
||||
@@ -183,9 +183,9 @@ func login(ctx context.Context, t *testing.T) config.Root {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Paste your token here:")
|
||||
stdout.ExpectMatch(ctx, "Paste your token here:")
|
||||
stdin.WriteLine(client.SessionToken())
|
||||
stdout.ExpectMatchContext(ctx, "Welcome to Coder")
|
||||
stdout.ExpectMatch(ctx, "Welcome to Coder")
|
||||
testutil.TryReceive(ctx, t, doneChan)
|
||||
|
||||
return cfg
|
||||
|
||||
@@ -57,7 +57,7 @@ func TestCurrentOrganization(t *testing.T) {
|
||||
errC <- inv.Run()
|
||||
}()
|
||||
require.NoError(t, <-errC)
|
||||
stdout.ExpectMatchContext(ctx, orgID.String())
|
||||
stdout.ExpectMatch(ctx, orgID.String())
|
||||
})
|
||||
}
|
||||
|
||||
@@ -179,7 +179,7 @@ func TestOrganizationDelete(t *testing.T) {
|
||||
execDone <- inv.Run()
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("Delete organization %s?", pretty.Sprint(cliui.DefaultStyles.Code, "my-org")))
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("Delete organization %s?", pretty.Sprint(cliui.DefaultStyles.Code, "my-org")))
|
||||
stdin.WriteLine("yes")
|
||||
|
||||
require.NoError(t, <-execDone)
|
||||
|
||||
+3
-3
@@ -35,7 +35,7 @@ func TestPing(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "pong from "+workspace.Name)
|
||||
stdout.ExpectMatch(ctx, "pong from "+workspace.Name)
|
||||
cancel()
|
||||
<-cmdDone
|
||||
})
|
||||
@@ -59,7 +59,7 @@ func TestPing(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "pong from "+workspace.Name)
|
||||
stdout.ExpectMatch(ctx, "pong from "+workspace.Name)
|
||||
cancel()
|
||||
<-cmdDone
|
||||
})
|
||||
@@ -110,7 +110,7 @@ func TestPing(t *testing.T) {
|
||||
rfc3339 += `(?:Z|[+-]\d{2}:\d{2})`
|
||||
}
|
||||
|
||||
stdout.ExpectRegexMatchContext(ctx, `\[`+rfc3339+`\] pong from `+workspace.Name)
|
||||
stdout.ExpectRegexMatch(ctx, `\[`+rfc3339+`\] pong from `+workspace.Name)
|
||||
cancel()
|
||||
<-cmdDone
|
||||
})
|
||||
|
||||
@@ -172,7 +172,7 @@ func TestPortForward(t *testing.T) {
|
||||
t.Logf("command complete; err=%s", err.Error())
|
||||
errC <- err
|
||||
}()
|
||||
stdout.ExpectMatchContext(ctx, "Ready!")
|
||||
stdout.ExpectMatch(ctx, "Ready!")
|
||||
|
||||
// Open two connections simultaneously and test them out of
|
||||
// sync.
|
||||
@@ -223,7 +223,7 @@ func TestPortForward(t *testing.T) {
|
||||
go func() {
|
||||
errC <- inv.WithContext(ctx).Run()
|
||||
}()
|
||||
stdout.ExpectMatchContext(ctx, "Ready!")
|
||||
stdout.ExpectMatch(ctx, "Ready!")
|
||||
|
||||
// Open a connection to both listener 1 and 2 simultaneously and
|
||||
// then test them out of order.
|
||||
@@ -281,7 +281,7 @@ func TestPortForward(t *testing.T) {
|
||||
go func() {
|
||||
errC <- inv.WithContext(ctx).Run()
|
||||
}()
|
||||
stdout.ExpectMatchContext(ctx, "Ready!")
|
||||
stdout.ExpectMatch(ctx, "Ready!")
|
||||
|
||||
// Open connections to all items in the "dial" array.
|
||||
var (
|
||||
@@ -349,7 +349,7 @@ func TestPortForward(t *testing.T) {
|
||||
t.Logf("command complete; err=%s", err.Error())
|
||||
errC <- err
|
||||
}()
|
||||
stdout.ExpectMatchContext(ctx, "Ready!")
|
||||
stdout.ExpectMatch(ctx, "Ready!")
|
||||
|
||||
// Test IPv4 still works
|
||||
dialCtx, dialCtxCancel := context.WithTimeout(ctx, testutil.WaitShort)
|
||||
|
||||
+2
-2
@@ -35,9 +35,9 @@ func TestRename(t *testing.T) {
|
||||
stdin := testutil.NewWriterAttachedToInvocation(t, logger.Named("stdin"), inv)
|
||||
clitest.Start(t, inv)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "confirm rename:")
|
||||
stdout.ExpectMatch(ctx, "confirm rename:")
|
||||
stdin.WriteLine(workspace.Name)
|
||||
stdout.ExpectMatchContext(ctx, "renamed to")
|
||||
stdout.ExpectMatch(ctx, "renamed to")
|
||||
|
||||
ws, err := client.Workspace(ctx, workspace.ID)
|
||||
assert.NoError(t, err)
|
||||
|
||||
@@ -86,7 +86,7 @@ func TestResetPassword(t *testing.T) {
|
||||
{"Confirm", newPassword},
|
||||
}
|
||||
for _, match := range matches {
|
||||
stdout.ExpectMatchContext(ctx, match.output)
|
||||
stdout.ExpectMatch(ctx, match.output)
|
||||
stdin.WriteLine(match.input)
|
||||
}
|
||||
<-cmdDone
|
||||
|
||||
+10
-10
@@ -54,9 +54,9 @@ func TestRestart(t *testing.T) {
|
||||
go func() {
|
||||
done <- inv.WithContext(ctx).Run()
|
||||
}()
|
||||
stdout.ExpectMatchContext(ctx, "Stopping workspace")
|
||||
stdout.ExpectMatchContext(ctx, "Starting workspace")
|
||||
stdout.ExpectMatchContext(ctx, "workspace has been restarted")
|
||||
stdout.ExpectMatch(ctx, "Stopping workspace")
|
||||
stdout.ExpectMatch(ctx, "Starting workspace")
|
||||
stdout.ExpectMatch(ctx, "workspace has been restarted")
|
||||
|
||||
err := <-done
|
||||
require.NoError(t, err, "execute failed")
|
||||
@@ -103,7 +103,7 @@ func TestRestart(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
|
||||
if value != "" {
|
||||
stdin.WriteLine(value)
|
||||
@@ -161,7 +161,7 @@ func TestRestart(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
|
||||
if value != "" {
|
||||
stdin.WriteLine(value)
|
||||
@@ -221,7 +221,7 @@ func TestRestart(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
|
||||
if value != "" {
|
||||
stdin.WriteLine(value)
|
||||
@@ -279,7 +279,7 @@ func TestRestart(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
|
||||
if value != "" {
|
||||
stdin.WriteLine(value)
|
||||
@@ -356,7 +356,7 @@ func TestRestartWithParameters(t *testing.T) {
|
||||
}()
|
||||
ctx := testutil.Context(t, testutil.WaitShort)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "workspace has been restarted")
|
||||
stdout.ExpectMatch(ctx, "workspace has been restarted")
|
||||
<-doneChan
|
||||
|
||||
// Verify if immutable parameter is set
|
||||
@@ -405,9 +405,9 @@ func TestRestartWithParameters(t *testing.T) {
|
||||
|
||||
// We should be prompted for the parameters again.
|
||||
newValue := "xyz"
|
||||
stdout.ExpectMatchContext(ctx, mutableParameterName)
|
||||
stdout.ExpectMatch(ctx, mutableParameterName)
|
||||
stdin.WriteLine(newValue)
|
||||
stdout.ExpectMatchContext(ctx, "workspace has been restarted")
|
||||
stdout.ExpectMatch(ctx, "workspace has been restarted")
|
||||
<-doneChan
|
||||
|
||||
// Verify that the updated values are persisted.
|
||||
|
||||
+1
-1
@@ -283,7 +283,7 @@ func TestDERPHeaders(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "pong from "+workspace.Name)
|
||||
stdout.ExpectMatch(ctx, "pong from "+workspace.Name)
|
||||
<-cmdDone
|
||||
|
||||
require.Greater(t, derpCalled.Load(), int64(0), "expected /derp to be called at least once")
|
||||
|
||||
+49
-49
@@ -103,15 +103,15 @@ func TestScheduleShow(t *testing.T) {
|
||||
|
||||
// Then: they should see their own workspaces.
|
||||
// 1st workspace: a-owner-ws1 has both autostart and autostop enabled.
|
||||
stdout.ExpectMatchContext(ctx, ws[0].OwnerName+"/"+ws[0].Name)
|
||||
stdout.ExpectMatchContext(ctx, sched.Humanize())
|
||||
stdout.ExpectMatchContext(ctx, sched.Next(now).In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatchContext(ctx, "8h")
|
||||
stdout.ExpectMatchContext(ctx, ws[0].LatestBuild.Deadline.Time.In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatch(ctx, ws[0].OwnerName+"/"+ws[0].Name)
|
||||
stdout.ExpectMatch(ctx, sched.Humanize())
|
||||
stdout.ExpectMatch(ctx, sched.Next(now).In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatch(ctx, "8h")
|
||||
stdout.ExpectMatch(ctx, ws[0].LatestBuild.Deadline.Time.In(loc).Format(time.RFC3339))
|
||||
// 2nd workspace: b-owner-ws2 has only autostart enabled.
|
||||
stdout.ExpectMatchContext(ctx, ws[1].OwnerName+"/"+ws[1].Name)
|
||||
stdout.ExpectMatchContext(ctx, sched.Humanize())
|
||||
stdout.ExpectMatchContext(ctx, sched.Next(now).In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatch(ctx, ws[1].OwnerName+"/"+ws[1].Name)
|
||||
stdout.ExpectMatch(ctx, sched.Humanize())
|
||||
stdout.ExpectMatch(ctx, sched.Next(now).In(loc).Format(time.RFC3339))
|
||||
})
|
||||
|
||||
t.Run("OwnerAll", func(t *testing.T) {
|
||||
@@ -125,21 +125,21 @@ func TestScheduleShow(t *testing.T) {
|
||||
|
||||
// Then: they should see all workspaces
|
||||
// 1st workspace: a-owner-ws1 has both autostart and autostop enabled.
|
||||
stdout.ExpectMatchContext(ctx, ws[0].OwnerName+"/"+ws[0].Name)
|
||||
stdout.ExpectMatchContext(ctx, sched.Humanize())
|
||||
stdout.ExpectMatchContext(ctx, sched.Next(now).In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatchContext(ctx, "8h")
|
||||
stdout.ExpectMatchContext(ctx, ws[0].LatestBuild.Deadline.Time.In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatch(ctx, ws[0].OwnerName+"/"+ws[0].Name)
|
||||
stdout.ExpectMatch(ctx, sched.Humanize())
|
||||
stdout.ExpectMatch(ctx, sched.Next(now).In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatch(ctx, "8h")
|
||||
stdout.ExpectMatch(ctx, ws[0].LatestBuild.Deadline.Time.In(loc).Format(time.RFC3339))
|
||||
// 2nd workspace: b-owner-ws2 has only autostart enabled.
|
||||
stdout.ExpectMatchContext(ctx, ws[1].OwnerName+"/"+ws[1].Name)
|
||||
stdout.ExpectMatchContext(ctx, sched.Humanize())
|
||||
stdout.ExpectMatchContext(ctx, sched.Next(now).In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatch(ctx, ws[1].OwnerName+"/"+ws[1].Name)
|
||||
stdout.ExpectMatch(ctx, sched.Humanize())
|
||||
stdout.ExpectMatch(ctx, sched.Next(now).In(loc).Format(time.RFC3339))
|
||||
// 3rd workspace: c-member-ws3 has only autostop enabled.
|
||||
stdout.ExpectMatchContext(ctx, ws[2].OwnerName+"/"+ws[2].Name)
|
||||
stdout.ExpectMatchContext(ctx, "8h")
|
||||
stdout.ExpectMatchContext(ctx, ws[2].LatestBuild.Deadline.Time.In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatch(ctx, ws[2].OwnerName+"/"+ws[2].Name)
|
||||
stdout.ExpectMatch(ctx, "8h")
|
||||
stdout.ExpectMatch(ctx, ws[2].LatestBuild.Deadline.Time.In(loc).Format(time.RFC3339))
|
||||
// 4th workspace: d-member-ws4 has neither autostart nor autostop enabled.
|
||||
stdout.ExpectMatchContext(ctx, ws[3].OwnerName+"/"+ws[3].Name)
|
||||
stdout.ExpectMatch(ctx, ws[3].OwnerName+"/"+ws[3].Name)
|
||||
})
|
||||
|
||||
t.Run("OwnerSearchByName", func(t *testing.T) {
|
||||
@@ -153,9 +153,9 @@ func TestScheduleShow(t *testing.T) {
|
||||
|
||||
// Then: they should see workspaces matching that query
|
||||
// 2nd workspace: b-owner-ws2 has only autostart enabled.
|
||||
stdout.ExpectMatchContext(ctx, ws[1].OwnerName+"/"+ws[1].Name)
|
||||
stdout.ExpectMatchContext(ctx, sched.Humanize())
|
||||
stdout.ExpectMatchContext(ctx, sched.Next(now).In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatch(ctx, ws[1].OwnerName+"/"+ws[1].Name)
|
||||
stdout.ExpectMatch(ctx, sched.Humanize())
|
||||
stdout.ExpectMatch(ctx, sched.Next(now).In(loc).Format(time.RFC3339))
|
||||
})
|
||||
|
||||
t.Run("OwnerOneArg", func(t *testing.T) {
|
||||
@@ -169,9 +169,9 @@ func TestScheduleShow(t *testing.T) {
|
||||
|
||||
// Then: they should see that workspace
|
||||
// 3rd workspace: c-member-ws3 has only autostop enabled.
|
||||
stdout.ExpectMatchContext(ctx, ws[2].OwnerName+"/"+ws[2].Name)
|
||||
stdout.ExpectMatchContext(ctx, "8h")
|
||||
stdout.ExpectMatchContext(ctx, ws[2].LatestBuild.Deadline.Time.In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatch(ctx, ws[2].OwnerName+"/"+ws[2].Name)
|
||||
stdout.ExpectMatch(ctx, "8h")
|
||||
stdout.ExpectMatch(ctx, ws[2].LatestBuild.Deadline.Time.In(loc).Format(time.RFC3339))
|
||||
})
|
||||
|
||||
t.Run("MemberNoArgs", func(t *testing.T) {
|
||||
@@ -184,11 +184,11 @@ func TestScheduleShow(t *testing.T) {
|
||||
|
||||
// Then: they should see their own workspaces
|
||||
// 1st workspace: c-member-ws3 has only autostop enabled.
|
||||
stdout.ExpectMatchContext(ctx, ws[2].OwnerName+"/"+ws[2].Name)
|
||||
stdout.ExpectMatchContext(ctx, "8h")
|
||||
stdout.ExpectMatchContext(ctx, ws[2].LatestBuild.Deadline.Time.In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatch(ctx, ws[2].OwnerName+"/"+ws[2].Name)
|
||||
stdout.ExpectMatch(ctx, "8h")
|
||||
stdout.ExpectMatch(ctx, ws[2].LatestBuild.Deadline.Time.In(loc).Format(time.RFC3339))
|
||||
// 2nd workspace: d-member-ws4 has neither autostart nor autostop enabled.
|
||||
stdout.ExpectMatchContext(ctx, ws[3].OwnerName+"/"+ws[3].Name)
|
||||
stdout.ExpectMatch(ctx, ws[3].OwnerName+"/"+ws[3].Name)
|
||||
})
|
||||
|
||||
t.Run("MemberAll", func(t *testing.T) {
|
||||
@@ -205,11 +205,11 @@ func TestScheduleShow(t *testing.T) {
|
||||
|
||||
// Then: they should only see their own
|
||||
// 1st workspace: c-member-ws3 has only autostop enabled.
|
||||
stdout.ExpectMatchContext(ctx, ws[2].OwnerName+"/"+ws[2].Name)
|
||||
stdout.ExpectMatchContext(ctx, "8h")
|
||||
stdout.ExpectMatchContext(ctx, ws[2].LatestBuild.Deadline.Time.In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatch(ctx, ws[2].OwnerName+"/"+ws[2].Name)
|
||||
stdout.ExpectMatch(ctx, "8h")
|
||||
stdout.ExpectMatch(ctx, ws[2].LatestBuild.Deadline.Time.In(loc).Format(time.RFC3339))
|
||||
// 2nd workspace: d-member-ws4 has neither autostart nor autostop enabled.
|
||||
stdout.ExpectMatchContext(ctx, ws[3].OwnerName+"/"+ws[3].Name)
|
||||
stdout.ExpectMatch(ctx, ws[3].OwnerName+"/"+ws[3].Name)
|
||||
})
|
||||
|
||||
t.Run("JSON", func(t *testing.T) {
|
||||
@@ -286,9 +286,9 @@ func TestScheduleModify(t *testing.T) {
|
||||
require.NoError(t, inv.Run())
|
||||
|
||||
// Then: the updated schedule should be shown
|
||||
stdout.ExpectMatchContext(ctx, ws[3].OwnerName+"/"+ws[3].Name)
|
||||
stdout.ExpectMatchContext(ctx, sched.Humanize())
|
||||
stdout.ExpectMatchContext(ctx, sched.Next(now).In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatch(ctx, ws[3].OwnerName+"/"+ws[3].Name)
|
||||
stdout.ExpectMatch(ctx, sched.Humanize())
|
||||
stdout.ExpectMatch(ctx, sched.Next(now).In(loc).Format(time.RFC3339))
|
||||
})
|
||||
|
||||
t.Run("SetStop", func(t *testing.T) {
|
||||
@@ -303,9 +303,9 @@ func TestScheduleModify(t *testing.T) {
|
||||
require.NoError(t, inv.Run())
|
||||
|
||||
// Then: the updated schedule should be shown
|
||||
stdout.ExpectMatchContext(ctx, ws[2].OwnerName+"/"+ws[2].Name)
|
||||
stdout.ExpectMatchContext(ctx, "8h30m")
|
||||
stdout.ExpectMatchContext(ctx, ws[2].LatestBuild.Deadline.Time.In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatch(ctx, ws[2].OwnerName+"/"+ws[2].Name)
|
||||
stdout.ExpectMatch(ctx, "8h30m")
|
||||
stdout.ExpectMatch(ctx, ws[2].LatestBuild.Deadline.Time.In(loc).Format(time.RFC3339))
|
||||
})
|
||||
|
||||
t.Run("UnsetStart", func(t *testing.T) {
|
||||
@@ -320,7 +320,7 @@ func TestScheduleModify(t *testing.T) {
|
||||
require.NoError(t, inv.Run())
|
||||
|
||||
// Then: the updated schedule should be shown
|
||||
stdout.ExpectMatchContext(ctx, ws[1].OwnerName+"/"+ws[1].Name)
|
||||
stdout.ExpectMatch(ctx, ws[1].OwnerName+"/"+ws[1].Name)
|
||||
})
|
||||
|
||||
t.Run("UnsetStop", func(t *testing.T) {
|
||||
@@ -335,7 +335,7 @@ func TestScheduleModify(t *testing.T) {
|
||||
require.NoError(t, inv.Run())
|
||||
|
||||
// Then: the updated schedule should be shown
|
||||
stdout.ExpectMatchContext(ctx, ws[0].OwnerName+"/"+ws[0].Name)
|
||||
stdout.ExpectMatch(ctx, ws[0].OwnerName+"/"+ws[0].Name)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -386,11 +386,11 @@ func TestScheduleOverride(t *testing.T) {
|
||||
expectedDeadline := updated.LatestBuild.Deadline.Time.In(loc).Format(time.RFC3339)
|
||||
|
||||
// Then: the updated schedule should be shown
|
||||
stdout.ExpectMatchContext(ctx, ws[0].OwnerName+"/"+ws[0].Name)
|
||||
stdout.ExpectMatchContext(ctx, sched.Humanize())
|
||||
stdout.ExpectMatchContext(ctx, sched.Next(now).In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatchContext(ctx, "8h")
|
||||
stdout.ExpectMatchContext(ctx, expectedDeadline)
|
||||
stdout.ExpectMatch(ctx, ws[0].OwnerName+"/"+ws[0].Name)
|
||||
stdout.ExpectMatch(ctx, sched.Humanize())
|
||||
stdout.ExpectMatch(ctx, sched.Next(now).In(loc).Format(time.RFC3339))
|
||||
stdout.ExpectMatch(ctx, "8h")
|
||||
stdout.ExpectMatch(ctx, expectedDeadline)
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -438,8 +438,8 @@ func TestScheduleStart_TemplateAutostartRequirement(t *testing.T) {
|
||||
|
||||
// Then: warning should be shown
|
||||
// In AGPL, this will show all days (enterprise feature defaults to all days allowed)
|
||||
stdout.ExpectMatchContext(ctx, "Warning")
|
||||
stdout.ExpectMatchContext(ctx, "may only autostart")
|
||||
stdout.ExpectMatch(ctx, "Warning")
|
||||
stdout.ExpectMatch(ctx, "may only autostart")
|
||||
})
|
||||
|
||||
t.Run("NoWarningWhenManual", func(t *testing.T) {
|
||||
|
||||
+5
-5
@@ -520,10 +520,10 @@ func TestSecretDelete(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
stdin := testutil.NewWriterAttachedToInvocation(t, logger.Named("stdin"), inv)
|
||||
waiter := clitest.StartWithWaiter(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "Delete secret")
|
||||
stdout.ExpectMatchContext(ctx, "service-token")
|
||||
stdout.ExpectMatch(ctx, "Delete secret")
|
||||
stdout.ExpectMatch(ctx, "service-token")
|
||||
stdin.WriteLine("yes")
|
||||
stdout.ExpectMatchContext(ctx, "Deleted secret")
|
||||
stdout.ExpectMatch(ctx, "Deleted secret")
|
||||
|
||||
require.NoError(t, waiter.Wait())
|
||||
|
||||
@@ -580,8 +580,8 @@ func TestSecretDelete(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
stdin := testutil.NewWriterAttachedToInvocation(t, logger.Named("stdin"), inv)
|
||||
waiter := clitest.StartWithWaiter(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "Delete secret")
|
||||
stdout.ExpectMatchContext(ctx, "missing-secret")
|
||||
stdout.ExpectMatch(ctx, "Delete secret")
|
||||
stdout.ExpectMatch(ctx, "missing-secret")
|
||||
stdin.WriteLine("yes")
|
||||
|
||||
err := waiter.Wait()
|
||||
|
||||
@@ -131,14 +131,14 @@ func TestServerCreateAdminUser(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
clitest.Start(t, inv)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Creating user...")
|
||||
stdout.ExpectMatchContext(ctx, "Generating user SSH key...")
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("Adding user to organization %q (%s) as admin...", org1Name, org1ID.String()))
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("Adding user to organization %q (%s) as admin...", org2Name, org2ID.String()))
|
||||
stdout.ExpectMatchContext(ctx, "User created successfully.")
|
||||
stdout.ExpectMatchContext(ctx, username)
|
||||
stdout.ExpectMatchContext(ctx, email)
|
||||
stdout.ExpectMatchContext(ctx, "****")
|
||||
stdout.ExpectMatch(ctx, "Creating user...")
|
||||
stdout.ExpectMatch(ctx, "Generating user SSH key...")
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("Adding user to organization %q (%s) as admin...", org1Name, org1ID.String()))
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("Adding user to organization %q (%s) as admin...", org2Name, org2ID.String()))
|
||||
stdout.ExpectMatch(ctx, "User created successfully.")
|
||||
stdout.ExpectMatch(ctx, username)
|
||||
stdout.ExpectMatch(ctx, email)
|
||||
stdout.ExpectMatch(ctx, "****")
|
||||
|
||||
verifyUser(t, connectionURL, username, email, password)
|
||||
})
|
||||
@@ -165,10 +165,10 @@ func TestServerCreateAdminUser(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
clitest.Start(t, inv)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "User created successfully.")
|
||||
stdout.ExpectMatchContext(ctx, username)
|
||||
stdout.ExpectMatchContext(ctx, email)
|
||||
stdout.ExpectMatchContext(ctx, "****")
|
||||
stdout.ExpectMatch(ctx, "User created successfully.")
|
||||
stdout.ExpectMatch(ctx, username)
|
||||
stdout.ExpectMatch(ctx, email)
|
||||
stdout.ExpectMatch(ctx, "****")
|
||||
|
||||
verifyUser(t, connectionURL, username, email, password)
|
||||
})
|
||||
@@ -197,19 +197,19 @@ func TestServerCreateAdminUser(t *testing.T) {
|
||||
|
||||
clitest.Start(t, inv)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Username")
|
||||
stdout.ExpectMatch(ctx, "Username")
|
||||
stdin.WriteLine(username)
|
||||
stdout.ExpectMatchContext(ctx, "Email")
|
||||
stdout.ExpectMatch(ctx, "Email")
|
||||
stdin.WriteLine(email)
|
||||
stdout.ExpectMatchContext(ctx, "Password")
|
||||
stdout.ExpectMatch(ctx, "Password")
|
||||
stdin.WriteLine(password)
|
||||
stdout.ExpectMatchContext(ctx, "Confirm password")
|
||||
stdout.ExpectMatch(ctx, "Confirm password")
|
||||
stdin.WriteLine(password)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "User created successfully.")
|
||||
stdout.ExpectMatchContext(ctx, username)
|
||||
stdout.ExpectMatchContext(ctx, email)
|
||||
stdout.ExpectMatchContext(ctx, "****")
|
||||
stdout.ExpectMatch(ctx, "User created successfully.")
|
||||
stdout.ExpectMatch(ctx, username)
|
||||
stdout.ExpectMatch(ctx, email)
|
||||
stdout.ExpectMatch(ctx, "****")
|
||||
|
||||
verifyUser(t, connectionURL, username, email, password)
|
||||
})
|
||||
|
||||
@@ -42,11 +42,11 @@ func TestRegenerateVapidKeypair(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
clitest.Start(t, inv)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Regenerating VAPID keypair...")
|
||||
stdout.ExpectMatchContext(ctx, "This will delete all existing webpush subscriptions.")
|
||||
stdout.ExpectMatchContext(ctx, "Are you sure you want to continue? (y/N)")
|
||||
stdout.ExpectMatch(ctx, "Regenerating VAPID keypair...")
|
||||
stdout.ExpectMatch(ctx, "This will delete all existing webpush subscriptions.")
|
||||
stdout.ExpectMatch(ctx, "Are you sure you want to continue? (y/N)")
|
||||
// don't need to write to stdin because we passed --yes
|
||||
stdout.ExpectMatchContext(ctx, "VAPID keypair regenerated successfully.")
|
||||
stdout.ExpectMatch(ctx, "VAPID keypair regenerated successfully.")
|
||||
|
||||
// Ensure the VAPID keypair was created.
|
||||
keys, err := db.GetWebpushVAPIDKeys(ctx)
|
||||
@@ -85,11 +85,11 @@ func TestRegenerateVapidKeypair(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
clitest.Start(t, inv)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Regenerating VAPID keypair...")
|
||||
stdout.ExpectMatchContext(ctx, "This will delete all existing webpush subscriptions.")
|
||||
stdout.ExpectMatchContext(ctx, "Are you sure you want to continue? (y/N)")
|
||||
stdout.ExpectMatch(ctx, "Regenerating VAPID keypair...")
|
||||
stdout.ExpectMatch(ctx, "This will delete all existing webpush subscriptions.")
|
||||
stdout.ExpectMatch(ctx, "Are you sure you want to continue? (y/N)")
|
||||
// don't need to write to stdin because we passed --yes
|
||||
stdout.ExpectMatchContext(ctx, "VAPID keypair regenerated successfully.")
|
||||
stdout.ExpectMatch(ctx, "VAPID keypair regenerated successfully.")
|
||||
|
||||
// Ensure the VAPID keypair was created.
|
||||
keys, err := db.GetWebpushVAPIDKeys(ctx)
|
||||
|
||||
+28
-28
@@ -241,7 +241,7 @@ func TestServer(t *testing.T) {
|
||||
}()
|
||||
matchCh1 := make(chan string, 1)
|
||||
go func() {
|
||||
matchCh1 <- stdout.ExpectMatchContext(ctx, "Using an ephemeral deployment directory")
|
||||
matchCh1 <- stdout.ExpectMatch(ctx, "Using an ephemeral deployment directory")
|
||||
}()
|
||||
select {
|
||||
case err := <-errCh:
|
||||
@@ -260,7 +260,7 @@ func TestServer(t *testing.T) {
|
||||
matchCh2 := make(chan string, 1)
|
||||
go func() {
|
||||
// The "View the Web UI" log is a decent indicator that the server was successfully started.
|
||||
matchCh2 <- stdout.ExpectMatchContext(ctx, "View the Web UI")
|
||||
matchCh2 <- stdout.ExpectMatch(ctx, "View the Web UI")
|
||||
}()
|
||||
select {
|
||||
case err := <-errCh:
|
||||
@@ -282,7 +282,7 @@ func TestServer(t *testing.T) {
|
||||
err := root.Run()
|
||||
require.NoError(t, err)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "psql")
|
||||
stdout.ExpectMatch(ctx, "psql")
|
||||
})
|
||||
t.Run("BuiltinPostgresURLRaw", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
@@ -522,9 +522,9 @@ func TestServer(t *testing.T) {
|
||||
// Just wait for startup
|
||||
_ = waitAccessURL(t, cfg)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "this may cause unexpected problems when creating workspaces")
|
||||
stdout.ExpectMatchContext(ctx, "View the Web UI:")
|
||||
stdout.ExpectMatchContext(ctx, "http://localhost:3000/")
|
||||
stdout.ExpectMatch(ctx, "this may cause unexpected problems when creating workspaces")
|
||||
stdout.ExpectMatch(ctx, "View the Web UI:")
|
||||
stdout.ExpectMatch(ctx, "http://localhost:3000/")
|
||||
})
|
||||
|
||||
// Validate that an https scheme is prepended to a remote access URL
|
||||
@@ -549,9 +549,9 @@ func TestServer(t *testing.T) {
|
||||
// Just wait for startup
|
||||
_ = waitAccessURL(t, cfg)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "this may cause unexpected problems when creating workspaces")
|
||||
stdout.ExpectMatchContext(ctx, "View the Web UI:")
|
||||
stdout.ExpectMatchContext(ctx, "https://foobarbaz.mydomain")
|
||||
stdout.ExpectMatch(ctx, "this may cause unexpected problems when creating workspaces")
|
||||
stdout.ExpectMatch(ctx, "View the Web UI:")
|
||||
stdout.ExpectMatch(ctx, "https://foobarbaz.mydomain")
|
||||
})
|
||||
|
||||
t.Run("NoWarningWithRemoteAccessURL", func(t *testing.T) {
|
||||
@@ -572,8 +572,8 @@ func TestServer(t *testing.T) {
|
||||
// Just wait for startup
|
||||
_ = waitAccessURL(t, cfg)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "View the Web UI:")
|
||||
stdout.ExpectMatchContext(ctx, "https://google.com")
|
||||
stdout.ExpectMatch(ctx, "View the Web UI:")
|
||||
stdout.ExpectMatch(ctx, "https://google.com")
|
||||
})
|
||||
|
||||
t.Run("NoSchemeAccessURL", func(t *testing.T) {
|
||||
@@ -820,12 +820,12 @@ func TestServer(t *testing.T) {
|
||||
|
||||
// We can't use waitAccessURL as it will only return the HTTP URL.
|
||||
const httpLinePrefix = "Started HTTP listener at"
|
||||
stdout.ExpectMatchContext(ctx, httpLinePrefix)
|
||||
stdout.ExpectMatch(ctx, httpLinePrefix)
|
||||
httpLine := stdout.ReadLine(ctx)
|
||||
httpAddr := strings.TrimSpace(strings.TrimPrefix(httpLine, httpLinePrefix))
|
||||
require.NotEmpty(t, httpAddr)
|
||||
const tlsLinePrefix = "Started TLS/HTTPS listener at "
|
||||
stdout.ExpectMatchContext(ctx, tlsLinePrefix)
|
||||
stdout.ExpectMatch(ctx, tlsLinePrefix)
|
||||
tlsLine := stdout.ReadLine(ctx)
|
||||
tlsAddr := strings.TrimSpace(strings.TrimPrefix(tlsLine, tlsLinePrefix))
|
||||
require.NotEmpty(t, tlsAddr)
|
||||
@@ -963,14 +963,14 @@ func TestServer(t *testing.T) {
|
||||
// We can't use waitAccessURL as it will only return the HTTP URL.
|
||||
if c.httpListener {
|
||||
const httpLinePrefix = "Started HTTP listener at"
|
||||
stdout.ExpectMatchContext(ctx, httpLinePrefix)
|
||||
stdout.ExpectMatch(ctx, httpLinePrefix)
|
||||
httpLine := stdout.ReadLine(ctx)
|
||||
httpAddr = strings.TrimSpace(strings.TrimPrefix(httpLine, httpLinePrefix))
|
||||
require.NotEmpty(t, httpAddr)
|
||||
}
|
||||
if c.tlsListener {
|
||||
const tlsLinePrefix = "Started TLS/HTTPS listener at"
|
||||
stdout.ExpectMatchContext(ctx, tlsLinePrefix)
|
||||
stdout.ExpectMatch(ctx, tlsLinePrefix)
|
||||
tlsLine := stdout.ReadLine(ctx)
|
||||
tlsAddr = strings.TrimSpace(strings.TrimPrefix(tlsLine, tlsLinePrefix))
|
||||
require.NotEmpty(t, tlsAddr)
|
||||
@@ -1054,8 +1054,8 @@ func TestServer(t *testing.T) {
|
||||
// our initial interactions with PostgreSQL are complete. So, ignore errors of that type for this test.
|
||||
startIgnoringPostgresQueryCancel(t, inv)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Started HTTP listener")
|
||||
stdout.ExpectMatchContext(ctx, "http://0.0.0.0:")
|
||||
stdout.ExpectMatch(ctx, "Started HTTP listener")
|
||||
stdout.ExpectMatch(ctx, "http://0.0.0.0:")
|
||||
})
|
||||
|
||||
t.Run("CanListenUnspecifiedv6", func(t *testing.T) {
|
||||
@@ -1074,8 +1074,8 @@ func TestServer(t *testing.T) {
|
||||
// our initial interactions with PostgreSQL are complete. So, ignore errors of that type for this test.
|
||||
startIgnoringPostgresQueryCancel(t, inv)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Started HTTP listener at")
|
||||
stdout.ExpectMatchContext(ctx, "http://[::]:")
|
||||
stdout.ExpectMatch(ctx, "Started HTTP listener at")
|
||||
stdout.ExpectMatch(ctx, "http://[::]:")
|
||||
})
|
||||
|
||||
t.Run("NoAddress", func(t *testing.T) {
|
||||
@@ -1133,7 +1133,7 @@ func TestServer(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
clitest.Start(t, inv.WithContext(ctx))
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "is deprecated")
|
||||
stdout.ExpectMatch(ctx, "is deprecated")
|
||||
|
||||
accessURL := waitAccessURL(t, cfg)
|
||||
require.Equal(t, "http", accessURL.Scheme)
|
||||
@@ -1161,7 +1161,7 @@ func TestServer(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, root)
|
||||
clitest.Start(t, root.WithContext(ctx))
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "is deprecated")
|
||||
stdout.ExpectMatch(ctx, "is deprecated")
|
||||
|
||||
accessURL := waitAccessURL(t, cfg)
|
||||
require.Equal(t, "https", accessURL.Scheme)
|
||||
@@ -1263,7 +1263,7 @@ func TestServer(t *testing.T) {
|
||||
|
||||
// Wait until we see the prometheus address in the logs.
|
||||
addrMatchExpr := `http server listening\s+addr=(\S+)\s+name=prometheus`
|
||||
lineMatch := stdout.ExpectRegexMatchContext(ctx, addrMatchExpr)
|
||||
lineMatch := stdout.ExpectRegexMatch(ctx, addrMatchExpr)
|
||||
promAddr := regexp.MustCompile(addrMatchExpr).FindStringSubmatch(lineMatch)[1]
|
||||
|
||||
testutil.Eventually(ctx, t, func(ctx context.Context) bool {
|
||||
@@ -1324,7 +1324,7 @@ func TestServer(t *testing.T) {
|
||||
|
||||
// Wait until we see the prometheus address in the logs.
|
||||
addrMatchExpr := `http server listening\s+addr=(\S+)\s+name=prometheus`
|
||||
lineMatch := stdout.ExpectRegexMatchContext(ctx, addrMatchExpr)
|
||||
lineMatch := stdout.ExpectRegexMatch(ctx, addrMatchExpr)
|
||||
promAddr := regexp.MustCompile(addrMatchExpr).FindStringSubmatch(lineMatch)[1]
|
||||
|
||||
testutil.Eventually(ctx, t, func(ctx context.Context) bool {
|
||||
@@ -2020,7 +2020,7 @@ func TestServer_Logging_NoParallel(t *testing.T) {
|
||||
|
||||
// Wait for server to listen on HTTP, this is a good
|
||||
// starting point for expecting logs.
|
||||
_ = stdout.ExpectMatchContext(ctx, "Started HTTP listener at")
|
||||
_ = stdout.ExpectMatch(ctx, "Started HTTP listener at")
|
||||
|
||||
loggingWaitFile(t, fi, testutil.WaitSuperLong)
|
||||
})
|
||||
@@ -2057,7 +2057,7 @@ func TestServer_Logging_NoParallel(t *testing.T) {
|
||||
|
||||
// Wait for server to listen on HTTP, this is a good
|
||||
// starting point for expecting logs.
|
||||
_ = stdout.ExpectMatchContext(ctx, "Started HTTP listener at")
|
||||
_ = stdout.ExpectMatch(ctx, "Started HTTP listener at")
|
||||
|
||||
loggingWaitFile(t, fi1, testutil.WaitSuperLong)
|
||||
loggingWaitFile(t, fi2, testutil.WaitSuperLong)
|
||||
@@ -2259,7 +2259,7 @@ func TestServer_GracefulShutdown(t *testing.T) {
|
||||
// It's fair to assume `stopFunc` isn't nil here, because the server
|
||||
// has started and access URL is propagated.
|
||||
stopFunc()
|
||||
stdout.ExpectMatchContext(ctx, "waiting for provisioner jobs to complete")
|
||||
stdout.ExpectMatch(ctx, "waiting for provisioner jobs to complete")
|
||||
err := <-serverErr
|
||||
require.NoError(t, err)
|
||||
}
|
||||
@@ -2503,10 +2503,10 @@ func TestServer_TelemetryDisabled_FinalReport(t *testing.T) {
|
||||
}()
|
||||
|
||||
if opts.waitForSnapshot {
|
||||
stdout.ExpectMatchContext(testutil.Context(t, testutil.WaitLong), "submitted snapshot")
|
||||
stdout.ExpectMatch(testutil.Context(t, testutil.WaitLong), "submitted snapshot")
|
||||
}
|
||||
if opts.waitForTelemetryDisabledCheck {
|
||||
stdout.ExpectMatchContext(testutil.Context(t, testutil.WaitLong), "finished telemetry status check")
|
||||
stdout.ExpectMatch(testutil.Context(t, testutil.WaitLong), "finished telemetry status check")
|
||||
}
|
||||
return errChan, cancelFunc
|
||||
}
|
||||
|
||||
+2
-2
@@ -60,7 +60,7 @@ func TestShow(t *testing.T) {
|
||||
{match: "coder ssh " + workspace.Name},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
if len(m.write) > 0 {
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
@@ -115,7 +115,7 @@ func TestShow(t *testing.T) {
|
||||
{match: "coder ssh " + workspace.Name},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
if len(m.write) > 0 {
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
|
||||
+28
-28
@@ -96,7 +96,7 @@ func TestSSH(t *testing.T) {
|
||||
err := inv.WithContext(ctx).Run()
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
stdout.ExpectMatchContext(ctx, "Waiting")
|
||||
stdout.ExpectMatch(ctx, "Waiting")
|
||||
|
||||
_ = agenttest.New(t, client.URL, agentToken)
|
||||
coderdtest.AwaitWorkspaceAgents(t, client, workspace.ID)
|
||||
@@ -138,7 +138,7 @@ func TestSSH(t *testing.T) {
|
||||
err := inv.WithContext(ctx).Run()
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
stdout.ExpectMatchContext(ctx, "Waiting")
|
||||
stdout.ExpectMatch(ctx, "Waiting")
|
||||
|
||||
_ = agenttest.New(t, client.URL, agentToken)
|
||||
coderdtest.AwaitWorkspaceAgents(t, client, workspace.ID)
|
||||
@@ -271,7 +271,7 @@ func TestSSH(t *testing.T) {
|
||||
}
|
||||
|
||||
for _, stdout := range stdouts {
|
||||
stdout.ExpectMatchContext(ctx, "Workspace was stopped, starting workspace to allow connecting to")
|
||||
stdout.ExpectMatch(ctx, "Workspace was stopped, starting workspace to allow connecting to")
|
||||
}
|
||||
|
||||
// Allow one build to complete.
|
||||
@@ -287,7 +287,7 @@ func TestSSH(t *testing.T) {
|
||||
for _, stdout := range stdouts {
|
||||
// Either allow the command to start the workspace or fail
|
||||
// due to conflict (race), in which case it retries.
|
||||
match := stdout.ExpectRegexMatchContext(ctx, "Waiting for the workspace agent to connect")
|
||||
match := stdout.ExpectRegexMatch(ctx, "Waiting for the workspace agent to connect")
|
||||
if strings.Contains(match, "Unable to start the workspace due to conflict, the workspace may be starting, retrying without autostart...") {
|
||||
foundConflict++
|
||||
}
|
||||
@@ -388,7 +388,7 @@ func TestSSH(t *testing.T) {
|
||||
err := inv.WithContext(ctx).Run()
|
||||
assert.ErrorIs(t, err, cliui.ErrCanceled)
|
||||
})
|
||||
stdout.ExpectMatchContext(ctx, wantURL)
|
||||
stdout.ExpectMatch(ctx, wantURL)
|
||||
cancel()
|
||||
<-cmdDone
|
||||
})
|
||||
@@ -421,14 +421,14 @@ func TestSSH(t *testing.T) {
|
||||
err := inv.WithContext(ctx).Run()
|
||||
assert.Error(t, err)
|
||||
})
|
||||
stdout.ExpectMatchContext(ctx, "Waiting")
|
||||
stdout.ExpectMatch(ctx, "Waiting")
|
||||
|
||||
_ = agenttest.New(t, client.URL, r.AgentToken)
|
||||
coderdtest.AwaitWorkspaceAgents(t, client, r.Workspace.ID)
|
||||
|
||||
// Ensure the agent is connected.
|
||||
stdin.WriteLine("echo hell'o'")
|
||||
stdout.ExpectMatchContext(ctx, "hello")
|
||||
stdout.ExpectMatch(ctx, "hello")
|
||||
|
||||
_ = dbfake.WorkspaceBuild(t, store, r.Workspace).
|
||||
Seed(database.WorkspaceBuild{
|
||||
@@ -1188,12 +1188,12 @@ func TestSSH(t *testing.T) {
|
||||
// Linux: /tmp/auth-agent3167016167/listener.sock
|
||||
// macOS: /var/folders/ng/m1q0wft14hj0t3rtjxrdnzsr0000gn/T/auth-agent3245553419/listener.sock
|
||||
stdin.WriteLine(`env | grep SSH_AUTH_SOCK=`)
|
||||
stdout.ExpectMatchContext(ctx, "SSH_AUTH_SOCK=")
|
||||
stdout.ExpectMatch(ctx, "SSH_AUTH_SOCK=")
|
||||
// Ensure that ssh-add lists our key.
|
||||
stdin.WriteLine("ssh-add -L")
|
||||
keys, err := kr.List()
|
||||
require.NoError(t, err, "list keys failed")
|
||||
stdout.ExpectMatchContext(ctx, keys[0].String())
|
||||
stdout.ExpectMatch(ctx, keys[0].String())
|
||||
|
||||
// And we're done.
|
||||
stdin.WriteLine("exit")
|
||||
@@ -1295,7 +1295,7 @@ func TestSSH(t *testing.T) {
|
||||
// Ensure the SSH connection is ready by testing the shell
|
||||
// input/output.
|
||||
stdin.WriteLine("echo $foo $baz")
|
||||
stdout.ExpectMatchContext(ctx, "bar qux")
|
||||
stdout.ExpectMatch(ctx, "bar qux")
|
||||
|
||||
// And we're done.
|
||||
stdin.WriteLine("exit")
|
||||
@@ -1342,7 +1342,7 @@ func TestSSH(t *testing.T) {
|
||||
// Ensure the SSH connection is ready by testing the shell
|
||||
// input/output.
|
||||
stdin.WriteLine("echo ping' 'pong")
|
||||
stdout.ExpectMatchContext(ctx, "ping pong")
|
||||
stdout.ExpectMatch(ctx, "ping pong")
|
||||
|
||||
// Start the listener on the "local machine".
|
||||
l, err := net.Listen("unix", localSock)
|
||||
@@ -1463,7 +1463,7 @@ func TestSSH(t *testing.T) {
|
||||
// Ensure the SSH connection is ready by testing the shell
|
||||
// input/output.
|
||||
stdin.WriteLine("echo ping' 'pong")
|
||||
stdout.ExpectMatchContext(ctx, "ping pong")
|
||||
stdout.ExpectMatch(ctx, "ping pong")
|
||||
|
||||
d := &net.Dialer{}
|
||||
fd, err := d.DialContext(ctx, "unix", remoteSock)
|
||||
@@ -1557,7 +1557,7 @@ func TestSSH(t *testing.T) {
|
||||
// Ensure the SSH connection is ready by testing the shell
|
||||
// input/output.
|
||||
stdin.WriteLine("echo ping' 'pong")
|
||||
stdout.ExpectMatchContext(ctx, "ping pong")
|
||||
stdout.ExpectMatch(ctx, "ping pong")
|
||||
|
||||
for i, sock := range sockets {
|
||||
// Start the listener on the "local machine".
|
||||
@@ -1619,7 +1619,7 @@ func TestSSH(t *testing.T) {
|
||||
stdin := testutil.NewWriterAttachedToInvocation(t, logger.Named("stdin"), inv)
|
||||
w := clitest.StartWithWaiter(t, inv)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Waiting")
|
||||
stdout.ExpectMatch(ctx, "Waiting")
|
||||
|
||||
agenttest.New(t, client.URL, agentToken)
|
||||
coderdtest.AwaitWorkspaceAgents(t, client, workspace.ID)
|
||||
@@ -1726,7 +1726,7 @@ func TestSSH(t *testing.T) {
|
||||
err := inv.WithContext(ctx).Run()
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
stdout.ExpectMatchContext(ctx, "Waiting")
|
||||
stdout.ExpectMatch(ctx, "Waiting")
|
||||
|
||||
_ = agenttest.New(t, client.URL, agentToken)
|
||||
coderdtest.AwaitWorkspaceAgents(t, client, workspace.ID)
|
||||
@@ -2013,21 +2013,21 @@ Expire-Date: 0
|
||||
_ = invOut.Peek(ctx, 1)
|
||||
|
||||
invIn.WriteLine("echo hello 'world'")
|
||||
invOut.ExpectMatchContext(ctx, "hello world")
|
||||
invOut.ExpectMatch(ctx, "hello world")
|
||||
|
||||
// Check the GNUPGHOME was correctly inherited via shell.
|
||||
invIn.WriteLine("env && echo env-''-command-done")
|
||||
match := invOut.ExpectMatchContext(ctx, "env--command-done")
|
||||
match := invOut.ExpectMatch(ctx, "env--command-done")
|
||||
require.Contains(t, match, "GNUPGHOME="+gnupgHomeWorkspace, match)
|
||||
|
||||
// Get the agent extra socket path in the "workspace" via shell.
|
||||
invIn.WriteLine("gpgconf --list-dir agent-socket && echo gpgconf-''-agentsocket-command-done")
|
||||
invOut.ExpectMatchContext(ctx, workspaceAgentSocketPath)
|
||||
invOut.ExpectMatchContext(ctx, "gpgconf--agentsocket-command-done")
|
||||
invOut.ExpectMatch(ctx, workspaceAgentSocketPath)
|
||||
invOut.ExpectMatch(ctx, "gpgconf--agentsocket-command-done")
|
||||
|
||||
// List the keys in the "workspace".
|
||||
invIn.WriteLine("gpg --list-keys && echo gpg-''-listkeys-command-done")
|
||||
listKeysOutput := invOut.ExpectMatchContext(ctx, "gpg--listkeys-command-done")
|
||||
listKeysOutput := invOut.ExpectMatch(ctx, "gpg--listkeys-command-done")
|
||||
require.Contains(t, listKeysOutput, "[ultimate] Coder Test <test@coder.com>")
|
||||
// It's fine that this key is expired. We're just testing that the key trust
|
||||
// gets synced properly.
|
||||
@@ -2037,10 +2037,10 @@ Expire-Date: 0
|
||||
// working as expected, since the workspace doesn't have access to the
|
||||
// private key directly and must use the forwarded agent.
|
||||
invIn.WriteLine("echo 'hello world' | gpg --clearsign && echo gpg-''-sign-command-done")
|
||||
invOut.ExpectMatchContext(ctx, "BEGIN PGP SIGNED MESSAGE")
|
||||
invOut.ExpectMatchContext(ctx, "Hash:")
|
||||
invOut.ExpectMatchContext(ctx, "hello world")
|
||||
invOut.ExpectMatchContext(ctx, "gpg--sign-command-done")
|
||||
invOut.ExpectMatch(ctx, "BEGIN PGP SIGNED MESSAGE")
|
||||
invOut.ExpectMatch(ctx, "Hash:")
|
||||
invOut.ExpectMatch(ctx, "hello world")
|
||||
invOut.ExpectMatch(ctx, "gpg--sign-command-done")
|
||||
|
||||
// And we're done.
|
||||
invIn.WriteLine("exit")
|
||||
@@ -2099,9 +2099,9 @@ func TestSSH_Container(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
|
||||
stdout.ExpectMatchContext(ctx, " #")
|
||||
stdout.ExpectMatch(ctx, " #")
|
||||
stdin.WriteLine("hostname")
|
||||
stdout.ExpectMatchContext(ctx, ct.Container.Config.Hostname)
|
||||
stdout.ExpectMatch(ctx, ct.Container.Config.Hostname)
|
||||
stdin.WriteLine("exit")
|
||||
<-cmdDone
|
||||
})
|
||||
@@ -2142,8 +2142,8 @@ func TestSSH_Container(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("Container not found: %q", cID))
|
||||
stdout.ExpectMatchContext(ctx, "Available containers: [something_completely_different]")
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("Container not found: %q", cID))
|
||||
stdout.ExpectMatch(ctx, "Available containers: [something_completely_different]")
|
||||
<-cmdDone
|
||||
})
|
||||
|
||||
|
||||
+14
-14
@@ -148,7 +148,7 @@ func TestStart(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
|
||||
if value != "" {
|
||||
stdin.WriteLine(value)
|
||||
@@ -202,7 +202,7 @@ func TestStart(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "workspace has been started")
|
||||
stdout.ExpectMatch(ctx, "workspace has been started")
|
||||
<-doneChan
|
||||
|
||||
// Verify if ephemeral parameter is set
|
||||
@@ -256,7 +256,7 @@ func TestStartWithParameters(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "workspace has been started")
|
||||
stdout.ExpectMatch(ctx, "workspace has been started")
|
||||
<-doneChan
|
||||
|
||||
// Verify if immutable parameter is set
|
||||
@@ -309,9 +309,9 @@ func TestStartWithParameters(t *testing.T) {
|
||||
}()
|
||||
|
||||
newValue := "xyz"
|
||||
stdout.ExpectMatchContext(ctx, mutableParameterName)
|
||||
stdout.ExpectMatch(ctx, mutableParameterName)
|
||||
stdin.WriteLine(newValue)
|
||||
stdout.ExpectMatchContext(ctx, "workspace has been started")
|
||||
stdout.ExpectMatch(ctx, "workspace has been started")
|
||||
<-doneChan
|
||||
|
||||
// Verify that the updated values are persisted.
|
||||
@@ -371,7 +371,7 @@ func TestStartUseParameterDefaults(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "workspace has been started")
|
||||
stdout.ExpectMatch(ctx, "workspace has been started")
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
|
||||
// Verify the new parameter was resolved to its default.
|
||||
@@ -451,7 +451,7 @@ func TestStartAutoUpdate(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, stringParameterName)
|
||||
stdout.ExpectMatch(ctx, stringParameterName)
|
||||
stdin.WriteLine(stringParameterValue)
|
||||
<-doneChan
|
||||
|
||||
@@ -483,7 +483,7 @@ func TestStart_AlreadyRunning(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "workspace is already running")
|
||||
stdout.ExpectMatch(ctx, "workspace is already running")
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
}
|
||||
|
||||
@@ -512,10 +512,10 @@ func TestStart_Starting(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "workspace is already starting")
|
||||
stdout.ExpectMatch(ctx, "workspace is already starting")
|
||||
|
||||
_ = dbfake.JobComplete(t, store, r.Build.JobID).Pubsub(ps).Do()
|
||||
stdout.ExpectMatchContext(ctx, "workspace has been started")
|
||||
stdout.ExpectMatch(ctx, "workspace has been started")
|
||||
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
}
|
||||
@@ -549,7 +549,7 @@ func TestStart_NoWait(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "workspace has been started in no-wait mode")
|
||||
stdout.ExpectMatch(ctx, "workspace has been started in no-wait mode")
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
}
|
||||
|
||||
@@ -582,7 +582,7 @@ func TestStart_WithReason(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "workspace has been started")
|
||||
stdout.ExpectMatch(ctx, "workspace has been started")
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
|
||||
workspace = coderdtest.MustWorkspace(t, member, workspace.ID)
|
||||
@@ -635,8 +635,8 @@ func TestStart_FailedStartCleansUp(t *testing.T) {
|
||||
}()
|
||||
|
||||
// The CLI should detect the failed start and clean up first.
|
||||
stdout.ExpectMatchContext(ctx, "Cleaning up before retrying")
|
||||
stdout.ExpectMatchContext(ctx, "workspace has been started")
|
||||
stdout.ExpectMatch(ctx, "Cleaning up before retrying")
|
||||
stdout.ExpectMatch(ctx, "workspace has been started")
|
||||
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ func TestExpTaskDelete(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
stdin := testutil.NewWriterAttachedToInvocation(t, logger.Named("stdin"), inv)
|
||||
w := clitest.StartWithWaiter(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "Delete these tasks:")
|
||||
stdout.ExpectMatch(ctx, "Delete these tasks:")
|
||||
stdin.WriteLine("yes")
|
||||
runErr = w.Wait()
|
||||
outBuf.Write(stdout.ReadAll())
|
||||
|
||||
@@ -77,7 +77,7 @@ func TestExpTaskList(t *testing.T) {
|
||||
err := inv.WithContext(ctx).Run()
|
||||
require.NoError(t, err)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "No tasks found.")
|
||||
stdout.ExpectMatch(ctx, "No tasks found.")
|
||||
})
|
||||
|
||||
t.Run("Single_Table", func(t *testing.T) {
|
||||
@@ -102,9 +102,9 @@ func TestExpTaskList(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// Validate the table includes the task and status.
|
||||
stdout.ExpectMatchContext(ctx, task.Name)
|
||||
stdout.ExpectMatchContext(ctx, "initializing")
|
||||
stdout.ExpectMatchContext(ctx, wantPrompt)
|
||||
stdout.ExpectMatch(ctx, task.Name)
|
||||
stdout.ExpectMatch(ctx, "initializing")
|
||||
stdout.ExpectMatch(ctx, wantPrompt)
|
||||
})
|
||||
|
||||
t.Run("StatusFilter_JSON", func(t *testing.T) {
|
||||
@@ -162,7 +162,7 @@ func TestExpTaskList(t *testing.T) {
|
||||
err := inv.WithContext(ctx).Run()
|
||||
require.NoError(t, err)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, task.Name)
|
||||
stdout.ExpectMatch(ctx, task.Name)
|
||||
})
|
||||
|
||||
t.Run("Quiet", func(t *testing.T) {
|
||||
|
||||
@@ -82,11 +82,11 @@ func TestExpTaskPause(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
stdin := testutil.NewWriterAttachedToInvocation(t, logger.Named("stdin"), inv)
|
||||
w := clitest.StartWithWaiter(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "Pause task")
|
||||
stdout.ExpectMatch(ctx, "Pause task")
|
||||
stdin.WriteLine("yes")
|
||||
|
||||
// Then: We expect the task to be paused
|
||||
stdout.ExpectMatchContext(ctx, "has been paused")
|
||||
stdout.ExpectMatch(ctx, "has been paused")
|
||||
require.NoError(t, w.Wait())
|
||||
|
||||
updated, err := setup.userClient.TaskByIdentifier(ctx, setup.task.Name)
|
||||
@@ -112,7 +112,7 @@ func TestExpTaskPause(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
stdin := testutil.NewWriterAttachedToInvocation(t, logger.Named("stdin"), inv)
|
||||
w := clitest.StartWithWaiter(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "Pause task")
|
||||
stdout.ExpectMatch(ctx, "Pause task")
|
||||
stdin.WriteLine("no")
|
||||
require.Error(t, w.Wait())
|
||||
|
||||
|
||||
@@ -115,11 +115,11 @@ func TestExpTaskResume(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
stdin := testutil.NewWriterAttachedToInvocation(t, logger.Named("stdin"), inv)
|
||||
w := clitest.StartWithWaiter(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "Resume task")
|
||||
stdout.ExpectMatch(ctx, "Resume task")
|
||||
stdin.WriteLine("yes")
|
||||
|
||||
// Then: We expect the task to be resumed
|
||||
stdout.ExpectMatchContext(ctx, "has been resumed")
|
||||
stdout.ExpectMatch(ctx, "has been resumed")
|
||||
require.NoError(t, w.Wait())
|
||||
|
||||
updated, err := setup.userClient.TaskByIdentifier(ctx, setup.task.Name)
|
||||
@@ -146,7 +146,7 @@ func TestExpTaskResume(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
stdin := testutil.NewWriterAttachedToInvocation(t, logger.Named("stdin"), inv)
|
||||
w := clitest.StartWithWaiter(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "Resume task")
|
||||
stdout.ExpectMatch(ctx, "Resume task")
|
||||
stdin.WriteLine("no")
|
||||
require.Error(t, w.Wait())
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ func Test_TaskSend(t *testing.T) {
|
||||
// Wait for the command to observe the initializing state and
|
||||
// start watching the workspace build. This ensures the command
|
||||
// has entered the waiting code path.
|
||||
stdout.ExpectMatchContext(ctx, "Queued")
|
||||
stdout.ExpectMatch(ctx, "Queued")
|
||||
|
||||
// Connect a new agent so the task can transition to active.
|
||||
agentClient := agentsdk.New(setup.userClient.URL, agentsdk.WithFixedToken(setup.agentToken))
|
||||
@@ -208,7 +208,7 @@ func Test_TaskSend(t *testing.T) {
|
||||
|
||||
// Wait for the command to observe the paused state, trigger
|
||||
// a resume, and start watching the workspace build.
|
||||
stdout.ExpectMatchContext(ctx, "Queued")
|
||||
stdout.ExpectMatch(ctx, "Queued")
|
||||
|
||||
// Connect a new agent so the task can transition to active.
|
||||
agentClient := agentsdk.New(setup.userClient.URL, agentsdk.WithFixedToken(setup.agentToken))
|
||||
@@ -265,7 +265,7 @@ func Test_TaskSend(t *testing.T) {
|
||||
|
||||
// Wait for the command to enter the build-watching phase
|
||||
// of waitForTaskIdle.
|
||||
stdout.ExpectMatchContext(ctx, "Waiting for task to become idle")
|
||||
stdout.ExpectMatch(ctx, "Waiting for task to become idle")
|
||||
|
||||
// Wait for ticker creation and release it.
|
||||
tickCall := tickTrap.MustWait(ctx)
|
||||
|
||||
@@ -52,7 +52,7 @@ func TestCliTemplateCreate(t *testing.T) {
|
||||
{match: "Confirm create?", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
if len(m.write) > 0 {
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
@@ -92,7 +92,7 @@ func TestCliTemplateCreate(t *testing.T) {
|
||||
{match: "Upload", write: "no"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
if len(m.write) > 0 {
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
@@ -248,7 +248,7 @@ func TestCliTemplateCreate(t *testing.T) {
|
||||
{match: "Confirm create?", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
if len(m.write) > 0 {
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
@@ -288,7 +288,7 @@ func TestCliTemplateCreate(t *testing.T) {
|
||||
{match: "Confirm create?", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
if len(m.write) > 0 {
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ func TestTemplateDelete(t *testing.T) {
|
||||
execDone <- inv.Run()
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("Delete these templates: %s?", pretty.Sprint(cliui.DefaultStyles.Code, template.Name)))
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("Delete these templates: %s?", pretty.Sprint(cliui.DefaultStyles.Code, template.Name)))
|
||||
stdin.WriteLine("yes")
|
||||
|
||||
require.NoError(t, <-execDone)
|
||||
@@ -107,7 +107,7 @@ func TestTemplateDelete(t *testing.T) {
|
||||
execDone <- inv.Run()
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx,
|
||||
stdout.ExpectMatch(ctx,
|
||||
fmt.Sprintf("Delete these templates: %s?",
|
||||
pretty.Sprint(cliui.DefaultStyles.Code, strings.Join(templateNames, ", "))))
|
||||
stdin.WriteLine("yes")
|
||||
|
||||
@@ -52,7 +52,7 @@ func TestTemplateList(t *testing.T) {
|
||||
require.NoError(t, <-errC)
|
||||
|
||||
for _, name := range templatesList {
|
||||
stdout.ExpectMatchContext(ctx, name)
|
||||
stdout.ExpectMatch(ctx, name)
|
||||
}
|
||||
})
|
||||
t.Run("ListTemplatesJSON", func(t *testing.T) {
|
||||
@@ -105,7 +105,7 @@ func TestTemplateList(t *testing.T) {
|
||||
|
||||
require.NoError(t, <-errC)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "No templates found")
|
||||
stdout.ExpectMatchContext(ctx, "Create one:")
|
||||
stdout.ExpectMatch(ctx, "No templates found")
|
||||
stdout.ExpectMatch(ctx, "Create one:")
|
||||
})
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ func TestTemplatePresets(t *testing.T) {
|
||||
|
||||
// Should return a message when no presets are found for the given template and version.
|
||||
notFoundMessage := fmt.Sprintf("No presets found for template %q and template-version %q.", template.Name, version.Name)
|
||||
stdout.ExpectRegexMatchContext(ctx, notFoundMessage)
|
||||
stdout.ExpectRegexMatch(ctx, notFoundMessage)
|
||||
})
|
||||
|
||||
t.Run("ListsPresetsForDefaultTemplateVersion", func(t *testing.T) {
|
||||
@@ -119,11 +119,11 @@ func TestTemplatePresets(t *testing.T) {
|
||||
|
||||
// Should: return the active version's presets sorted by name
|
||||
message := fmt.Sprintf("Showing presets for template %q and template version %q.", template.Name, version.Name)
|
||||
stdout.ExpectMatchContext(ctx, message)
|
||||
stdout.ExpectRegexMatchContext(ctx, `preset-default\s+k1=v2\s+true\s+0`)
|
||||
stdout.ExpectMatch(ctx, message)
|
||||
stdout.ExpectRegexMatch(ctx, `preset-default\s+k1=v2\s+true\s+0`)
|
||||
// The parameter order is not guaranteed in the output, so we match both possible orders
|
||||
stdout.ExpectRegexMatchContext(ctx, `preset-multiple-params\s+(k1=v1,k2=v2)|(k2=v2,k1=v1)\s+false\s+-`)
|
||||
stdout.ExpectRegexMatchContext(ctx, `preset-prebuilds\s+Preset without parameters and 2 prebuild instances.\s+\s+false\s+2`)
|
||||
stdout.ExpectRegexMatch(ctx, `preset-multiple-params\s+(k1=v1,k2=v2)|(k2=v2,k1=v1)\s+false\s+-`)
|
||||
stdout.ExpectRegexMatch(ctx, `preset-prebuilds\s+Preset without parameters and 2 prebuild instances.\s+\s+false\s+2`)
|
||||
})
|
||||
|
||||
t.Run("ListsPresetsForSpecifiedTemplateVersion", func(t *testing.T) {
|
||||
@@ -211,11 +211,11 @@ func TestTemplatePresets(t *testing.T) {
|
||||
|
||||
// Should: return the specified version's presets sorted by name
|
||||
message := fmt.Sprintf("Showing presets for template %q and template version %q.", template.Name, version.Name)
|
||||
stdout.ExpectMatchContext(ctx, message)
|
||||
stdout.ExpectRegexMatchContext(ctx, `preset-default\s+k1=v2\s+true\s+0`)
|
||||
stdout.ExpectMatch(ctx, message)
|
||||
stdout.ExpectRegexMatch(ctx, `preset-default\s+k1=v2\s+true\s+0`)
|
||||
// The parameter order is not guaranteed in the output, so we match both possible orders
|
||||
stdout.ExpectRegexMatchContext(ctx, `preset-multiple-params\s+(k1=v1,k2=v2)|(k2=v2,k1=v1)\s+false\s+-`)
|
||||
stdout.ExpectRegexMatchContext(ctx, `preset-prebuilds\s+Preset without parameters and 2 prebuild instances.\s+\s+false\s+2`)
|
||||
stdout.ExpectRegexMatch(ctx, `preset-multiple-params\s+(k1=v1,k2=v2)|(k2=v2,k1=v1)\s+false\s+-`)
|
||||
stdout.ExpectRegexMatch(ctx, `preset-prebuilds\s+Preset without parameters and 2 prebuild instances.\s+\s+false\s+2`)
|
||||
})
|
||||
|
||||
t.Run("ListsPresetsJSON", func(t *testing.T) {
|
||||
|
||||
@@ -395,7 +395,7 @@ func TestTemplatePull_FolderConflict(t *testing.T) {
|
||||
|
||||
waiter := clitest.StartWithWaiter(t, inv)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "not empty")
|
||||
stdout.ExpectMatch(ctx, "not empty")
|
||||
stdin.WriteLine("no")
|
||||
|
||||
waiter.RequireError()
|
||||
|
||||
+29
-29
@@ -65,7 +65,7 @@ func TestTemplatePush(t *testing.T) {
|
||||
{match: "Upload", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
|
||||
@@ -154,7 +154,7 @@ func TestTemplatePush(t *testing.T) {
|
||||
inv = inv.WithContext(ctx)
|
||||
w := clitest.StartWithWaiter(t, inv)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, tt.wantMatch)
|
||||
stdout.ExpectMatch(ctx, tt.wantMatch)
|
||||
|
||||
w.RequireSuccess()
|
||||
|
||||
@@ -209,7 +209,7 @@ func TestTemplatePush(t *testing.T) {
|
||||
{match: "Upload", write: "no"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
if m.write != "" {
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
@@ -298,7 +298,7 @@ func TestTemplatePush(t *testing.T) {
|
||||
{match: "Upload", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
|
||||
@@ -361,7 +361,7 @@ func TestTemplatePush(t *testing.T) {
|
||||
{match: "Upload", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
|
||||
@@ -568,7 +568,7 @@ func TestTemplatePush(t *testing.T) {
|
||||
}, testutil.WaitShort, testutil.IntervalFast)
|
||||
|
||||
if tt.expectOutput != "" {
|
||||
stdout.ExpectMatchContext(ctx, tt.expectOutput)
|
||||
stdout.ExpectMatch(ctx, tt.expectOutput)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -627,7 +627,7 @@ func TestTemplatePush(t *testing.T) {
|
||||
{match: "Upload", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
|
||||
@@ -695,7 +695,7 @@ func TestTemplatePush(t *testing.T) {
|
||||
{match: "Upload", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
|
||||
@@ -754,7 +754,7 @@ func TestTemplatePush(t *testing.T) {
|
||||
{match: "Upload", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
|
||||
@@ -831,7 +831,7 @@ func TestTemplatePush(t *testing.T) {
|
||||
{match: "Upload", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
|
||||
@@ -896,7 +896,7 @@ func TestTemplatePush(t *testing.T) {
|
||||
{match: "Upload", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
|
||||
@@ -963,7 +963,7 @@ func TestTemplatePush(t *testing.T) {
|
||||
{match: "Upload", write: "yes"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
|
||||
@@ -1018,7 +1018,7 @@ func TestTemplatePush(t *testing.T) {
|
||||
{match: "template has been created"},
|
||||
}
|
||||
for _, m := range matches {
|
||||
stdout.ExpectMatchContext(ctx, m.match)
|
||||
stdout.ExpectMatch(ctx, m.match)
|
||||
if m.write != "" {
|
||||
stdin.WriteLine(m.write)
|
||||
}
|
||||
@@ -1115,23 +1115,23 @@ func TestTemplatePush(t *testing.T) {
|
||||
w := clitest.StartWithWaiter(t, inv)
|
||||
|
||||
// Select "Yes" for the "Upload <template_path>" prompt
|
||||
stdout.ExpectMatchContext(ctx, "Upload")
|
||||
stdout.ExpectMatch(ctx, "Upload")
|
||||
stdin.WriteLine("yes")
|
||||
|
||||
// Variables are prompted in alphabetical order.
|
||||
// Boolean variable automatically selects the first option ("true")
|
||||
stdout.ExpectMatchContext(ctx, "var.bool_var")
|
||||
stdout.ExpectMatch(ctx, "var.bool_var")
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "var.number_var")
|
||||
stdout.ExpectMatchContext(ctx, "Enter value:")
|
||||
stdout.ExpectMatch(ctx, "var.number_var")
|
||||
stdout.ExpectMatch(ctx, "Enter value:")
|
||||
stdin.WriteLine("42")
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "var.sensitive_var")
|
||||
stdout.ExpectMatchContext(ctx, "Enter value:")
|
||||
stdout.ExpectMatch(ctx, "var.sensitive_var")
|
||||
stdout.ExpectMatch(ctx, "Enter value:")
|
||||
stdin.WriteLine("secret-value")
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "var.string_var")
|
||||
stdout.ExpectMatchContext(ctx, "Enter value:")
|
||||
stdout.ExpectMatch(ctx, "var.string_var")
|
||||
stdout.ExpectMatch(ctx, "Enter value:")
|
||||
stdin.WriteLine("test-string")
|
||||
|
||||
w.RequireSuccess()
|
||||
@@ -1164,13 +1164,13 @@ func TestTemplatePush(t *testing.T) {
|
||||
w := clitest.StartWithWaiter(t, inv)
|
||||
|
||||
// Select "Yes" for the "Upload <template_path>" prompt
|
||||
stdout.ExpectMatchContext(ctx, "Upload")
|
||||
stdout.ExpectMatch(ctx, "Upload")
|
||||
stdin.WriteLine("yes")
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "var.number_var")
|
||||
stdout.ExpectMatch(ctx, "var.number_var")
|
||||
|
||||
stdin.WriteLine("not-a-number")
|
||||
stdout.ExpectMatchContext(ctx, "must be a valid number")
|
||||
stdout.ExpectMatch(ctx, "must be a valid number")
|
||||
|
||||
stdin.WriteLine("123.45")
|
||||
|
||||
@@ -1209,10 +1209,10 @@ func TestTemplatePush(t *testing.T) {
|
||||
w := clitest.StartWithWaiter(t, inv)
|
||||
|
||||
// Select "Yes" for the "Upload <template_path>" prompt
|
||||
stdout.ExpectMatchContext(ctx, "Upload")
|
||||
stdout.ExpectMatch(ctx, "Upload")
|
||||
stdin.WriteLine("yes")
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "var.without_default")
|
||||
stdout.ExpectMatch(ctx, "var.without_default")
|
||||
stdin.WriteLine("test-value")
|
||||
|
||||
w.RequireSuccess()
|
||||
@@ -1280,12 +1280,12 @@ cli_overrides_file_var: from-file`)
|
||||
w := clitest.StartWithWaiter(t, inv)
|
||||
|
||||
// Select "Yes" for the "Upload <template_path>" prompt
|
||||
stdout.ExpectMatchContext(ctx, "Upload")
|
||||
stdout.ExpectMatch(ctx, "Upload")
|
||||
stdin.WriteLine("yes")
|
||||
|
||||
// Only check for prompt_var, other variables should not prompt
|
||||
stdout.ExpectMatchContext(ctx, "var.prompt_var")
|
||||
stdout.ExpectMatchContext(ctx, "Enter value:")
|
||||
stdout.ExpectMatch(ctx, "var.prompt_var")
|
||||
stdout.ExpectMatch(ctx, "Enter value:")
|
||||
stdin.WriteLine("from-prompt")
|
||||
|
||||
w.RequireSuccess()
|
||||
|
||||
@@ -40,9 +40,9 @@ func TestTemplateVersions(t *testing.T) {
|
||||
|
||||
require.NoError(t, <-errC)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, version.Name)
|
||||
stdout.ExpectMatchContext(ctx, version.CreatedBy.Username)
|
||||
stdout.ExpectMatchContext(ctx, "Active")
|
||||
stdout.ExpectMatch(ctx, version.Name)
|
||||
stdout.ExpectMatch(ctx, version.CreatedBy.Username)
|
||||
stdout.ExpectMatch(ctx, "Active")
|
||||
})
|
||||
|
||||
t.Run("ListVersionsJSON", func(t *testing.T) {
|
||||
|
||||
+28
-28
@@ -273,7 +273,7 @@ func TestUpdateWithRichParameters(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
if value != "" {
|
||||
stdin.WriteLine(value)
|
||||
}
|
||||
@@ -328,7 +328,7 @@ func TestUpdateWithRichParameters(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
if value != "" {
|
||||
stdin.WriteLine(value)
|
||||
}
|
||||
@@ -383,7 +383,7 @@ func TestUpdateWithRichParameters(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Planning workspace")
|
||||
stdout.ExpectMatch(ctx, "Planning workspace")
|
||||
<-doneChan
|
||||
|
||||
// Verify if ephemeral parameter is set
|
||||
@@ -462,14 +462,14 @@ func TestUpdateValidateRichParameters(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, stringParameterName)
|
||||
stdout.ExpectMatchContext(ctx, "> Enter a value: ")
|
||||
stdout.ExpectMatch(ctx, stringParameterName)
|
||||
stdout.ExpectMatch(ctx, "> Enter a value: ")
|
||||
stdin.WriteLine("$$")
|
||||
stdout.ExpectMatchContext(ctx, "does not match")
|
||||
stdout.ExpectMatchContext(ctx, "> Enter a value: ")
|
||||
stdout.ExpectMatch(ctx, "does not match")
|
||||
stdout.ExpectMatch(ctx, "> Enter a value: ")
|
||||
stdin.WriteLine("ABC")
|
||||
stdout.ExpectMatchContext(ctx, "does not match")
|
||||
stdout.ExpectMatchContext(ctx, "> Enter a value: ")
|
||||
stdout.ExpectMatch(ctx, "does not match")
|
||||
stdout.ExpectMatch(ctx, "> Enter a value: ")
|
||||
stdin.WriteLine("abc")
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
})
|
||||
@@ -510,14 +510,14 @@ func TestUpdateValidateRichParameters(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, numberParameterName)
|
||||
stdout.ExpectMatchContext(ctx, "> Enter a value: ")
|
||||
stdout.ExpectMatch(ctx, numberParameterName)
|
||||
stdout.ExpectMatch(ctx, "> Enter a value: ")
|
||||
stdin.WriteLine("12")
|
||||
stdout.ExpectMatchContext(ctx, "is more than the maximum")
|
||||
stdout.ExpectMatchContext(ctx, "> Enter a value: ")
|
||||
stdout.ExpectMatch(ctx, "is more than the maximum")
|
||||
stdout.ExpectMatch(ctx, "> Enter a value: ")
|
||||
stdin.WriteLine("notanumber")
|
||||
stdout.ExpectMatchContext(ctx, "is not a number")
|
||||
stdout.ExpectMatchContext(ctx, "> Enter a value: ")
|
||||
stdout.ExpectMatch(ctx, "is not a number")
|
||||
stdout.ExpectMatch(ctx, "> Enter a value: ")
|
||||
stdin.WriteLine("8")
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
})
|
||||
@@ -558,14 +558,14 @@ func TestUpdateValidateRichParameters(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, boolParameterName)
|
||||
stdout.ExpectMatchContext(ctx, "> Enter a value: ")
|
||||
stdout.ExpectMatch(ctx, boolParameterName)
|
||||
stdout.ExpectMatch(ctx, "> Enter a value: ")
|
||||
stdin.WriteLine("cat")
|
||||
stdout.ExpectMatchContext(ctx, "boolean value can be either \"true\" or \"false\"")
|
||||
stdout.ExpectMatchContext(ctx, "> Enter a value: ")
|
||||
stdout.ExpectMatch(ctx, "boolean value can be either \"true\" or \"false\"")
|
||||
stdout.ExpectMatch(ctx, "> Enter a value: ")
|
||||
stdin.WriteLine("dog")
|
||||
stdout.ExpectMatchContext(ctx, "boolean value can be either \"true\" or \"false\"")
|
||||
stdout.ExpectMatchContext(ctx, "> Enter a value: ")
|
||||
stdout.ExpectMatch(ctx, "boolean value can be either \"true\" or \"false\"")
|
||||
stdout.ExpectMatch(ctx, "> Enter a value: ")
|
||||
stdin.WriteLine("false")
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
})
|
||||
@@ -634,7 +634,7 @@ func TestUpdateValidateRichParameters(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
|
||||
if value != "" {
|
||||
stdin.WriteLine(value)
|
||||
@@ -699,7 +699,7 @@ func TestUpdateValidateRichParameters(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Planning workspace...")
|
||||
stdout.ExpectMatch(ctx, "Planning workspace...")
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
})
|
||||
|
||||
@@ -798,7 +798,7 @@ func TestUpdateValidateRichParameters(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
|
||||
if value != "" {
|
||||
stdin.WriteLine(value)
|
||||
@@ -862,7 +862,7 @@ func TestUpdateValidateRichParameters(t *testing.T) {
|
||||
}
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
}
|
||||
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
@@ -928,7 +928,7 @@ func TestUpdateValidateRichParameters(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
|
||||
if value != "" {
|
||||
stdin.WriteLine(value)
|
||||
@@ -1002,7 +1002,7 @@ func TestUpdateValidateRichParameters(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
|
||||
if value != "" {
|
||||
stdin.WriteLine(value)
|
||||
@@ -1067,7 +1067,7 @@ func TestUpdateValidateRichParameters(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
|
||||
stdout.ExpectMatchContext(ctx, "Planning workspace")
|
||||
stdout.ExpectMatch(ctx, "Planning workspace")
|
||||
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ func TestUserDelete(t *testing.T) {
|
||||
errC <- inv.Run()
|
||||
}()
|
||||
require.NoError(t, <-errC)
|
||||
stdout.ExpectMatchContext(ctx, "coolin")
|
||||
stdout.ExpectMatch(ctx, "coolin")
|
||||
})
|
||||
|
||||
t.Run("UserID", func(t *testing.T) {
|
||||
@@ -74,7 +74,7 @@ func TestUserDelete(t *testing.T) {
|
||||
errC <- inv.Run()
|
||||
}()
|
||||
require.NoError(t, <-errC)
|
||||
stdout.ExpectMatchContext(ctx, "coolin")
|
||||
stdout.ExpectMatch(ctx, "coolin")
|
||||
})
|
||||
|
||||
t.Run("UserID", func(t *testing.T) {
|
||||
@@ -104,7 +104,7 @@ func TestUserDelete(t *testing.T) {
|
||||
errC <- inv.Run()
|
||||
}()
|
||||
require.NoError(t, <-errC)
|
||||
stdout.ExpectMatchContext(ctx, "coolin")
|
||||
stdout.ExpectMatch(ctx, "coolin")
|
||||
})
|
||||
|
||||
// TODO: reenable this test case. Fetching users without perms returns a
|
||||
|
||||
@@ -39,7 +39,7 @@ func TestUserCreate(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
stdin.WriteLine(value)
|
||||
}
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
@@ -74,7 +74,7 @@ func TestUserCreate(t *testing.T) {
|
||||
for i := 0; i < len(matches); i += 2 {
|
||||
match := matches[i]
|
||||
value := matches[i+1]
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
stdin.WriteLine(value)
|
||||
}
|
||||
_ = testutil.TryReceive(ctx, t, doneChan)
|
||||
|
||||
@@ -35,7 +35,7 @@ func TestUserList(t *testing.T) {
|
||||
errC <- inv.Run()
|
||||
}()
|
||||
require.NoError(t, <-errC)
|
||||
stdout.ExpectMatchContext(ctx, "coder.com")
|
||||
stdout.ExpectMatch(ctx, "coder.com")
|
||||
})
|
||||
t.Run("JSON", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
@@ -114,7 +114,7 @@ func TestUserShow(t *testing.T) {
|
||||
err := inv.Run()
|
||||
assert.NoError(t, err)
|
||||
}()
|
||||
stdout.ExpectMatchContext(ctx, otherUser.Email)
|
||||
stdout.ExpectMatch(ctx, otherUser.Email)
|
||||
<-doneChan
|
||||
})
|
||||
|
||||
|
||||
@@ -450,9 +450,9 @@ func TestEnterpriseCreateWithPreset(t *testing.T) {
|
||||
|
||||
// Should: display the selected preset as well as its parameters
|
||||
presetName := fmt.Sprintf("Preset '%s' applied:", preset.Name)
|
||||
stdout.ExpectMatchContext(ctx, presetName)
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("%s: '%s'", firstParameterName, secondOptionalParameterValue))
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("%s: '%s'", thirdParameterName, thirdParameterValue))
|
||||
stdout.ExpectMatch(ctx, presetName)
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("%s: '%s'", firstParameterName, secondOptionalParameterValue))
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("%s: '%s'", thirdParameterName, thirdParameterValue))
|
||||
|
||||
// Verify if the new workspace uses expected parameters.
|
||||
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort)
|
||||
@@ -561,7 +561,7 @@ func TestEnterpriseCreateWithPreset(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
err = inv.Run()
|
||||
require.NoError(t, err)
|
||||
stdout.ExpectMatchContext(ctx, "No preset applied.")
|
||||
stdout.ExpectMatch(ctx, "No preset applied.")
|
||||
|
||||
// Verify if the new workspace uses expected parameters.
|
||||
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort)
|
||||
|
||||
@@ -117,14 +117,14 @@ func TestExternalWorkspaces(t *testing.T) {
|
||||
}()
|
||||
|
||||
// Expect the workspace creation confirmation
|
||||
stdout.ExpectMatchContext(ctx, "coder_external_agent.main")
|
||||
stdout.ExpectMatchContext(ctx, "external-agent (linux, amd64)")
|
||||
stdout.ExpectMatchContext(ctx, "Confirm create")
|
||||
stdout.ExpectMatch(ctx, "coder_external_agent.main")
|
||||
stdout.ExpectMatch(ctx, "external-agent (linux, amd64)")
|
||||
stdout.ExpectMatch(ctx, "Confirm create")
|
||||
stdin.WriteLine("yes")
|
||||
|
||||
// Expect the external agent instructions
|
||||
stdout.ExpectMatchContext(ctx, "Please run the following command to attach external agent")
|
||||
stdout.ExpectRegexMatchContext(ctx, "curl -fsSL .* | CODER_AGENT_TOKEN=.* sh")
|
||||
stdout.ExpectMatch(ctx, "Please run the following command to attach external agent")
|
||||
stdout.ExpectRegexMatch(ctx, "curl -fsSL .* | CODER_AGENT_TOKEN=.* sh")
|
||||
|
||||
testutil.TryReceive(ctx, t, doneChan)
|
||||
|
||||
@@ -229,8 +229,8 @@ func TestExternalWorkspaces(t *testing.T) {
|
||||
assert.NoError(t, errC)
|
||||
close(done)
|
||||
}()
|
||||
stdout.ExpectMatchContext(ctx, ws.Name)
|
||||
stdout.ExpectMatchContext(ctx, template.Name)
|
||||
stdout.ExpectMatch(ctx, ws.Name)
|
||||
stdout.ExpectMatch(ctx, template.Name)
|
||||
cancelFunc()
|
||||
<-done
|
||||
})
|
||||
@@ -308,8 +308,8 @@ func TestExternalWorkspaces(t *testing.T) {
|
||||
assert.NoError(t, errC)
|
||||
close(done)
|
||||
}()
|
||||
stdout.ExpectMatchContext(ctx, "No workspaces found!")
|
||||
stdout.ExpectMatchContext(ctx, "coder external-workspaces create")
|
||||
stdout.ExpectMatch(ctx, "No workspaces found!")
|
||||
stdout.ExpectMatch(ctx, "coder external-workspaces create")
|
||||
cancelFunc()
|
||||
<-done
|
||||
})
|
||||
@@ -352,8 +352,8 @@ func TestExternalWorkspaces(t *testing.T) {
|
||||
assert.NoError(t, errC)
|
||||
close(done)
|
||||
}()
|
||||
stdout.ExpectMatchContext(ctx, "Please run the following command to attach external agent to the workspace")
|
||||
stdout.ExpectRegexMatchContext(ctx, "curl -fsSL .* | CODER_AGENT_TOKEN=.* sh")
|
||||
stdout.ExpectMatch(ctx, "Please run the following command to attach external agent to the workspace")
|
||||
stdout.ExpectRegexMatch(ctx, "curl -fsSL .* | CODER_AGENT_TOKEN=.* sh")
|
||||
cancelFunc()
|
||||
|
||||
ctx = testutil.Context(t, testutil.WaitLong)
|
||||
@@ -503,12 +503,12 @@ func TestExternalWorkspaces(t *testing.T) {
|
||||
}()
|
||||
|
||||
// Expect the workspace creation confirmation
|
||||
stdout.ExpectMatchContext(ctx, "coder_external_agent.main")
|
||||
stdout.ExpectMatchContext(ctx, "external-agent (linux, amd64)")
|
||||
stdout.ExpectMatch(ctx, "coder_external_agent.main")
|
||||
stdout.ExpectMatch(ctx, "external-agent (linux, amd64)")
|
||||
|
||||
// Expect the external agent instructions
|
||||
stdout.ExpectMatchContext(ctx, "Please run the following command to attach external agent")
|
||||
stdout.ExpectRegexMatchContext(ctx, "curl -fsSL .* | CODER_AGENT_TOKEN=.* sh")
|
||||
stdout.ExpectMatch(ctx, "Please run the following command to attach external agent")
|
||||
stdout.ExpectRegexMatch(ctx, "curl -fsSL .* | CODER_AGENT_TOKEN=.* sh")
|
||||
|
||||
testutil.TryReceive(ctx, t, doneChan)
|
||||
|
||||
|
||||
@@ -27,8 +27,8 @@ func TestFeaturesList(t *testing.T) {
|
||||
clitest.SetupConfig(t, anotherClient, conf)
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
clitest.Start(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "user_limit")
|
||||
stdout.ExpectMatchContext(ctx, "not_entitled")
|
||||
stdout.ExpectMatch(ctx, "user_limit")
|
||||
stdout.ExpectMatch(ctx, "not_entitled")
|
||||
})
|
||||
t.Run("JSON", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
@@ -48,6 +48,6 @@ func TestCreateGroup(t *testing.T) {
|
||||
err := inv.Run()
|
||||
require.NoError(t, err)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("Successfully created group %s!", pretty.Sprint(cliui.DefaultStyles.Keyword, groupName)))
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("Successfully created group %s!", pretty.Sprint(cliui.DefaultStyles.Keyword, groupName)))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ func TestGroupDelete(t *testing.T) {
|
||||
err := inv.Run()
|
||||
require.NoError(t, err)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("Successfully deleted group %s", pretty.Sprint(cliui.DefaultStyles.Keyword, group.Name)))
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("Successfully deleted group %s", pretty.Sprint(cliui.DefaultStyles.Keyword, group.Name)))
|
||||
})
|
||||
|
||||
t.Run("NoArg", func(t *testing.T) {
|
||||
|
||||
@@ -56,7 +56,7 @@ func TestGroupEdit(t *testing.T) {
|
||||
err := inv.Run()
|
||||
require.NoError(t, err)
|
||||
|
||||
stdout.ExpectMatchContext(ctx, fmt.Sprintf("Successfully patched group %s", pretty.Sprint(cliui.DefaultStyles.Keyword, expectedName)))
|
||||
stdout.ExpectMatch(ctx, fmt.Sprintf("Successfully patched group %s", pretty.Sprint(cliui.DefaultStyles.Keyword, expectedName)))
|
||||
})
|
||||
|
||||
t.Run("InvalidUserInput", func(t *testing.T) {
|
||||
|
||||
@@ -55,7 +55,7 @@ func TestGroupList(t *testing.T) {
|
||||
}
|
||||
|
||||
for _, match := range matches {
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
}
|
||||
})
|
||||
|
||||
@@ -84,7 +84,7 @@ func TestGroupList(t *testing.T) {
|
||||
}
|
||||
|
||||
for _, match := range matches {
|
||||
stdout.ExpectMatchContext(ctx, match)
|
||||
stdout.ExpectMatch(ctx, match)
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ func TestLicensesAddFake(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
clitest.Start(t, inv)
|
||||
ctx := testutil.Context(t, testutil.WaitMedium)
|
||||
stdout.ExpectMatchContext(ctx, "License with ID 1 added")
|
||||
stdout.ExpectMatch(ctx, "License with ID 1 added")
|
||||
})
|
||||
t.Run("Prompt", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
@@ -53,10 +53,10 @@ func TestLicensesAddFake(t *testing.T) {
|
||||
go func() {
|
||||
errC <- inv.WithContext(ctx).Run()
|
||||
}()
|
||||
stdout.ExpectMatchContext(ctx, "Paste license:")
|
||||
stdout.ExpectMatch(ctx, "Paste license:")
|
||||
stdin.WriteLine(fakeLicenseJWT)
|
||||
require.NoError(t, <-errC)
|
||||
stdout.ExpectMatchContext(ctx, "License with ID 1 added")
|
||||
stdout.ExpectMatch(ctx, "License with ID 1 added")
|
||||
})
|
||||
t.Run("File", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
@@ -72,7 +72,7 @@ func TestLicensesAddFake(t *testing.T) {
|
||||
errC <- inv.WithContext(ctx).Run()
|
||||
}()
|
||||
require.NoError(t, <-errC)
|
||||
stdout.ExpectMatchContext(ctx, "License with ID 1 added")
|
||||
stdout.ExpectMatch(ctx, "License with ID 1 added")
|
||||
})
|
||||
t.Run("StdIn", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
@@ -109,7 +109,7 @@ func TestLicensesAddFake(t *testing.T) {
|
||||
errC <- inv.WithContext(ctx).Run()
|
||||
}()
|
||||
require.NoError(t, <-errC)
|
||||
stdout.ExpectMatchContext(ctx, "\"f2\": 2")
|
||||
stdout.ExpectMatch(ctx, "\"f2\": 2")
|
||||
})
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ func TestLicensesDeleteFake(t *testing.T) {
|
||||
|
||||
clitest.Start(t, inv)
|
||||
ctx := testutil.Context(t, testutil.WaitMedium)
|
||||
stdout.ExpectMatchContext(ctx, "License with ID 55 deleted")
|
||||
stdout.ExpectMatch(ctx, "License with ID 55 deleted")
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ func TestShowOrganizations(t *testing.T) {
|
||||
errC <- inv.Run()
|
||||
}()
|
||||
require.NoError(t, <-errC)
|
||||
stdout.ExpectMatchContext(ctx, first.OrganizationID.String())
|
||||
stdout.ExpectMatch(ctx, first.OrganizationID.String())
|
||||
})
|
||||
|
||||
t.Run("UsingFlag", func(t *testing.T) {
|
||||
@@ -185,7 +185,7 @@ func TestShowOrganizations(t *testing.T) {
|
||||
errC <- inv.Run()
|
||||
}()
|
||||
require.NoError(t, <-errC)
|
||||
stdout.ExpectMatchContext(ctx, orgs["bar"].ID.String())
|
||||
stdout.ExpectMatch(ctx, orgs["bar"].ID.String())
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -483,7 +483,7 @@ func TestSchedulePrebuilds(t *testing.T) {
|
||||
require.NoError(t, inv.Run())
|
||||
|
||||
// Then: the updated schedule should be shown
|
||||
stdout.ExpectMatchContext(ctx, workspace.OwnerName+"/"+workspace.Name)
|
||||
stdout.ExpectMatch(ctx, workspace.OwnerName+"/"+workspace.Name)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ func TestProvisionerDaemon_PSK(t *testing.T) {
|
||||
defer cancel()
|
||||
clitest.Start(t, inv)
|
||||
stdout.ExpectNoMatchBefore(ctx, "check entitlement", "starting provisioner daemon")
|
||||
stdout.ExpectMatchContext(ctx, "matt-daemon")
|
||||
stdout.ExpectMatch(ctx, "matt-daemon")
|
||||
|
||||
var daemons []codersdk.ProvisionerDaemon
|
||||
require.Eventually(t, func() bool {
|
||||
@@ -82,7 +82,7 @@ func TestProvisionerDaemon_PSK(t *testing.T) {
|
||||
ctx, cancel := context.WithTimeout(inv.Context(), testutil.WaitLong)
|
||||
defer cancel()
|
||||
clitest.Start(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "starting provisioner daemon")
|
||||
stdout.ExpectMatch(ctx, "starting provisioner daemon")
|
||||
})
|
||||
|
||||
t.Run("NoUserNoPSK", func(t *testing.T) {
|
||||
@@ -124,7 +124,7 @@ func TestProvisionerDaemon_SessionToken(t *testing.T) {
|
||||
ctx, cancel := context.WithTimeout(inv.Context(), testutil.WaitLong)
|
||||
defer cancel()
|
||||
clitest.Start(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "starting provisioner daemon")
|
||||
stdout.ExpectMatch(ctx, "starting provisioner daemon")
|
||||
|
||||
var daemons []codersdk.ProvisionerDaemon
|
||||
var err error
|
||||
@@ -159,7 +159,7 @@ func TestProvisionerDaemon_SessionToken(t *testing.T) {
|
||||
ctx, cancel := context.WithTimeout(inv.Context(), testutil.WaitLong)
|
||||
defer cancel()
|
||||
clitest.Start(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "starting provisioner daemon")
|
||||
stdout.ExpectMatch(ctx, "starting provisioner daemon")
|
||||
|
||||
var daemons []codersdk.ProvisionerDaemon
|
||||
var err error
|
||||
@@ -195,7 +195,7 @@ func TestProvisionerDaemon_SessionToken(t *testing.T) {
|
||||
ctx, cancel := context.WithTimeout(inv.Context(), testutil.WaitLong)
|
||||
defer cancel()
|
||||
clitest.Start(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "starting provisioner daemon")
|
||||
stdout.ExpectMatch(ctx, "starting provisioner daemon")
|
||||
|
||||
var daemons []codersdk.ProvisionerDaemon
|
||||
var err error
|
||||
@@ -231,7 +231,7 @@ func TestProvisionerDaemon_SessionToken(t *testing.T) {
|
||||
ctx, cancel := context.WithTimeout(inv.Context(), testutil.WaitLong)
|
||||
defer cancel()
|
||||
clitest.Start(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "starting provisioner daemon")
|
||||
stdout.ExpectMatch(ctx, "starting provisioner daemon")
|
||||
|
||||
var daemons []codersdk.ProvisionerDaemon
|
||||
var err error
|
||||
@@ -278,7 +278,7 @@ func TestProvisionerDaemon_ProvisionerKey(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
clitest.Start(t, inv)
|
||||
stdout.ExpectNoMatchBefore(ctx, "check entitlement", "starting provisioner daemon")
|
||||
stdout.ExpectMatchContext(ctx, "matt-daemon")
|
||||
stdout.ExpectMatch(ctx, "matt-daemon")
|
||||
|
||||
var daemons []codersdk.ProvisionerDaemon
|
||||
require.Eventually(t, func() bool {
|
||||
@@ -323,7 +323,7 @@ func TestProvisionerDaemon_ProvisionerKey(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
clitest.Start(t, inv)
|
||||
stdout.ExpectNoMatchBefore(ctx, "check entitlement", "starting provisioner daemon")
|
||||
stdout.ExpectMatchContext(ctx, `tags={"tag1":"value1","tag2":"value2"}`)
|
||||
stdout.ExpectMatch(ctx, `tags={"tag1":"value1","tag2":"value2"}`)
|
||||
|
||||
var daemons []codersdk.ProvisionerDaemon
|
||||
require.Eventually(t, func() bool {
|
||||
@@ -439,7 +439,7 @@ func TestProvisionerDaemon_ProvisionerKey(t *testing.T) {
|
||||
stdout := expecter.NewAttachedToInvocation(t, inv)
|
||||
clitest.Start(t, inv)
|
||||
stdout.ExpectNoMatchBefore(ctx, "check entitlement", "starting provisioner daemon")
|
||||
stdout.ExpectMatchContext(ctx, "matt-daemon")
|
||||
stdout.ExpectMatch(ctx, "matt-daemon")
|
||||
var daemons []codersdk.ProvisionerDaemon
|
||||
require.Eventually(t, func() bool {
|
||||
daemons, err = client.OrganizationProvisionerDaemons(ctx, anotherOrg.ID, nil)
|
||||
@@ -479,7 +479,7 @@ func TestProvisionerDaemon_PrometheusEnabled(t *testing.T) {
|
||||
|
||||
// Start "provisionerd" command
|
||||
clitest.Start(t, inv)
|
||||
stdout.ExpectMatchContext(ctx, "starting provisioner daemon")
|
||||
stdout.ExpectMatch(ctx, "starting provisioner daemon")
|
||||
|
||||
var daemons []codersdk.ProvisionerDaemon
|
||||
var err error
|
||||
|
||||
@@ -107,7 +107,7 @@ func TestWorkspaceProxy_Server_PrometheusEnabled(t *testing.T) {
|
||||
clitest.StartWithAssert(t, inv, func(t *testing.T, err error) {
|
||||
// actually no assertions are needed as the test verifies only Prometheus endpoint
|
||||
})
|
||||
stdout.ExpectMatchContext(ctx, "Started HTTP listener at")
|
||||
stdout.ExpectMatch(ctx, "Started HTTP listener at")
|
||||
|
||||
// Fetch metrics from Prometheus endpoint
|
||||
var res *http.Response
|
||||
|
||||
@@ -64,7 +64,7 @@ func Test_ProxyCRUD(t *testing.T) {
|
||||
|
||||
err = inv.WithContext(ctx).Run()
|
||||
require.NoError(t, err)
|
||||
stdout.ExpectMatchContext(ctx, expectedName)
|
||||
stdout.ExpectMatch(ctx, expectedName)
|
||||
|
||||
// Also check via the api
|
||||
proxies, err := client.WorkspaceProxies(ctx) //nolint:gocritic // requires owner
|
||||
|
||||
@@ -17,9 +17,10 @@ func TestPtytest(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Run("Echo", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := testutil.Context(t, testutil.WaitMedium)
|
||||
pty := ptytest.New(t)
|
||||
pty.Output().Write([]byte("write"))
|
||||
pty.ExpectMatch("write")
|
||||
pty.ExpectMatch(ctx, "write")
|
||||
pty.WriteLine("read")
|
||||
})
|
||||
|
||||
@@ -38,7 +39,7 @@ func TestPtytest(t *testing.T) {
|
||||
require.Equal(t, "line 2", pty.ReadLine(ctx))
|
||||
require.Equal(t, "line 3", pty.ReadLine(ctx))
|
||||
require.Equal(t, "line 4", pty.ReadLine(ctx))
|
||||
require.Equal(t, "line 5", pty.ExpectMatch("5"))
|
||||
require.Equal(t, "line 5", pty.ExpectMatch(ctx, "5"))
|
||||
})
|
||||
|
||||
// See https://github.com/coder/coder/issues/2122 for the motivation
|
||||
|
||||
@@ -26,9 +26,10 @@ func TestStart(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Run("Echo", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := testutil.Context(t, testutil.WaitMedium)
|
||||
pty, ps := ptytest.Start(t, pty.Command("echo", "test"))
|
||||
|
||||
pty.ExpectMatch("test")
|
||||
pty.ExpectMatch(ctx, "test")
|
||||
err := ps.Wait()
|
||||
require.NoError(t, err)
|
||||
err = pty.Close()
|
||||
@@ -63,6 +64,7 @@ func TestStart(t *testing.T) {
|
||||
|
||||
t.Run("SSH_TTY", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := testutil.Context(t, testutil.WaitMedium)
|
||||
opts := pty.WithPTYOption(pty.WithSSHRequest(ssh.Pty{
|
||||
Window: ssh.Window{
|
||||
Width: 80,
|
||||
@@ -70,7 +72,7 @@ func TestStart(t *testing.T) {
|
||||
},
|
||||
}))
|
||||
pty, ps := ptytest.Start(t, pty.Command(`/bin/sh`, `-c`, `env | grep SSH_TTY`), opts)
|
||||
pty.ExpectMatch("SSH_TTY=/dev/")
|
||||
pty.ExpectMatch(ctx, "SSH_TTY=/dev/")
|
||||
err := ps.Wait()
|
||||
require.NoError(t, err)
|
||||
err = pty.Close()
|
||||
|
||||
@@ -27,8 +27,9 @@ func TestStart(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Run("Echo", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := testutil.Context(t, testutil.WaitMedium)
|
||||
ptty, ps := ptytest.Start(t, pty.Command("cmd.exe", "/c", "echo", "test"))
|
||||
ptty.ExpectMatch("test")
|
||||
ptty.ExpectMatch(ctx, "test")
|
||||
err := ps.Wait()
|
||||
require.NoError(t, err)
|
||||
err = ptty.Close()
|
||||
|
||||
@@ -145,31 +145,11 @@ func (e *Expecter) logClose(name string, c io.Closer) {
|
||||
e.Logf("closed %s: %v", name, err)
|
||||
}
|
||||
|
||||
// Deprecated: use ExpectMatchContext instead.
|
||||
// This uses a background context, so will not respect the test's context.
|
||||
func (e *Expecter) ExpectMatch(str string) string {
|
||||
return e.expectMatchContextFunc(str, e.ExpectMatchContext)
|
||||
}
|
||||
|
||||
func (e *Expecter) ExpectRegexMatch(str string) string {
|
||||
return e.expectMatchContextFunc(str, e.ExpectRegexMatchContext)
|
||||
}
|
||||
|
||||
func (e *Expecter) expectMatchContextFunc(str string, fn func(ctx context.Context, str string) string) string {
|
||||
e.t.Helper()
|
||||
|
||||
timeout, cancel := context.WithTimeout(context.Background(), testutil.WaitMedium)
|
||||
defer cancel()
|
||||
|
||||
return fn(timeout, str)
|
||||
}
|
||||
|
||||
// TODO(mafredri): Rename this to ExpectMatch when refactoring.
|
||||
func (e *Expecter) ExpectMatchContext(ctx context.Context, str string) string {
|
||||
func (e *Expecter) ExpectMatch(ctx context.Context, str string) string {
|
||||
return e.expectMatcherFunc(ctx, str, strings.Contains)
|
||||
}
|
||||
|
||||
func (e *Expecter) ExpectRegexMatchContext(ctx context.Context, str string) string {
|
||||
func (e *Expecter) ExpectRegexMatch(ctx context.Context, str string) string {
|
||||
return e.expectMatcherFunc(ctx, str, func(src, pattern string) bool {
|
||||
return regexp.MustCompile(pattern).MatchString(src)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user