fix tests

This commit is contained in:
Shreyas Goenka 2025-01-20 20:06:01 +01:00
parent e868dbcc22
commit 27f1ae3826
No known key found for this signature in database
GPG Key ID: 92A07DF49CCB0622
1 changed files with 136 additions and 134 deletions

View File

@ -8,7 +8,6 @@ import (
"runtime" "runtime"
"testing" "testing"
"github.com/databricks/cli/bundle"
"github.com/databricks/cli/internal/testutil" "github.com/databricks/cli/internal/testutil"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -38,7 +37,7 @@ func emptyCommand(t *testing.T) *cobra.Command {
return cmd return cmd
} }
func setupWithHost(t *testing.T, cmd *cobra.Command, host string) *bundle.Bundle { func setupWithHost(t *testing.T, cmd *cobra.Command, host string) {
setupDatabricksCfg(t) setupDatabricksCfg(t)
rootPath := t.TempDir() rootPath := t.TempDir()
@ -50,13 +49,9 @@ workspace:
`, host) `, host)
err := os.WriteFile(filepath.Join(rootPath, "databricks.yml"), []byte(contents), 0o644) err := os.WriteFile(filepath.Join(rootPath, "databricks.yml"), []byte(contents), 0o644)
require.NoError(t, err) require.NoError(t, err)
b, diags := MustConfigureBundle(cmd)
require.NoError(t, diags.Error())
return b
} }
func setupWithProfile(t *testing.T, cmd *cobra.Command, profile string) *bundle.Bundle { func setupWithProfile(t *testing.T, cmd *cobra.Command, profile string) {
setupDatabricksCfg(t) setupDatabricksCfg(t)
rootPath := t.TempDir() rootPath := t.TempDir()
@ -68,157 +63,164 @@ workspace:
`, profile) `, profile)
err := os.WriteFile(filepath.Join(rootPath, "databricks.yml"), []byte(contents), 0o644) err := os.WriteFile(filepath.Join(rootPath, "databricks.yml"), []byte(contents), 0o644)
require.NoError(t, err) require.NoError(t, err)
b, diags := MustConfigureBundle(cmd)
require.NoError(t, diags.Error())
return b
} }
func TestBundleConfigureDefault(t *testing.T) { func TestBundleConfigureProfile(t *testing.T) {
testutil.CleanupEnvironment(t) tcases := []struct {
name string
hostInConfig string
cmd := emptyCommand(t) // --profile flag
b := setupWithHost(t, cmd, "https://x.com") profileFlag string
// DATABRICKS_CONFIG_PROFILE environment variable
profileEnvVar string
// profile in config
profileInConfig string
client, err := b.InitializeWorkspaceClient() expectedError string
require.NoError(t, err) expectedHost string
assert.Equal(t, "https://x.com", client.Config.Host) expectedProfile string
} expectedToken string
}{
{
name: "no match, keep host",
hostInConfig: "https://x.com",
func TestBundleConfigureWithMultipleMatches(t *testing.T) { expectedHost: "https://x.com",
testutil.CleanupEnvironment(t) },
{
name: "multiple profile matches",
hostInConfig: "https://a.com",
cmd := emptyCommand(t) expectedError: "multiple profiles matched: PROFILE-1, PROFILE-2",
b := setupWithHost(t, cmd, "https://a.com") },
{
name: "non-existent profile",
profileFlag: "NOEXIST",
hostInConfig: "https://x.com",
_, err := b.InitializeWorkspaceClient() expectedError: "has no NOEXIST profile configured",
assert.ErrorContains(t, err, "multiple profiles matched: PROFILE-1, PROFILE-2") },
} {
name: "mismatched profile",
hostInConfig: "https://x.com",
profileFlag: "PROFILE-1",
func TestBundleConfigureWithNonExistentProfileFlag(t *testing.T) { expectedError: "config host mismatch: profile uses host https://a.com, but CLI configured to use https://x.com",
testutil.CleanupEnvironment(t) },
{
name: "profile flag specified",
hostInConfig: "https://a.com",
profileFlag: "PROFILE-1",
cmd := emptyCommand(t) expectedHost: "https://a.com",
err := cmd.Flag("profile").Value.Set("NOEXIST") expectedProfile: "PROFILE-1",
require.NoError(t, err) },
b := setupWithHost(t, cmd, "https://x.com") {
name: "mismatched profile env variable",
hostInConfig: "https://x.com",
profileEnvVar: "PROFILE-1",
_, err = b.InitializeWorkspaceClient() expectedError: "config host mismatch: profile uses host https://a.com, but CLI configured to use https://x.com",
assert.ErrorContains(t, err, "has no NOEXIST profile configured") },
} {
// The --profile flag takes precedence over the DATABRICKS_CONFIG_PROFILE environment variable
name: "(host) profile flag takes precedence over env variable",
hostInConfig: "https://a.com",
profileFlag: "PROFILE-1",
profileEnvVar: "NOEXIST",
func TestBundleConfigureWithMismatchedProfile(t *testing.T) { expectedHost: "https://a.com",
testutil.CleanupEnvironment(t) expectedProfile: "PROFILE-1",
},
{
name: "profile from config",
profileInConfig: "PROFILE-1",
cmd := emptyCommand(t) expectedHost: "https://a.com",
err := cmd.Flag("profile").Value.Set("PROFILE-1") expectedProfile: "PROFILE-1",
require.NoError(t, err) expectedToken: "a",
b := setupWithHost(t, cmd, "https://x.com") },
{
// The --profile flag takes precedence over the profile in the databricks.yml file
name: "profile flag takes precedence",
profileInConfig: "PROFILE-1",
profileFlag: "PROFILE-2",
_, err = b.InitializeWorkspaceClient() expectedHost: "https://a.com",
assert.ErrorContains(t, err, "config host mismatch: profile uses host https://a.com, but CLI configured to use https://x.com") expectedProfile: "PROFILE-2",
} expectedToken: "b",
},
{
// The DATABRICKS_CONFIG_PROFILE environment variable takes precedence over the profile in the databricks.yml file
name: "profile env variable takes precedence",
profileInConfig: "PROFILE-1",
profileEnvVar: "PROFILE-2",
func TestBundleConfigureWithCorrectProfile(t *testing.T) { expectedHost: "https://a.com",
testutil.CleanupEnvironment(t) expectedProfile: "PROFILE-2",
expectedToken: "b",
},
{
// The --profile flag takes precedence over the DATABRICKS_CONFIG_PROFILE environment variable
name: "profile flag takes precedence over env variable",
profileInConfig: "PROFILE-1",
profileFlag: "PROFILE-2",
profileEnvVar: "NOEXIST",
cmd := emptyCommand(t) expectedHost: "https://a.com",
err := cmd.Flag("profile").Value.Set("PROFILE-1") expectedProfile: "PROFILE-2",
require.NoError(t, err) expectedToken: "b",
b := setupWithHost(t, cmd, "https://a.com") },
}
client, err := b.InitializeWorkspaceClient() for _, tc := range tcases {
require.NoError(t, err) t.Run(tc.name, func(t *testing.T) {
assert.Equal(t, "https://a.com", client.Config.Host) testutil.CleanupEnvironment(t)
assert.Equal(t, "PROFILE-1", client.Config.Profile)
}
func TestBundleConfigureWithMismatchedProfileEnvVariable(t *testing.T) { cmd := emptyCommand(t)
testutil.CleanupEnvironment(t)
t.Setenv("DATABRICKS_CONFIG_PROFILE", "PROFILE-1") // Set up host in databricks.yml
cmd := emptyCommand(t) if tc.hostInConfig != "" {
b := setupWithHost(t, cmd, "https://x.com") setupWithHost(t, cmd, tc.hostInConfig)
}
_, err := b.InitializeWorkspaceClient() // Set up profile in databricks.yml
assert.ErrorContains(t, err, "config host mismatch: profile uses host https://a.com, but CLI configured to use https://x.com") if tc.profileInConfig != "" {
} setupWithProfile(t, cmd, tc.profileInConfig)
}
func TestBundleConfigureWithProfileFlagAndEnvVariable(t *testing.T) { // Set --profile flag
testutil.CleanupEnvironment(t) if tc.profileFlag != "" {
err := cmd.Flag("profile").Value.Set(tc.profileFlag)
require.NoError(t, err)
}
t.Setenv("DATABRICKS_CONFIG_PROFILE", "NOEXIST") // Set DATABRICKS_CONFIG_PROFILE environment variable
cmd := emptyCommand(t) if tc.profileEnvVar != "" {
err := cmd.Flag("profile").Value.Set("PROFILE-1") t.Setenv("DATABRICKS_CONFIG_PROFILE", tc.profileEnvVar)
require.NoError(t, err) }
b := setupWithHost(t, cmd, "https://a.com")
client, err := b.InitializeWorkspaceClient() _, diags := MustConfigureBundle(cmd)
require.NoError(t, err)
assert.Equal(t, "https://a.com", client.Config.Host)
assert.Equal(t, "PROFILE-1", client.Config.Profile)
}
func TestBundleConfigureProfileDefault(t *testing.T) { if tc.expectedError != "" {
testutil.CleanupEnvironment(t) assert.ErrorContains(t, diags.Error(), tc.expectedError)
} else {
assert.NoError(t, diags.Error())
}
// The profile in the databricks.yml file is used // Assert on the resolved configuration values
cmd := emptyCommand(t) if tc.expectedHost != "" {
b := setupWithProfile(t, cmd, "PROFILE-1") assert.Equal(t, tc.expectedHost, ConfigUsed(cmd.Context()).Host)
}
client, err := b.InitializeWorkspaceClient() if tc.expectedProfile != "" {
require.NoError(t, err) assert.Equal(t, tc.expectedProfile, ConfigUsed(cmd.Context()).Profile)
assert.Equal(t, "https://a.com", client.Config.Host) }
assert.Equal(t, "a", client.Config.Token) if tc.expectedToken != "" {
assert.Equal(t, "PROFILE-1", client.Config.Profile) assert.Equal(t, tc.expectedToken, ConfigUsed(cmd.Context()).Token)
} }
})
func TestBundleConfigureProfileFlag(t *testing.T) { }
testutil.CleanupEnvironment(t)
// The --profile flag takes precedence over the profile in the databricks.yml file
cmd := emptyCommand(t)
err := cmd.Flag("profile").Value.Set("PROFILE-2")
require.NoError(t, err)
b := setupWithProfile(t, cmd, "PROFILE-1")
client, err := b.InitializeWorkspaceClient()
require.NoError(t, err)
assert.Equal(t, "https://a.com", client.Config.Host)
assert.Equal(t, "b", client.Config.Token)
assert.Equal(t, "PROFILE-2", client.Config.Profile)
}
func TestBundleConfigureProfileEnvVariable(t *testing.T) {
testutil.CleanupEnvironment(t)
// The DATABRICKS_CONFIG_PROFILE environment variable takes precedence over the profile in the databricks.yml file
t.Setenv("DATABRICKS_CONFIG_PROFILE", "PROFILE-2")
cmd := emptyCommand(t)
b := setupWithProfile(t, cmd, "PROFILE-1")
client, err := b.InitializeWorkspaceClient()
require.NoError(t, err)
assert.Equal(t, "https://a.com", client.Config.Host)
assert.Equal(t, "b", client.Config.Token)
assert.Equal(t, "PROFILE-2", client.Config.Profile)
}
func TestBundleConfigureProfileFlagAndEnvVariable(t *testing.T) {
testutil.CleanupEnvironment(t)
// The --profile flag takes precedence over the DATABRICKS_CONFIG_PROFILE environment variable
t.Setenv("DATABRICKS_CONFIG_PROFILE", "NOEXIST")
cmd := emptyCommand(t)
err := cmd.Flag("profile").Value.Set("PROFILE-2")
require.NoError(t, err)
b := setupWithProfile(t, cmd, "PROFILE-1")
client, err := b.InitializeWorkspaceClient()
require.NoError(t, err)
assert.Equal(t, "https://a.com", client.Config.Host)
assert.Equal(t, "b", client.Config.Token)
assert.Equal(t, "PROFILE-2", client.Config.Profile)
} }
func TestTargetFlagFull(t *testing.T) { func TestTargetFlagFull(t *testing.T) {