This is an automated email from the ASF dual-hosted git repository.

dimas pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/polaris.git


The following commit(s) were added to refs/heads/main by this push:
     new 56f2fc5e Allow custom access token generation in integration test env 
(#789)
56f2fc5e is described below

commit 56f2fc5eac27cc184a5537bd00e0f15fb0c30d87
Author: Dmitri Bourlatchkov <[email protected]>
AuthorDate: Wed Jan 15 13:33:59 2025 -0500

    Allow custom access token generation in integration test env (#789)
    
    Polaris allows running the integration test suite against
    an external (managed) server.
    
    This change further enables customizing access tokens for
    these tests according to the test env. needs.
---
 .../service/it/env/IcebergTokenAccessManager.java  | 43 ++++++++++++++++++++++
 .../polaris/service/it/env/PolarisClient.java      |  3 +-
 .../service/it/ext/PolarisAccessManager.java       | 27 ++++++++++++++
 .../service/it/ext/PolarisServerManager.java       |  5 +++
 4 files changed, 76 insertions(+), 2 deletions(-)

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 00000000..86054160
--- /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.
+ *
+ * <p>Note: even though this endpoint is still part of the Iceberg REST 
Catalog spec it has been
+ * deprecated per <a 
href="https://github.com/apache/iceberg/pull/10603";>Iceberg PR#10603</a>.
+ */
+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 8c25335f..e0c2f38e 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 final class PolarisClient implements AutoCloseable {
 
   /** 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 00000000..2104665b
--- /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 c23c1f6c..00cb8828 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 
com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider;
 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()

Reply via email to