From 3187a56d69d92fea298aa79e102cb942e86707e6 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Fri, 13 Feb 2026 01:11:53 +0100 Subject: [PATCH 1/3] Skip DBR tests earlier --- acceptance/acceptance_test.go | 42 ++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/acceptance/acceptance_test.go b/acceptance/acceptance_test.go index fcb3ea8e65..a4f2c89ac7 100644 --- a/acceptance/acceptance_test.go +++ b/acceptance/acceptance_test.go @@ -485,6 +485,33 @@ func runTest(t *testing.T, customEnv []string, envFilters []string, ) { + // Check env filters early, before creating any resources like workspace tmp directories. + // This avoids cleanup issues when a test is skipped due to env filter mismatch. + for filterInd, filterEnv := range envFilters { + filterEnvKey := strings.Split(filterEnv, "=")[0] + // Check customEnv first (EnvMatrix values take precedence) + found := false + for i := len(customEnv) - 1; i >= 0; i-- { + if strings.Split(customEnv[i], "=")[0] == filterEnvKey { + if customEnv[i] == filterEnv { + found = true + break + } else { + t.Skipf("Skipping because test environment %s does not match ENVFILTER#%d: %s", customEnv[i], filterInd, filterEnv) + } + } + } + // If not found in customEnv, check config.Env + if !found { + if val, ok := config.Env[filterEnvKey]; ok { + envPair := filterEnvKey + "=" + val + if envPair != filterEnv { + t.Skipf("Skipping because test environment %s does not match ENVFILTER#%d: %s", envPair, filterInd, filterEnv) + } + } + } + } + if LogConfig { configBytes, err := json.MarshalIndent(config, "", " ") require.NoError(t, err) @@ -635,21 +662,6 @@ func runTest(t *testing.T, cmd.Env = addEnvVar(t, cmd.Env, &repls, key, value, config.EnvRepl, len(config.EnvMatrix[key]) > 1 && len(value) >= 4) } - for filterInd, filterEnv := range envFilters { - filterEnvKey := strings.Split(filterEnv, "=")[0] - for ind := range cmd.Env { - // Search backwards, because the latest settings is what is actually applicable. - envPair := cmd.Env[len(cmd.Env)-1-ind] - if strings.Split(envPair, "=")[0] == filterEnvKey { - if envPair == filterEnv { - break - } else { - t.Skipf("Skipping because test environment %s does not match ENVFILTER#%d: %s", envPair, filterInd, filterEnv) - } - } - } - } - absDir, err := filepath.Abs(dir) require.NoError(t, err) cmd.Env = append(cmd.Env, "TESTDIR="+absDir) From 6a054c2c2b94359ec5a19d4a6997484819c73e7c Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Fri, 13 Feb 2026 09:00:38 +0100 Subject: [PATCH 2/3] update comment Co-Authored-By: Claude Opus 4.6 --- acceptance/acceptance_test.go | 91 ++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 44 deletions(-) diff --git a/acceptance/acceptance_test.go b/acceptance/acceptance_test.go index a4f2c89ac7..d98091c3a0 100644 --- a/acceptance/acceptance_test.go +++ b/acceptance/acceptance_test.go @@ -485,32 +485,12 @@ func runTest(t *testing.T, customEnv []string, envFilters []string, ) { - // Check env filters early, before creating any resources like workspace tmp directories. - // This avoids cleanup issues when a test is skipped due to env filter mismatch. - for filterInd, filterEnv := range envFilters { - filterEnvKey := strings.Split(filterEnv, "=")[0] - // Check customEnv first (EnvMatrix values take precedence) - found := false - for i := len(customEnv) - 1; i >= 0; i-- { - if strings.Split(customEnv[i], "=")[0] == filterEnvKey { - if customEnv[i] == filterEnv { - found = true - break - } else { - t.Skipf("Skipping because test environment %s does not match ENVFILTER#%d: %s", customEnv[i], filterInd, filterEnv) - } - } - } - // If not found in customEnv, check config.Env - if !found { - if val, ok := config.Env[filterEnvKey]; ok { - envPair := filterEnvKey + "=" + val - if envPair != filterEnv { - t.Skipf("Skipping because test environment %s does not match ENVFILTER#%d: %s", envPair, filterInd, filterEnv) - } - } - } - } + // Check env filters early, before creating any resources like directories on the file system. + // Creating / deleting too many directories causes this error on the workspace FUSE mount: + // unlinkat : directory not empty. Thus avoiding unnecessary directory creation + // is important. + testEnv := buildTestEnv(config.Env, customEnv) + checkEnvFilters(t, testEnv, envFilters) if LogConfig { configBytes, err := json.MarshalIndent(config, "", " ") @@ -643,23 +623,12 @@ func runTest(t *testing.T, uniqueCacheDir := filepath.Join(t.TempDir(), ".cache") cmd.Env = append(cmd.Env, "DATABRICKS_CACHE_DIR="+uniqueCacheDir) - for _, key := range utils.SortedKeys(config.Env) { - if hasKey(customEnv, key) { - // We want EnvMatrix to take precedence. - // Skip rather than relying on cmd.Env order, because this might interfere with replacements and substitutions. - continue - } - cmd.Env = addEnvVar(t, cmd.Env, &repls, key, config.Env[key], config.EnvRepl, false) - } - - for _, keyvalue := range customEnv { - items := strings.SplitN(keyvalue, "=", 2) - require.Len(t, items, 2) - key := items[0] - value := items[1] + for _, kv := range testEnv { + key, value, _ := strings.Cut(kv, "=") // Only add replacement by default if value is part of EnvMatrix with more than 1 option and length is 4 or more chars // (to avoid matching "yes" and "no" values from template input parameters) - cmd.Env = addEnvVar(t, cmd.Env, &repls, key, value, config.EnvRepl, len(config.EnvMatrix[key]) > 1 && len(value) >= 4) + defaultRepl := hasKey(customEnv, key) && len(config.EnvMatrix[key]) > 1 && len(value) >= 4 + cmd.Env = addEnvVar(t, cmd.Env, &repls, key, value, config.EnvRepl, defaultRepl) } absDir, err := filepath.Abs(dir) @@ -743,10 +712,44 @@ func runTest(t *testing.T, } } +// checkEnvFilters skips the test if any env filter doesn't match testEnv. +func checkEnvFilters(t *testing.T, testEnv []string, envFilters []string) { + envMap := make(map[string]string, len(testEnv)) + for _, kv := range testEnv { + key, value, _ := strings.Cut(kv, "=") + envMap[key] = value + } + for i, filter := range envFilters { + key, expected, _ := strings.Cut(filter, "=") + if actual, ok := envMap[key]; ok && actual != expected { + t.Skipf("Skipping because test environment %s=%s does not match ENVFILTER#%d: %s", key, actual, i, filter) + } + } +} + +// buildTestEnv builds the test environment from config.Env and customEnv. +// customEnv (from EnvMatrix) takes precedence over config.Env. +func buildTestEnv(configEnv map[string]string, customEnv []string) []string { + env := make([]string, 0, len(configEnv)+len(customEnv)) + + // Add config.Env first (but skip keys that exist in customEnv) + for _, key := range utils.SortedKeys(configEnv) { + if hasKey(customEnv, key) { + continue + } + env = append(env, key+"="+configEnv[key]) + } + + // Add customEnv second (takes precedence) + env = append(env, customEnv...) + + return env +} + func hasKey(env []string, key string) bool { - for _, keyvalue := range env { - items := strings.SplitN(keyvalue, "=", 2) - if len(items) == 2 && items[0] == key { + for _, kv := range env { + k, _, ok := strings.Cut(kv, "=") + if ok && k == key { return true } } From ed022c00844432d38615f108c95bdf7e9c3fbd56 Mon Sep 17 00:00:00 2001 From: Shreyas Goenka Date: Fri, 13 Feb 2026 15:16:40 +0100 Subject: [PATCH 3/3] lint --- acceptance/acceptance_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/acceptance/acceptance_test.go b/acceptance/acceptance_test.go index d98091c3a0..29eca1108c 100644 --- a/acceptance/acceptance_test.go +++ b/acceptance/acceptance_test.go @@ -713,7 +713,7 @@ func runTest(t *testing.T, } // checkEnvFilters skips the test if any env filter doesn't match testEnv. -func checkEnvFilters(t *testing.T, testEnv []string, envFilters []string) { +func checkEnvFilters(t *testing.T, testEnv, envFilters []string) { envMap := make(map[string]string, len(testEnv)) for _, kv := range testEnv { key, value, _ := strings.Cut(kv, "=")