diff --git a/integration-tests/src/main/java/org/apache/polaris/service/it/env/IcebergTokenAccessManager.java b/integration-tests/src/main/java/org/apache/polaris/service/it/env/IcebergTokenAccessManager.java new file mode 100644 index 0000000000..86054160a1 --- /dev/null +++ b/integration-tests/src/main/java/org/apache/polaris/service/it/env/IcebergTokenAccessManager.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.polaris.service.it.env; + +import jakarta.ws.rs.client.Client; +import org.apache.polaris.service.it.ext.PolarisAccessManager; + +/** + * This class obtains access tokens from the {@code v1/oauth/tokens} endpoint defined by the Iceberg + * REST Catalog spec. + * + *

Note: even though this endpoint is still part of the Iceberg REST Catalog spec it has been + * deprecated per Iceberg PR#10603. + */ +public class IcebergTokenAccessManager implements PolarisAccessManager { + private final Client client; + + public IcebergTokenAccessManager(Client client) { + this.client = client; + } + + @Override + public String obtainAccessToken(PolarisApiEndpoints endpoints, ClientCredentials credentials) { + CatalogApi anon = new CatalogApi(client, endpoints, null, endpoints.catalogApiEndpoint()); + return anon.obtainToken(credentials); + } +} diff --git a/integration-tests/src/main/java/org/apache/polaris/service/it/env/PolarisClient.java b/integration-tests/src/main/java/org/apache/polaris/service/it/env/PolarisClient.java index 8c25335f48..e0c2f38e83 100644 --- a/integration-tests/src/main/java/org/apache/polaris/service/it/env/PolarisClient.java +++ b/integration-tests/src/main/java/org/apache/polaris/service/it/env/PolarisClient.java @@ -115,8 +115,7 @@ public String obtainToken(PrincipalWithCredentials principal) { /** Requests an access token from the Polaris server for the given {@link ClientCredentials}. */ public String obtainToken(ClientCredentials credentials) { - CatalogApi anon = new CatalogApi(client, endpoints, null, endpoints.catalogApiEndpoint()); - return anon.obtainToken(credentials); + return polarisServerManager().accessManager().obtainAccessToken(endpoints, credentials); } private boolean ownedName(String name) { diff --git a/integration-tests/src/main/java/org/apache/polaris/service/it/ext/PolarisAccessManager.java b/integration-tests/src/main/java/org/apache/polaris/service/it/ext/PolarisAccessManager.java new file mode 100644 index 0000000000..2104665bda --- /dev/null +++ b/integration-tests/src/main/java/org/apache/polaris/service/it/ext/PolarisAccessManager.java @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.polaris.service.it.ext; + +import org.apache.polaris.service.it.env.ClientCredentials; +import org.apache.polaris.service.it.env.PolarisApiEndpoints; + +public interface PolarisAccessManager { + + String obtainAccessToken(PolarisApiEndpoints endpoints, ClientCredentials credentials); +} diff --git a/integration-tests/src/main/java/org/apache/polaris/service/it/ext/PolarisServerManager.java b/integration-tests/src/main/java/org/apache/polaris/service/it/ext/PolarisServerManager.java index c23c1f6c9c..00cb882847 100644 --- a/integration-tests/src/main/java/org/apache/polaris/service/it/ext/PolarisServerManager.java +++ b/integration-tests/src/main/java/org/apache/polaris/service/it/ext/PolarisServerManager.java @@ -25,6 +25,7 @@ import jakarta.ws.rs.client.Client; import jakarta.ws.rs.client.ClientBuilder; import java.util.ServiceLoader; +import org.apache.polaris.service.it.env.IcebergTokenAccessManager; import org.apache.polaris.service.it.env.Server; import org.junit.jupiter.api.extension.ExtensionContext; @@ -50,6 +51,10 @@ public interface PolarisServerManager { */ Server serverForContext(ExtensionContext context); + default PolarisAccessManager accessManager() { + return new IcebergTokenAccessManager(createClient()); + } + /** Create a new HTTP client for accessing the server targeted by tests. */ default Client createClient() { return ClientBuilder.newBuilder()