From 213883e5dedc628b46ec6329ef2216837f2bbba2 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Wed, 7 May 2025 09:21:32 +0200 Subject: [PATCH 1/3] acc: Unset all env vars in inprocess mode --- acceptance/internal/cmd_server.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/acceptance/internal/cmd_server.go b/acceptance/internal/cmd_server.go index 69d4f02ce3..3edace530c 100644 --- a/acceptance/internal/cmd_server.go +++ b/acceptance/internal/cmd_server.go @@ -8,12 +8,19 @@ import ( "testing" "github.com/databricks/cli/internal/testcli" + "github.com/databricks/cli/internal/testutil" "github.com/databricks/cli/libs/testserver" "github.com/stretchr/testify/require" ) func StartCmdServer(t *testing.T) *testserver.Server { server := testserver.New(t) + + // Unset all environment variables when executing CLI commands in process. + // All required environment variables will be provided as the `env` query parameter + // in the request. + testutil.NullEnvironment(t) + server.Handle("GET", "/", func(r testserver.Request) any { q := r.URL.Query() args := strings.Split(q.Get("args"), " ") From 57d8be414df71d2cb8d2e4aeb12ceafb1a277b58 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Wed, 7 May 2025 09:58:59 +0200 Subject: [PATCH 2/3] - --- acceptance/internal/cmd_server.go | 39 ++++++++++++++----------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/acceptance/internal/cmd_server.go b/acceptance/internal/cmd_server.go index 3edace530c..66758dc637 100644 --- a/acceptance/internal/cmd_server.go +++ b/acceptance/internal/cmd_server.go @@ -8,7 +8,6 @@ import ( "testing" "github.com/databricks/cli/internal/testcli" - "github.com/databricks/cli/internal/testutil" "github.com/databricks/cli/libs/testserver" "github.com/stretchr/testify/require" ) @@ -16,11 +15,6 @@ import ( func StartCmdServer(t *testing.T) *testserver.Server { server := testserver.New(t) - // Unset all environment variables when executing CLI commands in process. - // All required environment variables will be provided as the `env` query parameter - // in the request. - testutil.NullEnvironment(t) - server.Handle("GET", "/", func(r testserver.Request) any { q := r.URL.Query() args := strings.Split(q.Get("args"), " ") @@ -28,11 +22,11 @@ func StartCmdServer(t *testing.T) *testserver.Server { var env map[string]string require.NoError(t, json.Unmarshal([]byte(q.Get("env")), &env)) - for key, val := range env { - defer Setenv(t, key, val)() - } + // Change current process's environment to match the callsite. + defer configureEnv(t, env)() - defer Chdir(t, q.Get("cwd"))() + // Change current working directory to match the callsite. + defer chdir(t, q.Get("cwd"))() c := testcli.NewRunner(t, context.Background(), args...) c.Verbose = false @@ -51,9 +45,9 @@ func StartCmdServer(t *testing.T) *testserver.Server { return server } -// Chdir variant that is intended to be used with defer so that it can switch back before function ends. +// chdir variant that is intended to be used with defer so that it can switch back before function ends. // This is unlike testutil.Chdir which switches back only when tests end. -func Chdir(t *testing.T, cwd string) func() { +func chdir(t *testing.T, cwd string) func() { require.NotEmpty(t, cwd) prevDir, err := os.Getwd() require.NoError(t, err) @@ -64,18 +58,21 @@ func Chdir(t *testing.T, cwd string) func() { } } -// Setenv variant that is intended to be used with defer so that it can switch back before function ends. -// This is unlike t.Setenv which switches back only when tests end. -func Setenv(t *testing.T, key, value string) func() { - prevVal, exists := os.LookupEnv(key) +func configureEnv(t *testing.T, env map[string]string) func() { + oldEnv := os.Environ() - require.NoError(t, os.Setenv(key, value)) + // Set current process's environment to match the input. + os.Clearenv() + for key, val := range env { + os.Setenv(key, val) + } + // Function callback to use with defer to restore original environment. return func() { - if exists { - _ = os.Setenv(key, prevVal) - } else { - _ = os.Unsetenv(key) + os.Clearenv() + for _, kv := range oldEnv { + kvs := strings.SplitN(kv, "=", 2) + os.Setenv(kvs[0], kvs[1]) } } } From 3681cb250b3d0d483d1acb9cef9c8018e0cd85e8 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Wed, 7 May 2025 10:05:28 +0200 Subject: [PATCH 3/3] - --- acceptance/internal/cmd_server.go | 1 - 1 file changed, 1 deletion(-) diff --git a/acceptance/internal/cmd_server.go b/acceptance/internal/cmd_server.go index 66758dc637..1d745af975 100644 --- a/acceptance/internal/cmd_server.go +++ b/acceptance/internal/cmd_server.go @@ -14,7 +14,6 @@ import ( func StartCmdServer(t *testing.T) *testserver.Server { server := testserver.New(t) - server.Handle("GET", "/", func(r testserver.Request) any { q := r.URL.Query() args := strings.Split(q.Get("args"), " ")