mirror of https://github.com/databricks/cli.git
133 lines
3.2 KiB
Go
133 lines
3.2 KiB
Go
package bundle_test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/databricks/cli/integration/internal/acc"
|
|
"github.com/databricks/cli/internal/testcli"
|
|
"github.com/databricks/cli/internal/testutil"
|
|
"github.com/databricks/cli/libs/python/pythontest"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
var pythonVersions = []string{
|
|
"3.8",
|
|
"3.9",
|
|
"3.10",
|
|
"3.11",
|
|
"3.12",
|
|
"3.13",
|
|
}
|
|
|
|
var pythonVersionsShort = []string{
|
|
"3.9",
|
|
"3.12",
|
|
}
|
|
|
|
var extraInstalls = map[string][]string{
|
|
"3.12": {"setuptools"},
|
|
"3.13": {"setuptools"},
|
|
}
|
|
|
|
func TestDefaultPython(t *testing.T) {
|
|
versions := pythonVersions
|
|
if testing.Short() {
|
|
versions = pythonVersionsShort
|
|
}
|
|
|
|
for _, pythonVersion := range versions {
|
|
t.Run(pythonVersion, func(t *testing.T) {
|
|
testDefaultPython(t, pythonVersion)
|
|
})
|
|
}
|
|
}
|
|
|
|
func testDefaultPython(t *testing.T, pythonVersion string) {
|
|
ctx, wt := acc.WorkspaceTest(t)
|
|
|
|
uniqueProjectId := testutil.RandomName("")
|
|
ctx, replacements := testcli.WithReplacementsMap(ctx)
|
|
replacements.Set(uniqueProjectId, "$UNIQUE_PRJ")
|
|
|
|
user, err := wt.W.CurrentUser.Me(ctx)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, user)
|
|
testcli.PrepareReplacementsUser(t, replacements, *user)
|
|
testcli.PrepareReplacements(t, replacements, wt.W)
|
|
|
|
tmpDir := t.TempDir()
|
|
testutil.Chdir(t, tmpDir)
|
|
|
|
opts := pythontest.VenvOpts{
|
|
PythonVersion: pythonVersion,
|
|
Dir: tmpDir,
|
|
}
|
|
|
|
pythontest.RequireActivatedPythonEnv(t, ctx, &opts)
|
|
extras, ok := extraInstalls[pythonVersion]
|
|
if ok {
|
|
args := append([]string{"pip", "install", "--python", opts.PythonExe}, extras...)
|
|
cmd := exec.Command("uv", args...)
|
|
require.NoError(t, cmd.Run())
|
|
}
|
|
|
|
projectName := "project_name_" + uniqueProjectId
|
|
|
|
initConfig := map[string]string{
|
|
"project_name": projectName,
|
|
"include_notebook": "yes",
|
|
"include_python": "yes",
|
|
"include_dlt": "yes",
|
|
}
|
|
b, err := json.Marshal(initConfig)
|
|
require.NoError(t, err)
|
|
err = os.WriteFile(filepath.Join(tmpDir, "config.json"), b, 0o644)
|
|
require.NoError(t, err)
|
|
|
|
testcli.AssertOutput(
|
|
t,
|
|
ctx,
|
|
[]string{"bundle", "init", "default-python", "--config-file", "config.json"},
|
|
testutil.TestData("testdata/default_python/bundle_init.txt"),
|
|
)
|
|
testutil.Chdir(t, projectName)
|
|
|
|
t.Cleanup(func() {
|
|
// Delete the stack
|
|
testcli.RequireSuccessfulRun(t, ctx, "bundle", "destroy", "--auto-approve")
|
|
})
|
|
|
|
testcli.AssertOutput(
|
|
t,
|
|
ctx,
|
|
[]string{"bundle", "validate"},
|
|
testutil.TestData("testdata/default_python/bundle_validate.txt"),
|
|
)
|
|
testcli.AssertOutput(
|
|
t,
|
|
ctx,
|
|
[]string{"bundle", "deploy"},
|
|
testutil.TestData("testdata/default_python/bundle_deploy.txt"),
|
|
)
|
|
|
|
testcli.AssertOutputJQ(
|
|
t,
|
|
ctx,
|
|
[]string{"bundle", "summary", "--output", "json"},
|
|
testutil.TestData("testdata/default_python/bundle_summary.txt"),
|
|
[]string{
|
|
"/bundle/terraform/exec_path",
|
|
"/resources/jobs/project_name_$UNIQUE_PRJ_job/email_notifications",
|
|
"/resources/jobs/project_name_$UNIQUE_PRJ_job/job_clusters/0/new_cluster/node_type_id",
|
|
"/resources/jobs/project_name_$UNIQUE_PRJ_job/url",
|
|
"/resources/pipelines/project_name_$UNIQUE_PRJ_pipeline/catalog",
|
|
"/resources/pipelines/project_name_$UNIQUE_PRJ_pipeline/url",
|
|
"/workspace/current_user",
|
|
},
|
|
)
|
|
}
|