@@ -1097,3 +1097,75 @@ def test_resolve_host_metadata_resolved_host_type_unknown_string(mocker):
10971097 )
10981098 config = Config (host = _DUMMY_WS_HOST , token = "t" )
10991099 assert config ._resolved_host_type is None
1100+
1101+
1102+ # ---------------------------------------------------------------------------
1103+ # default_oidc_audience resolution from host metadata
1104+ # ---------------------------------------------------------------------------
1105+
1106+
1107+ def test_resolve_host_metadata_sets_token_audience_from_default_oidc_audience (mocker ):
1108+ """token_audience is set from default_oidc_audience in host metadata."""
1109+ mocker .patch (
1110+ "databricks.sdk.config.get_host_metadata" ,
1111+ return_value = HostMetadata .from_dict (
1112+ {
1113+ "oidc_endpoint" : f"{ _DUMMY_WS_HOST } /oidc" ,
1114+ "account_id" : _DUMMY_ACCOUNT_ID ,
1115+ "workspace_id" : _DUMMY_WORKSPACE_ID ,
1116+ "default_oidc_audience" : f"{ _DUMMY_WS_HOST } /oidc/v1/token" ,
1117+ }
1118+ ),
1119+ )
1120+ config = Config (host = _DUMMY_WS_HOST , token = "t" )
1121+ assert config .token_audience == f"{ _DUMMY_WS_HOST } /oidc/v1/token"
1122+
1123+
1124+ def test_resolve_host_metadata_default_oidc_audience_takes_priority_over_account_id_fallback (mocker ):
1125+ """default_oidc_audience takes priority over the account_id fallback."""
1126+ mocker .patch (
1127+ "databricks.sdk.config.get_host_metadata" ,
1128+ return_value = HostMetadata .from_dict (
1129+ {
1130+ "oidc_endpoint" : f"{ _DUMMY_ACC_HOST } /oidc/accounts/{ _DUMMY_ACCOUNT_ID } " ,
1131+ "account_id" : _DUMMY_ACCOUNT_ID ,
1132+ "default_oidc_audience" : "custom-audience-from-server" ,
1133+ }
1134+ ),
1135+ )
1136+ config = Config (host = _DUMMY_ACC_HOST , token = "t" , account_id = _DUMMY_ACCOUNT_ID )
1137+ # default_oidc_audience should take priority over the account_id fallback
1138+ assert config .token_audience == "custom-audience-from-server"
1139+
1140+
1141+ def test_resolve_host_metadata_default_oidc_audience_does_not_override_existing_token_audience (mocker ):
1142+ """An explicitly set token_audience is not overwritten by default_oidc_audience."""
1143+ mocker .patch (
1144+ "databricks.sdk.config.get_host_metadata" ,
1145+ return_value = HostMetadata .from_dict (
1146+ {
1147+ "oidc_endpoint" : f"{ _DUMMY_WS_HOST } /oidc" ,
1148+ "account_id" : _DUMMY_ACCOUNT_ID ,
1149+ "workspace_id" : _DUMMY_WORKSPACE_ID ,
1150+ "default_oidc_audience" : f"{ _DUMMY_WS_HOST } /oidc/v1/token" ,
1151+ }
1152+ ),
1153+ )
1154+ config = Config (host = _DUMMY_WS_HOST , token = "t" , token_audience = "my-custom-audience" )
1155+ assert config .token_audience == "my-custom-audience"
1156+
1157+
1158+ def test_resolve_host_metadata_falls_back_to_account_id_when_no_default_oidc_audience (mocker ):
1159+ """When no default_oidc_audience and no workspace_id, falls back to account_id."""
1160+ mocker .patch (
1161+ "databricks.sdk.config.get_host_metadata" ,
1162+ return_value = HostMetadata .from_dict (
1163+ {
1164+ "oidc_endpoint" : f"{ _DUMMY_ACC_HOST } /oidc/accounts/{ _DUMMY_ACCOUNT_ID } " ,
1165+ "account_id" : _DUMMY_ACCOUNT_ID ,
1166+ }
1167+ ),
1168+ )
1169+ config = Config (host = _DUMMY_ACC_HOST , token = "t" , account_id = _DUMMY_ACCOUNT_ID )
1170+ # No default_oidc_audience and no workspace_id → falls back to account_id
1171+ assert config .token_audience == _DUMMY_ACCOUNT_ID
0 commit comments