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()