MCPcopy Create free account
hub / github.com/dagger/dagger / TestExitCommand

Method TestExitCommand

core/integration/module_shell_test.go:922–981  ·  view source on GitHub ↗
(ctx context.Context, t *testctx.T)

Source from the content-addressed store, hash-verified

920}
921
922func (ShellSuite) TestExitCommand(ctx context.Context, t *testctx.T) {
923 t.Run("specific code", func(ctx context.Context, t *testctx.T) {
924 script := `directory | with-new-file foo foo | entries; .exit 5; .echo ok`
925
926 c := connect(ctx, t)
927 _, err := daggerCliBase(t, c).With(daggerShell(script)).Sync(ctx)
928
929 var execErr *dagger.ExecError
930 require.ErrorAs(t, err, &execErr)
931 require.Equal(t, 5, execErr.ExitCode)
932 require.Contains(t, execErr.Stdout, "foo")
933 require.NotContains(t, execErr.Stdout, "ok")
934 })
935
936 t.Run("specific code with tty", func(ctx context.Context, t *testctx.T) {
937 modDir := t.TempDir()
938
939 console, err := newTUIConsole(t, 60*time.Second)
940
941 require.NoError(t, err)
942 defer console.Close()
943
944 tty := console.Tty()
945
946 cmd := hostDaggerCommand(ctx, t, modDir, "-M", "-c", ".exit 5")
947 cmd.Stdin = tty
948 cmd.Stdout = tty
949 cmd.Stderr = tty
950 err = cmd.Run()
951
952 var exitErr *exec.ExitError
953 require.ErrorAs(t, err, &exitErr)
954 require.Equal(t, 5, exitErr.ExitCode())
955 })
956
957 t.Run("no args", func(ctx context.Context, t *testctx.T) {
958 // without `set +e` it won't reach `.exit`
959 script := `_set +e; directory | with-new-file | entries; .exit; .echo ok`
960
961 c := connect(ctx, t)
962 _, err := daggerCliBase(t, c).With(daggerShell(script)).Sync(ctx)
963
964 var execErr *dagger.ExecError
965 require.ErrorAs(t, err, &execErr)
966 require.Equal(t, 1, execErr.ExitCode)
967 require.NotContains(t, execErr.Stdout, "ok")
968 })
969
970 t.Run("no error", func(ctx context.Context, t *testctx.T) {
971 // no error because `.echo ok` returns status code 0
972 script := `_set +e; directory | with-new-file | entries; .echo ok; .exit; .echo exited`
973
974 c := connect(ctx, t)
975 out, err := daggerCliBase(t, c).With(daggerShell(script)).Stdout(ctx)
976
977 require.NoError(t, err)
978 require.Contains(t, out, "ok")
979 require.NotContains(t, out, "exited")

Callers

nothing calls this directly

Calls 13

daggerCliBaseFunction · 0.85
daggerShellFunction · 0.85
newTUIConsoleFunction · 0.85
hostDaggerCommandFunction · 0.85
connectFunction · 0.70
RunMethod · 0.65
SyncMethod · 0.65
EqualMethod · 0.65
ContainsMethod · 0.65
CloseMethod · 0.65
WithMethod · 0.45
ExitCodeMethod · 0.45

Tested by

no test coverage detected