Skip to content

Add integration test for host metadata resolution#719

Draft
hectorcast-db wants to merge 6 commits intohectorcast-db/stack/port-6-gcp-sa-nonblockingfrom
hectorcast-db/stack/port-7-integration-test-metadata
Draft

Add integration test for host metadata resolution#719
hectorcast-db wants to merge 6 commits intohectorcast-db/stack/port-6-gcp-sa-nonblockingfrom
hectorcast-db/stack/port-7-integration-test-metadata

Conversation

@hectorcast-db
Copy link
Contributor

@hectorcast-db hectorcast-db commented Mar 19, 2026

🥞 Stacked PR

Use this link to review incremental changes.


Summary

Port of Go SDK #1546.

Adds integration test verifying that config.resolve() populates accountId, workspaceId, and discoveryUrl from the host's /.well-known/databricks-config endpoint. Also fixes tests broken by host metadata resolution during init.

Changes:

  • HostMetadataIT: integration test for metadata resolution (requires DATABRICKS_HOST)
  • DatabricksConfig.tryResolveHostMetadata(): catches Throwable (not just Exception) to handle mock assertion errors
  • ExternalBrowserCredentialsProviderTest: adds well-known fixture to FixtureServer tests
  • IdempotencyTestingAPITest: filters metadata calls from captured requests

NO_CHANGELOG=true

Test plan

  • All 1086 unit tests pass
  • HostMetadataIT runs against live workspace

github-merge-queue bot pushed a commit that referenced this pull request Mar 19, 2026
## 🥞 Stacked PR

