Skip to content

Commit 509408c

Browse files
committed
convert TestBindExperimentToExistingExperiment to an acceptance (cloud-only) test
1 parent 7aae012 commit 509408c

File tree

6 files changed

+87
-62
lines changed

6 files changed

+87
-62
lines changed

acceptance/acceptance_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,7 @@ func runTest(t *testing.T, dir, coverDir string, repls testdiff.ReplacementsCont
364364
require.NoError(t, err)
365365
cmd.Env = append(cmd.Env, "TESTDIR="+absDir)
366366
cmd.Env = append(cmd.Env, "CLOUD_ENV="+cloudEnv)
367+
cmd.Env = append(cmd.Env, "CURRENT_USER_NAME="+user.UserName)
367368

368369
// Write combined output to a file
369370
out, err := os.Create(filepath.Join(tmpDir, "output.txt"))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
bundle:
2+
name: bind-ml-experiment-test-$BUNDLE_NAME_SUFFIX
3+
4+
resources:
5+
experiments:
6+
experiment1:
7+
name: $EXPERIMENT_NAME
8+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
2+
=== Bind experiment test:
3+
=== Substitute variables in the template
4+
=== Create a pre-defined experiment
5+
=== Bind experiment: Updating deployment state...
6+
Successfully bound databricks_mlflow_experiment with an id '[NUMID]'. Run 'bundle deploy' to deploy changes to your workspace
7+
8+
=== Deploy bundle: Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/bind-ml-experiment-test-[UUID]/default/files...
9+
Deploying resources...
10+
Updating deployment state...
11+
Deployment complete!
12+
13+
=== Read the pre-defined experiment: {
14+
"name": "/Users/[USERNAME]/test-experiment[UUID]",
15+
"lifecycle_stage": "active"
16+
}
17+
18+
=== Unbind the experiment: Updating deployment state...
19+
20+
=== Destroy the bundle: All files and directories at the following location will be deleted: /Workspace/Users/[USERNAME]/.bundle/bind-ml-experiment-test-[UUID]/default
21+
22+
Deleting files...
23+
Destroy complete!
24+
25+
=== Read the pre-defined experiment again (expecting it still exists and is not deleted): {
26+
"name": "/Users/[USERNAME]/test-experiment[UUID]",
27+
"lifecycle_stage": "active"
28+
}
29+
30+
=== Test cleanup:
31+
=== Delete the pre-defined experiment: 0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
title "Bind experiment test: "
2+
3+
title "Substitute variables in the template"
4+
BUNDLE_NAME_SUFFIX=$(uuid)
5+
export BUNDLE_NAME_SUFFIX
6+
7+
EXPERIMENT_NAME="/Workspace/Users/${CURRENT_USER_NAME}/test-experiment$(uuid)"
8+
if [ -z "$CLOUD_ENV" ]; then
9+
EXPERIMENT_NAME="/Workspace/Users/${CURRENT_USER_NAME}/test-experiment6260d50f-e8ff-4905-8f28-812345678903" # use hard-coded uuid when running locally
10+
fi
11+
export EXPERIMENT_NAME
12+
envsubst < databricks.yml > out.yml && mv out.yml databricks.yml
13+
14+
title "Create a pre-defined experiment"
15+
EXPERIMENT_ID=$($CLI experiments create-experiment ${EXPERIMENT_NAME} | jq -r '.experiment_id')
16+
17+
cleanupRemoveExperiment() {
18+
title "Test cleanup: "
19+
title "Delete the pre-defined experiment: "
20+
$CLI experiments delete-experiment ${EXPERIMENT_ID}
21+
echo $?
22+
}
23+
trap cleanupRemoveExperiment EXIT
24+
25+
title "Bind experiment: "
26+
$CLI bundle deployment bind experiment1 ${EXPERIMENT_ID} --auto-approve
27+
28+
title "Deploy bundle: "
29+
$CLI bundle deploy --force-lock --auto-approve
30+
31+
title "Read the pre-defined experiment: "
32+
$CLI experiments get-experiment ${EXPERIMENT_ID} | jq '{name: .experiment.name, lifecycle_stage: .experiment.lifecycle_stage}'
33+
34+
title "Unbind the experiment: "
35+
$CLI bundle deployment unbind experiment1
36+
37+
title "Destroy the bundle: "
38+
$CLI bundle destroy --auto-approve
39+
40+
title "Read the pre-defined experiment again (expecting it still exists and is not deleted): "
41+
$CLI experiments get-experiment ${EXPERIMENT_ID} | jq '{name: .experiment.name, lifecycle_stage: .experiment.lifecycle_stage}'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Local = false
2+
Cloud = true
3+
4+
[[Repls]]
5+
Old = "[0-9]{3,}"
6+
New = "[NUMID]"

integration/bundle/bind_resource_test.go

-62
Original file line numberDiff line numberDiff line change
@@ -17,70 +17,8 @@ import (
1717
"github.com/stretchr/testify/require"
1818

1919
"github.com/databricks/databricks-sdk-go/service/catalog"
20-
"github.com/databricks/databricks-sdk-go/service/ml"
2120
)
2221

23-
func TestBindExperimentToExistingExperiment(t *testing.T) {
24-
ctx, wt := acc.UcWorkspaceTest(t)
25-
26-
currentUser, err := wt.W.CurrentUser.Me(ctx)
27-
require.NoError(t, err)
28-
29-
// create a pre-defined experiment:
30-
uniqueId := uuid.New().String()
31-
experimentName := "/Workspace/Users/" + currentUser.UserName + "/test-experiment" + uniqueId
32-
predefinedExperiment, err := wt.W.Experiments.CreateExperiment(ctx, ml.CreateExperiment{
33-
Name: experimentName,
34-
ArtifactLocation: "s3://test-location",
35-
})
36-
require.NoError(t, err)
37-
t.Cleanup(func() {
38-
err := wt.W.Experiments.DeleteExperiment(ctx, ml.DeleteExperiment{ExperimentId: predefinedExperiment.ExperimentId})
39-
require.NoError(t, err)
40-
})
41-
42-
// setup the bundle:
43-
bundleRoot := initTestTemplate(t, ctx, "ml_experiment", map[string]any{
44-
"unique_id": uniqueId,
45-
"experiment_name": experimentName,
46-
})
47-
ctx = env.Set(ctx, "BUNDLE_ROOT", bundleRoot)
48-
49-
// run the bind command:
50-
c := testcli.NewRunner(t, ctx, "bundle", "deployment", "bind", "experiment1", predefinedExperiment.ExperimentId, "--auto-approve")
51-
_, _, err = c.Run()
52-
require.NoError(t, err)
53-
54-
// deploy the bundle:
55-
deployBundle(t, ctx, bundleRoot)
56-
57-
// check that the predefinedExperiment was not re-created / deleted (it is still active):
58-
w, err := databricks.NewWorkspaceClient()
59-
require.NoError(t, err)
60-
61-
updatedExperiment, err := w.Experiments.GetExperiment(ctx, ml.GetExperimentRequest{
62-
ExperimentId: predefinedExperiment.ExperimentId,
63-
})
64-
require.NoError(t, err)
65-
66-
require.Equal(t, "active", updatedExperiment.Experiment.LifecycleStage)
67-
68-
// unbind the experiment:
69-
c = testcli.NewRunner(t, ctx, "bundle", "deployment", "unbind", "experiment1")
70-
_, _, err = c.Run()
71-
require.NoError(t, err)
72-
73-
// destroy the bundle:
74-
destroyBundle(t, ctx, bundleRoot)
75-
76-
// Check that experiment is unbound and exists after bundle is destroyed
77-
postDestroyExperiment, err := w.Experiments.GetExperiment(ctx, ml.GetExperimentRequest{
78-
ExperimentId: predefinedExperiment.ExperimentId,
79-
})
80-
require.NoError(t, err)
81-
require.Equal(t, "active", postDestroyExperiment.Experiment.LifecycleStage)
82-
}
83-
8422
func TestBindSchemaToExistingSchema(t *testing.T) {
8523
ctx, wt := acc.UcWorkspaceTest(t)
8624

0 commit comments

Comments
 (0)