From 53a660504a0bce9befea0cf2924ded6fdf1b9502 Mon Sep 17 00:00:00 2001 From: Akshay Singla Date: Mon, 8 Jun 2026 15:43:48 +0000 Subject: [PATCH] acceptance: add cmd/lakebox tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Six leaf scenarios covering the rendered output of every lakebox subcommand surface exercised by user-visible flows: - list/empty — empty result → "No lakeboxes found." hint - list/with-entries — multi-row table: NAME column always present, mixed running/stopped/creating states, autostop label including the noAutostop=true "never" case - status/not-found — 404 → friendly "no lakebox named X — `databricks lakebox list` shows available IDs" - ssh-key/list/empty — empty result → register hint - config/no-flags — no flags → "nothing to update" error - config/idle-timeout-bounds — out-of-range values → client-side bounds error before any API call Each test stubs the relevant API endpoint via the testserver framework's [[Server]] entries (status/not-found uses a 404 response; the two config tests need no stub because validation errors fire before any API call). The parent acceptance/cmd/lakebox/test.toml adds .databricks to Ignore so the CLI's local state file doesn't bleed into the test directory's diff. All six pass under both DATABRICKS_BUNDLE_ENGINE=terraform and =direct with identical output, which is correct: lakebox is engine-independent. These would have caught the FQDN-displayed-in-status inconsistency and the start.go 5-vs-10 minute help-text mismatch that the bugfix-bundle PR landed earlier this week. Co-authored-by: Isaac --- .../config/idle-timeout-bounds/out.test.toml | 3 ++ .../config/idle-timeout-bounds/output.txt | 6 ++++ .../lakebox/config/idle-timeout-bounds/script | 6 ++++ .../cmd/lakebox/config/no-flags/out.test.toml | 3 ++ .../cmd/lakebox/config/no-flags/output.txt | 3 ++ acceptance/cmd/lakebox/config/no-flags/script | 1 + .../cmd/lakebox/list/empty/out.test.toml | 3 ++ acceptance/cmd/lakebox/list/empty/output.txt | 1 + acceptance/cmd/lakebox/list/empty/script | 1 + acceptance/cmd/lakebox/list/empty/test.toml | 3 ++ .../lakebox/list/with-entries/out.test.toml | 3 ++ .../cmd/lakebox/list/with-entries/output.txt | 7 +++++ .../cmd/lakebox/list/with-entries/script | 1 + .../cmd/lakebox/list/with-entries/test.toml | 29 +++++++++++++++++++ .../lakebox/ssh-key/list/empty/out.test.toml | 3 ++ .../cmd/lakebox/ssh-key/list/empty/output.txt | 1 + .../cmd/lakebox/ssh-key/list/empty/script | 1 + .../cmd/lakebox/ssh-key/list/empty/test.toml | 3 ++ .../lakebox/status/not-found/out.test.toml | 3 ++ .../cmd/lakebox/status/not-found/output.txt | 3 ++ .../cmd/lakebox/status/not-found/script | 1 + .../cmd/lakebox/status/not-found/test.toml | 4 +++ acceptance/cmd/lakebox/test.toml | 4 +++ 23 files changed, 93 insertions(+) create mode 100644 acceptance/cmd/lakebox/config/idle-timeout-bounds/out.test.toml create mode 100644 acceptance/cmd/lakebox/config/idle-timeout-bounds/output.txt create mode 100644 acceptance/cmd/lakebox/config/idle-timeout-bounds/script create mode 100644 acceptance/cmd/lakebox/config/no-flags/out.test.toml create mode 100644 acceptance/cmd/lakebox/config/no-flags/output.txt create mode 100644 acceptance/cmd/lakebox/config/no-flags/script create mode 100644 acceptance/cmd/lakebox/list/empty/out.test.toml create mode 100644 acceptance/cmd/lakebox/list/empty/output.txt create mode 100644 acceptance/cmd/lakebox/list/empty/script create mode 100644 acceptance/cmd/lakebox/list/empty/test.toml create mode 100644 acceptance/cmd/lakebox/list/with-entries/out.test.toml create mode 100644 acceptance/cmd/lakebox/list/with-entries/output.txt create mode 100644 acceptance/cmd/lakebox/list/with-entries/script create mode 100644 acceptance/cmd/lakebox/list/with-entries/test.toml create mode 100644 acceptance/cmd/lakebox/ssh-key/list/empty/out.test.toml create mode 100644 acceptance/cmd/lakebox/ssh-key/list/empty/output.txt create mode 100644 acceptance/cmd/lakebox/ssh-key/list/empty/script create mode 100644 acceptance/cmd/lakebox/ssh-key/list/empty/test.toml create mode 100644 acceptance/cmd/lakebox/status/not-found/out.test.toml create mode 100644 acceptance/cmd/lakebox/status/not-found/output.txt create mode 100644 acceptance/cmd/lakebox/status/not-found/script create mode 100644 acceptance/cmd/lakebox/status/not-found/test.toml create mode 100644 acceptance/cmd/lakebox/test.toml diff --git a/acceptance/cmd/lakebox/config/idle-timeout-bounds/out.test.toml b/acceptance/cmd/lakebox/config/idle-timeout-bounds/out.test.toml new file mode 100644 index 00000000000..f784a183258 --- /dev/null +++ b/acceptance/cmd/lakebox/config/idle-timeout-bounds/out.test.toml @@ -0,0 +1,3 @@ +Local = true +Cloud = false +EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["terraform", "direct"] diff --git a/acceptance/cmd/lakebox/config/idle-timeout-bounds/output.txt b/acceptance/cmd/lakebox/config/idle-timeout-bounds/output.txt new file mode 100644 index 00000000000..00e16383f48 --- /dev/null +++ b/acceptance/cmd/lakebox/config/idle-timeout-bounds/output.txt @@ -0,0 +1,6 @@ +Error: idle-timeout must be 0 (clear) or between 1m and 24h, got 30s + +Exit code: 1 +Error: idle-timeout must be 0 (clear) or between 1m and 24h, got 48h + +Exit code: 1 diff --git a/acceptance/cmd/lakebox/config/idle-timeout-bounds/script b/acceptance/cmd/lakebox/config/idle-timeout-bounds/script new file mode 100644 index 00000000000..f266a59d9cf --- /dev/null +++ b/acceptance/cmd/lakebox/config/idle-timeout-bounds/script @@ -0,0 +1,6 @@ +# Below the 60s lower bound — client-side validation rejects before +# any API call, so no [[Server]] stub needed. +errcode $CLI lakebox config happy-panda-1234 --idle-timeout 30s + +# Above the 24h upper bound. +errcode $CLI lakebox config happy-panda-1234 --idle-timeout 48h diff --git a/acceptance/cmd/lakebox/config/no-flags/out.test.toml b/acceptance/cmd/lakebox/config/no-flags/out.test.toml new file mode 100644 index 00000000000..f784a183258 --- /dev/null +++ b/acceptance/cmd/lakebox/config/no-flags/out.test.toml @@ -0,0 +1,3 @@ +Local = true +Cloud = false +EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["terraform", "direct"] diff --git a/acceptance/cmd/lakebox/config/no-flags/output.txt b/acceptance/cmd/lakebox/config/no-flags/output.txt new file mode 100644 index 00000000000..52eacb32dd3 --- /dev/null +++ b/acceptance/cmd/lakebox/config/no-flags/output.txt @@ -0,0 +1,3 @@ +Error: nothing to update — pass --name, --idle-timeout, and/or --no-autostop + +Exit code: 1 diff --git a/acceptance/cmd/lakebox/config/no-flags/script b/acceptance/cmd/lakebox/config/no-flags/script new file mode 100644 index 00000000000..9ea155a3ef4 --- /dev/null +++ b/acceptance/cmd/lakebox/config/no-flags/script @@ -0,0 +1 @@ +errcode $CLI lakebox config happy-panda-1234 diff --git a/acceptance/cmd/lakebox/list/empty/out.test.toml b/acceptance/cmd/lakebox/list/empty/out.test.toml new file mode 100644 index 00000000000..f784a183258 --- /dev/null +++ b/acceptance/cmd/lakebox/list/empty/out.test.toml @@ -0,0 +1,3 @@ +Local = true +Cloud = false +EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["terraform", "direct"] diff --git a/acceptance/cmd/lakebox/list/empty/output.txt b/acceptance/cmd/lakebox/list/empty/output.txt new file mode 100644 index 00000000000..fbb7bef557f --- /dev/null +++ b/acceptance/cmd/lakebox/list/empty/output.txt @@ -0,0 +1 @@ + No lakeboxes found. diff --git a/acceptance/cmd/lakebox/list/empty/script b/acceptance/cmd/lakebox/list/empty/script new file mode 100644 index 00000000000..56693a66c45 --- /dev/null +++ b/acceptance/cmd/lakebox/list/empty/script @@ -0,0 +1 @@ +$CLI lakebox list diff --git a/acceptance/cmd/lakebox/list/empty/test.toml b/acceptance/cmd/lakebox/list/empty/test.toml new file mode 100644 index 00000000000..8fca058ddb9 --- /dev/null +++ b/acceptance/cmd/lakebox/list/empty/test.toml @@ -0,0 +1,3 @@ +[[Server]] +Pattern = "GET /api/2.0/lakebox/sandboxes" +Response.Body = '{"sandboxes": []}' diff --git a/acceptance/cmd/lakebox/list/with-entries/out.test.toml b/acceptance/cmd/lakebox/list/with-entries/out.test.toml new file mode 100644 index 00000000000..f784a183258 --- /dev/null +++ b/acceptance/cmd/lakebox/list/with-entries/out.test.toml @@ -0,0 +1,3 @@ +Local = true +Cloud = false +EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["terraform", "direct"] diff --git a/acceptance/cmd/lakebox/list/with-entries/output.txt b/acceptance/cmd/lakebox/list/with-entries/output.txt new file mode 100644 index 00000000000..cba9c409dc9 --- /dev/null +++ b/acceptance/cmd/lakebox/list/with-entries/output.txt @@ -0,0 +1,7 @@ + + ID NAME STATUS AUTOSTOP DEFAULT + ─────────────────────────────────────────────────────────────────── + happy-panda-1234 my-project running 15m + sad-otter-5678 - stopped 10m + creating-newt-9999 - creating… never + diff --git a/acceptance/cmd/lakebox/list/with-entries/script b/acceptance/cmd/lakebox/list/with-entries/script new file mode 100644 index 00000000000..56693a66c45 --- /dev/null +++ b/acceptance/cmd/lakebox/list/with-entries/script @@ -0,0 +1 @@ +$CLI lakebox list diff --git a/acceptance/cmd/lakebox/list/with-entries/test.toml b/acceptance/cmd/lakebox/list/with-entries/test.toml new file mode 100644 index 00000000000..f78f911b2fd --- /dev/null +++ b/acceptance/cmd/lakebox/list/with-entries/test.toml @@ -0,0 +1,29 @@ +[[Server]] +Pattern = "GET /api/2.0/lakebox/sandboxes" +Response.Body = ''' +{ + "sandboxes": [ + { + "sandboxId": "happy-panda-1234", + "status": "Running", + "name": "my-project", + "gatewayHost": "uw2.dbrx.dev", + "idleTimeout": "900s" + }, + { + "sandboxId": "sad-otter-5678", + "status": "Stopped", + "name": "sad-otter-5678", + "gatewayHost": "uw2.dbrx.dev", + "idleTimeout": "600s" + }, + { + "sandboxId": "creating-newt-9999", + "status": "Creating", + "name": "", + "gatewayHost": "uw2.dbrx.dev", + "noAutostop": true + } + ] +} +''' diff --git a/acceptance/cmd/lakebox/ssh-key/list/empty/out.test.toml b/acceptance/cmd/lakebox/ssh-key/list/empty/out.test.toml new file mode 100644 index 00000000000..f784a183258 --- /dev/null +++ b/acceptance/cmd/lakebox/ssh-key/list/empty/out.test.toml @@ -0,0 +1,3 @@ +Local = true +Cloud = false +EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["terraform", "direct"] diff --git a/acceptance/cmd/lakebox/ssh-key/list/empty/output.txt b/acceptance/cmd/lakebox/ssh-key/list/empty/output.txt new file mode 100644 index 00000000000..6b29af6f897 --- /dev/null +++ b/acceptance/cmd/lakebox/ssh-key/list/empty/output.txt @@ -0,0 +1 @@ + No SSH keys registered. Run 'databricks lakebox register' to add one. diff --git a/acceptance/cmd/lakebox/ssh-key/list/empty/script b/acceptance/cmd/lakebox/ssh-key/list/empty/script new file mode 100644 index 00000000000..ddeb83258e9 --- /dev/null +++ b/acceptance/cmd/lakebox/ssh-key/list/empty/script @@ -0,0 +1 @@ +$CLI lakebox ssh-key list diff --git a/acceptance/cmd/lakebox/ssh-key/list/empty/test.toml b/acceptance/cmd/lakebox/ssh-key/list/empty/test.toml new file mode 100644 index 00000000000..af48bfff188 --- /dev/null +++ b/acceptance/cmd/lakebox/ssh-key/list/empty/test.toml @@ -0,0 +1,3 @@ +[[Server]] +Pattern = "GET /api/2.0/lakebox/ssh-keys" +Response.Body = '{"sshKeys": []}' diff --git a/acceptance/cmd/lakebox/status/not-found/out.test.toml b/acceptance/cmd/lakebox/status/not-found/out.test.toml new file mode 100644 index 00000000000..f784a183258 --- /dev/null +++ b/acceptance/cmd/lakebox/status/not-found/out.test.toml @@ -0,0 +1,3 @@ +Local = true +Cloud = false +EnvMatrix.DATABRICKS_BUNDLE_ENGINE = ["terraform", "direct"] diff --git a/acceptance/cmd/lakebox/status/not-found/output.txt b/acceptance/cmd/lakebox/status/not-found/output.txt new file mode 100644 index 00000000000..d4054aa91ab --- /dev/null +++ b/acceptance/cmd/lakebox/status/not-found/output.txt @@ -0,0 +1,3 @@ +Error: no lakebox named "no-such-box" — `databricks lakebox list` shows available IDs + +Exit code: 1 diff --git a/acceptance/cmd/lakebox/status/not-found/script b/acceptance/cmd/lakebox/status/not-found/script new file mode 100644 index 00000000000..68ea8ab4e77 --- /dev/null +++ b/acceptance/cmd/lakebox/status/not-found/script @@ -0,0 +1 @@ +errcode $CLI lakebox status no-such-box diff --git a/acceptance/cmd/lakebox/status/not-found/test.toml b/acceptance/cmd/lakebox/status/not-found/test.toml new file mode 100644 index 00000000000..3d2b831b415 --- /dev/null +++ b/acceptance/cmd/lakebox/status/not-found/test.toml @@ -0,0 +1,4 @@ +[[Server]] +Pattern = "GET /api/2.0/lakebox/sandboxes/no-such-box" +Response.StatusCode = 404 +Response.Body = '{"error_code": "NOT_FOUND", "message": "Sandbox not found"}' diff --git a/acceptance/cmd/lakebox/test.toml b/acceptance/cmd/lakebox/test.toml new file mode 100644 index 00000000000..a87ef9180bd --- /dev/null +++ b/acceptance/cmd/lakebox/test.toml @@ -0,0 +1,4 @@ +# Acceptance tests for `databricks lakebox` subcommands. Common across +# all leaves: ignore the local state file the CLI writes (lakebox.json) +# so it doesn't bleed into the test directory's diff. +Ignore = [".databricks"]