- [**#710 Add cloud field to
HostMetadata**](#710)
[[Files](https://github.com/databricks/databricks-sdk-java/pull/710/files)]
- [#711 Fix GetWorkspaceClient for unified account
hosts](#711)
[[Files](https://github.com/databricks/databricks-sdk-java/pull/711/files)]
- [#712 Add test for GetWorkspaceClient with SPOG
host](#712)
[[Files](https://github.com/databricks/databricks-sdk-java/pull/712/files)]
- [#713 Call resolveHostMetadata on Config
init](#713)
[[Files](https://github.com/databricks/databricks-sdk-java/pull/713/files)]
- [#714 Resolve TokenAudience from host metadata for account
hosts](#714)
[[Files](https://github.com/databricks/databricks-sdk-java/pull/714/files)]
- [#718 Make GCP SA token refresh
non-blocking](#718)
[[Files](https://github.com/databricks/databricks-sdk-java/pull/718/files)]
- [#719 Add integration test for host metadata
resolution](#719)
[[Files](https://github.com/databricks/databricks-sdk-java/pull/719/files)]
- [#720 Remove unified flag usage, rely on host
metadata](#720)
[[Files](https://github.com/databricks/databricks-sdk-java/pull/720/files)]

---------
## Summary

Port of Go SDK
[#1512](databricks/databricks-sdk-go#1512).

Adds a `cloud` field to `HostMetadata` that is populated from the
`/.well-known/databricks-config` discovery endpoint.

**Why:** Today, `isAws()`, `isAzure()`, and `isGcp()` infer cloud type
by suffix-matching the workspace hostname against a hardcoded list of
known DNS zones. This works for standard deployments but fails for
non-standard hostnames (custom vanity domains, unified hosts, etc.). The
discovery endpoint is the authoritative source and already returns a
`cloud` field, but the SDK was discarding it.

**Changes:**
- `HostMetadata`: new `cloud` field (`@JsonProperty("cloud")`), getter,
and 4-arg constructor
- `HostMetadataTest`: deserialization with/without cloud, constructor
tests

`NO_CHANGELOG=true`

## Test plan
- [x] `HostMetadataTest`: 4 tests for cloud field deserialization and
constructors
@hectorcast-db hectorcast-db force-pushed the hectorcast-db/stack/port-7-integration-test-metadata branch from eebd798 to 4607961 Compare March 19, 2026 11:53
@hectorcast-db hectorcast-db force-pushed the hectorcast-db/stack/port-6-gcp-sa-nonblocking branch from 7a65c41 to 2bddb2c Compare March 19, 2026 11:53
github-merge-queue bot pushed a commit that referenced this pull request Mar 19, 2026
## 🥞 Stacked PR

- [#710 Add cloud field to
HostMetadata](#710)
[[Files](https://github.com/databricks/databricks-sdk-java/pull/710/files)]
- [**#711 Fix GetWorkspaceClient for unified account
hosts**](#711)
[[Files](https://github.com/databricks/databricks-sdk-java/pull/711/files)]
- [#712 Add test for GetWorkspaceClient with SPOG
host](#712)
[[Files](https://github.com/databricks/databricks-sdk-java/pull/712/files)]
- [#713 Call resolveHostMetadata on Config
init](#713)
[[Files](https://github.com/databricks/databricks-sdk-java/pull/713/files)]
- [#714 Resolve TokenAudience from host metadata for account
hosts](#714)
[[Files](https://github.com/databricks/databricks-sdk-java/pull/714/files)]
- [#718 Make GCP SA token refresh
non-blocking](#718)
[[Files](https://github.com/databricks/databricks-sdk-java/pull/718/files)]
- [#719 Add integration test for host metadata
resolution](#719)
[[Files](https://github.com/databricks/databricks-sdk-java/pull/719/files)]
- [#720 Remove unified flag usage, rely on host
metadata](#720)
[[Files](https://github.com/databricks/databricks-sdk-java/pull/720/files)]

---------
## Summary

Port of Go SDK
[#1517](databricks/databricks-sdk-go#1517).

Fixes `getWorkspaceClient()` for unified account hosts that don't follow
the standard environment DNS zone pattern (e.g. SPOG/unified hosts).
Previously, the workspace host was always constructed via
`getDeploymentUrl(ws.getDeploymentName())`, which blindly appends the
environment's DNS zone. For unified hosts where the account and
workspace share the same host, this produces an incorrect URL.

**Changes:**
- `AccountClient.getWorkspaceClient()`: clones config instead of
mutating `this.config` for unified hosts

**Note:** `AccountClient.java` is a generated file. The template needs
to be updated.

`NO_CHANGELOG=true`

## Test plan
- [x] `AccountClientTest`: existing tests pass
@hectorcast-db hectorcast-db force-pushed the hectorcast-db/stack/port-6-gcp-sa-nonblocking branch from 2bddb2c to fae703a Compare March 23, 2026 09:28
@hectorcast-db hectorcast-db force-pushed the hectorcast-db/stack/port-7-integration-test-metadata branch from 4607961 to 153a890 Compare March 23, 2026 09:28
@hectorcast-db hectorcast-db force-pushed the hectorcast-db/stack/port-6-gcp-sa-nonblocking branch from fae703a to fcdaae6 Compare March 23, 2026 10:29
@hectorcast-db hectorcast-db force-pushed the hectorcast-db/stack/port-7-integration-test-metadata branch from 153a890 to 821337f Compare March 23, 2026 10:29
@hectorcast-db hectorcast-db force-pushed the hectorcast-db/stack/port-7-integration-test-metadata branch from 821337f to f79a3e8 Compare March 23, 2026 13:04
@hectorcast-db hectorcast-db force-pushed the hectorcast-db/stack/port-6-gcp-sa-nonblocking branch from fcdaae6 to 560f217 Compare March 23, 2026 13:04
github-merge-queue bot pushed a commit that referenced this pull request Mar 23, 2026
## 🥞 Stacked PR
Use this
[link](https://github.com/databricks/databricks-sdk-java/pull/712/files)
to review incremental changes.
-
[**hectorcast-db/stack/port-3-test-get-workspace-client-spog**](#712)
[[Files
changed](https://github.com/databricks/databricks-sdk-java/pull/712/files)]
-
[hectorcast-db/stack/port-4-resolve-metadata-on-init](#713)
[[Files
changed](https://github.com/databricks/databricks-sdk-java/pull/713/files/12f05320deaf1e2d96229e7bb280ecf7c59b25ce..f5a4892cb3877c74bd8cff5979a3a2d177d304ff)]
-
[hectorcast-db/stack/port-5-token-audience-from-metadata](#714)
[[Files
changed](https://github.com/databricks/databricks-sdk-java/pull/714/files/f5a4892cb3877c74bd8cff5979a3a2d177d304ff..513d3f937652fe2a92564fddbb50a46b0527cf97)]
-
[hectorcast-db/stack/port-6-gcp-sa-nonblocking](#718)
[[Files
changed](https://github.com/databricks/databricks-sdk-java/pull/718/files/513d3f937652fe2a92564fddbb50a46b0527cf97..560f2173f1ac8880634d9ad874a72824903a91e9)]
-
[hectorcast-db/stack/port-7-integration-test-metadata](#719)
[[Files
changed](https://github.com/databricks/databricks-sdk-java/pull/719/files/560f2173f1ac8880634d9ad874a72824903a91e9..f79a3e876905d11de94c5f8c589b2af702397cd3)]
-
[hectorcast-db/stack/port-8-remove-unified-flag](#720)
[[Files
changed](https://github.com/databricks/databricks-sdk-java/pull/720/files/f79a3e876905d11de94c5f8c589b2af702397cd3..3c63fc8995cba2381947a52f485bef2cb17693a3)]

---------
## Summary

Port of Go SDK
[#1518](databricks/databricks-sdk-go#1518).

Adds test for `getWorkspaceClient()` with SPOG host to verify that the
config is cloned (not mutated) and multiple calls produce independent
WorkspaceClients.

**Test:** `testGetWorkspaceClientForSpogHostDoesNotMutateAccountConfig`
— creates two workspace clients from the same AccountClient, verifies
each has its own workspaceId and the account config is unchanged.

`NO_CHANGELOG=true`

## Test plan
- [x] `AccountClientTest`: 4 tests pass
github-merge-queue bot pushed a commit that referenced this pull request Mar 24, 2026
## 🥞 Stacked PR
Use this
[link](https://github.com/databricks/databricks-sdk-java/pull/713/files/12f05320deaf1e2d96229e7bb280ecf7c59b25ce..f5a4892cb3877c74bd8cff5979a3a2d177d304ff)
to review incremental changes.
-
[hectorcast-db/stack/port-3-test-get-workspace-client-spog](#712)
[[Files
changed](https://github.com/databricks/databricks-sdk-java/pull/712/files)]
-
[**hectorcast-db/stack/port-4-resolve-metadata-on-init**](#713)
[[Files
changed](https://github.com/databricks/databricks-sdk-java/pull/713/files/12f05320deaf1e2d96229e7bb280ecf7c59b25ce..f5a4892cb3877c74bd8cff5979a3a2d177d304ff)]
-
[hectorcast-db/stack/port-5-token-audience-from-metadata](#714)
[[Files
changed](https://github.com/databricks/databricks-sdk-java/pull/714/files/f5a4892cb3877c74bd8cff5979a3a2d177d304ff..513d3f937652fe2a92564fddbb50a46b0527cf97)]
-
[hectorcast-db/stack/port-6-gcp-sa-nonblocking](#718)
[[Files
changed](https://github.com/databricks/databricks-sdk-java/pull/718/files/513d3f937652fe2a92564fddbb50a46b0527cf97..560f2173f1ac8880634d9ad874a72824903a91e9)]
-
[hectorcast-db/stack/port-7-integration-test-metadata](#719)
[[Files
changed](https://github.com/databricks/databricks-sdk-java/pull/719/files/560f2173f1ac8880634d9ad874a72824903a91e9..f79a3e876905d11de94c5f8c589b2af702397cd3)]
-
[hectorcast-db/stack/port-8-remove-unified-flag](#720)
[[Files
changed](https://github.com/databricks/databricks-sdk-java/pull/720/files/f79a3e876905d11de94c5f8c589b2af702397cd3..3c63fc8995cba2381947a52f485bef2cb17693a3)]

---------
## Summary

Port of Go SDK
[#1542](databricks/databricks-sdk-go#1542).

Calls `resolveHostMetadata()` during config `resolve()` to populate
`accountId`, `workspaceId`, and `discoveryUrl` from the host's
`/.well-known/databricks-config` endpoint. Failures are logged at debug
level and do not block initialization.

**Why:** Previously, host metadata was only resolved on explicit call.
Now it's resolved automatically during config init, so OIDC endpoints,
account IDs, and workspace IDs are populated from the authoritative
discovery endpoint.

**Changes:**
- `DatabricksConfig.innerResolve()`: calls `tryResolveHostMetadata()`
after HTTP client init
- `tryResolveHostMetadata()`: catches `Throwable` (not just Exception)
to handle mock assertion errors in tests
- `clone()`: skips static fields (needed for new Logger)
- Tests: FixtureServer-based tests updated to add
`/.well-known/databricks-config` fixture

`NO_CHANGELOG=true`

## Test plan
- [x] `DatabricksConfigTest`: 45+ tests pass
- [x] All 1086 tests pass
Port of Go SDK #1546. Verifies that config.resolve() populates
accountId, workspaceId, and discoveryUrl from the host's
/.well-known/databricks-config endpoint.

Co-authored-by: Isaac
The tryResolveHostMetadata() call during config.resolve() (added in PR 4)
makes an HTTP call to /.well-known/databricks-config. This broke tests
that use FixtureServer (consumed fixtures out of order) or mock HTTP
clients (unexpected call count). Fixes:
- Catch Throwable (not just Exception) for mock assertion errors
- Add well-known fixture to ExternalBrowser tests using FixtureServer
- Filter metadata calls from captured requests in idempotency test

Co-authored-by: Isaac
@hectorcast-db hectorcast-db force-pushed the hectorcast-db/stack/port-6-gcp-sa-nonblocking branch from 560f217 to ed4ef1b Compare March 24, 2026 11:45
@hectorcast-db hectorcast-db force-pushed the hectorcast-db/stack/port-7-integration-test-metadata branch from f79a3e8 to 206961d Compare March 24, 2026 11:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet