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

adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 1b8f5f8de21 HDDS-15933. Remove usage of jersey internal 
ContainerRequest (#10839)
1b8f5f8de21 is described below

commit 1b8f5f8de213a5c722c229bc371db7d3f931af02
Author: Eric C. Ho <[email protected]>
AuthorDate: Sat Jul 25 20:48:53 2026 +0800

    HDDS-15933. Remove usage of jersey internal ContainerRequest (#10839)
    
    Generated-by: Codex (GPT-5)
---
 hadoop-ozone/s3gateway/pom.xml                     |   5 -
 .../ozone/s3/TestVirtualHostStyleFilter.java       | 146 ++++++++++-----------
 2 files changed, 70 insertions(+), 81 deletions(-)

diff --git a/hadoop-ozone/s3gateway/pom.xml b/hadoop-ozone/s3gateway/pom.xml
index 0e68b5cce7f..531138b8437 100644
--- a/hadoop-ozone/s3gateway/pom.xml
+++ b/hadoop-ozone/s3gateway/pom.xml
@@ -175,11 +175,6 @@
       <groupId>org.eclipse.jetty</groupId>
       <artifactId>jetty-webapp</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.glassfish.jersey.core</groupId>
-      <artifactId>jersey-common</artifactId>
-      <!-- <scope>test</scope> but transitive via jersey-server -->
-    </dependency>
     <dependency>
       <groupId>org.glassfish.jersey.core</groupId>
       <artifactId>jersey-server</artifactId>
diff --git 
a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestVirtualHostStyleFilter.java
 
b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestVirtualHostStyleFilter.java
index d6072e276c8..6120c349857 100644
--- 
a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestVirtualHostStyleFilter.java
+++ 
b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestVirtualHostStyleFilter.java
@@ -18,21 +18,28 @@
 package org.apache.hadoop.ozone.s3;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import java.net.URI;
+import javax.ws.rs.container.ContainerRequestContext;
 import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.SecurityContext;
+import javax.ws.rs.core.MultivaluedHashMap;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.core.UriInfo;
 import org.apache.hadoop.fs.InvalidRequestException;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.glassfish.jersey.internal.PropertiesDelegate;
-import org.glassfish.jersey.server.ContainerRequest;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.CsvSource;
+import org.mockito.ArgumentCaptor;
 
 /**
  * This class test virtual host style mapping conversion to path style.
@@ -51,47 +58,31 @@ public void setup() {
     conf.set(S3GatewayConfigKeys.OZONE_S3G_DOMAIN_NAME, s3HttpAddr);
   }
 
-  /**
-   * Create containerRequest object.
-   * @return ContainerRequest
-   * @throws Exception
-   */
-  public ContainerRequest createContainerRequest(String host, String path,
-                                                 String queryParams,
-                                                 boolean virtualHostStyle)
-      throws Exception {
-    URI baseUri = new URI("http://"; + s3HttpAddr);
-    URI virtualHostStyleUri;
-    if (path == null && queryParams == null) {
-      virtualHostStyleUri = new URI("http://"; + s3HttpAddr);
-    } else if (path != null && queryParams == null) {
-      virtualHostStyleUri = new URI("http://"; + s3HttpAddr + path);
-    } else if (path != null && queryParams != null)  {
-      virtualHostStyleUri = new URI("http://"; + s3HttpAddr + path +
-          queryParams);
-    } else {
-      virtualHostStyleUri = new URI("http://"; + s3HttpAddr  + queryParams);
-    }
-    URI pathStyleUri;
-    if (queryParams == null) {
-      pathStyleUri = new URI("http://"; + s3HttpAddr + path);
-    } else {
-      pathStyleUri = new URI("http://"; + s3HttpAddr + path + queryParams);
-    }
-    String httpMethod = "DELETE";
-    SecurityContext securityContext = mock(SecurityContext.class);
-    PropertiesDelegate propertiesDelegate = mock(PropertiesDelegate.class);
-    ContainerRequest containerRequest;
-    if (virtualHostStyle) {
-      containerRequest = new ContainerRequest(baseUri, virtualHostStyleUri,
-          httpMethod, securityContext, propertiesDelegate);
-      containerRequest.header(HttpHeaders.HOST, host);
-    } else {
-      containerRequest = new ContainerRequest(baseUri, pathStyleUri,
-          httpMethod, securityContext, propertiesDelegate);
-      containerRequest.header(HttpHeaders.HOST, host);
+  private ContainerRequestContext createRequestContext(String host,
+      String path) {
+    return createRequestContext(host, path, new MultivaluedHashMap<>());
+  }
+
+  private ContainerRequestContext createRequestContext(String host, String 
path,
+      MultivaluedMap<String, String> queryParams) {
+    URI baseUri = URI.create("http://"; + s3HttpAddr);
+    UriBuilder requestUriBuilder = UriBuilder.fromUri(baseUri);
+    if (path != null) {
+      requestUriBuilder.path(path);
     }
-    return containerRequest;
+    queryParams.forEach((key, values) ->
+        requestUriBuilder.queryParam(key, values.toArray()));
+
+    UriInfo uriInfo = mock(UriInfo.class);
+    when(uriInfo.getBaseUri()).thenReturn(baseUri);
+    when(uriInfo.getPath()).thenReturn(path == null ? "" : path.substring(1));
+    when(uriInfo.getQueryParameters()).thenReturn(queryParams);
+    when(uriInfo.getRequestUri()).thenReturn(requestUriBuilder.build());
+
+    ContainerRequestContext requestContext = 
mock(ContainerRequestContext.class);
+    when(requestContext.getHeaderString(HttpHeaders.HOST)).thenReturn(host);
+    when(requestContext.getUriInfo()).thenReturn(uriInfo);
+    return requestContext;
   }
 
   @Test
@@ -101,11 +92,11 @@ public void testVirtualHostStyle() throws  Exception {
     virtualHostStyleFilter.setConfiguration(conf);
 
 
-    ContainerRequest containerRequest = createContainerRequest("mybucket" +
-            ".localhost:9878", "/myfile", null, true);
-    virtualHostStyleFilter.filter(containerRequest);
+    ContainerRequestContext requestContext = createRequestContext(
+        "mybucket.localhost:9878", "/myfile");
+    virtualHostStyleFilter.filter(requestContext);
     URI expected = new URI("http://"; + s3HttpAddr + "/mybucket/myfile");
-    assertEquals(expected, containerRequest.getRequestUri());
+    verify(requestContext).setRequestUri(new URI("http://"; + s3HttpAddr), 
expected);
   }
 
   @Test
@@ -115,12 +106,10 @@ public void testPathStyle() throws Exception {
         new VirtualHostStyleFilter();
     virtualHostStyleFilter.setConfiguration(conf);
 
-    ContainerRequest containerRequest = createContainerRequest(s3HttpAddr,
-        "/mybucket/myfile", null, false);
-    virtualHostStyleFilter.filter(containerRequest);
-    URI expected = new URI("http://"; + s3HttpAddr +
+    ContainerRequestContext requestContext = createRequestContext(s3HttpAddr,
         "/mybucket/myfile");
-    assertEquals(expected, containerRequest.getRequestUri());
+    virtualHostStyleFilter.filter(requestContext);
+    verify(requestContext, never()).setRequestUri(any(URI.class), 
any(URI.class));
 
   }
 
@@ -131,11 +120,11 @@ public void testVirtualHostStyleWithCreateBucketRequest() 
throws Exception {
         new VirtualHostStyleFilter();
     virtualHostStyleFilter.setConfiguration(conf);
 
-    ContainerRequest containerRequest = createContainerRequest("mybucket" +
-        ".localhost:9878", null, null, true);
-    virtualHostStyleFilter.filter(containerRequest);
+    ContainerRequestContext requestContext = createRequestContext(
+        "mybucket.localhost:9878", null);
+    virtualHostStyleFilter.filter(requestContext);
     URI expected = new URI("http://"; + s3HttpAddr + "/mybucket");
-    assertEquals(expected, containerRequest.getRequestUri());
+    verify(requestContext).setRequestUri(new URI("http://"; + s3HttpAddr), 
expected);
 
   }
 
@@ -145,11 +134,11 @@ public void testVirtualHostStyleWithCreateKeyRequest() 
throws Exception {
         new VirtualHostStyleFilter();
     virtualHostStyleFilter.setConfiguration(conf);
 
-    ContainerRequest containerRequest = createContainerRequest("mybucket" +
-        ".localhost:9878", "/key1", null, true);
-    virtualHostStyleFilter.filter(containerRequest);
+    ContainerRequestContext requestContext = createRequestContext(
+        "mybucket.localhost:9878", "/key1");
+    virtualHostStyleFilter.filter(requestContext);
     URI expected = new URI("http://"; + s3HttpAddr + "/mybucket/key1");
-    assertEquals(expected, containerRequest.getRequestUri());
+    verify(requestContext).setRequestUri(new URI("http://"; + s3HttpAddr), 
expected);
   }
 
   @Test
@@ -158,19 +147,24 @@ public void testVirtualHostStyleWithQueryParams() throws 
Exception {
     VirtualHostStyleFilter virtualHostStyleFilter =
         new VirtualHostStyleFilter();
     virtualHostStyleFilter.setConfiguration(conf);
-    URI expected = new URI("http://"; + s3HttpAddr + "/mybucket?prefix=bh");
-    ContainerRequest containerRequest = createContainerRequest("mybucket" +
-        ".localhost:9878", null, "?prefix=bh", true);
-    virtualHostStyleFilter.filter(containerRequest);
-    assertThat(expected.toString())
-        .contains(containerRequest.getRequestUri().toString());
-
-    containerRequest = createContainerRequest("mybucket" +
-        ".localhost:9878", null, "?prefix=bh&type=dir", true);
-    virtualHostStyleFilter.filter(containerRequest);
-    expected = new URI("http://"; + s3HttpAddr +
-        "/mybucket?prefix=bh&type=dir");
-    
assertThat(expected.toString()).contains(containerRequest.getRequestUri().toString());
+    URI baseUri = new URI("http://"; + s3HttpAddr);
+    MultivaluedMap<String, String> queryParams = new MultivaluedHashMap<>();
+    queryParams.add("prefix", "bh");
+    ContainerRequestContext requestContext = createRequestContext(
+        "mybucket.localhost:9878", null, queryParams);
+    virtualHostStyleFilter.filter(requestContext);
+    verify(requestContext).setRequestUri(baseUri,
+        new URI("http://"; + s3HttpAddr + "/mybucket?prefix=bh"));
+
+    queryParams.add("type", "dir");
+    requestContext = createRequestContext(
+        "mybucket.localhost:9878", null, queryParams);
+    virtualHostStyleFilter.filter(requestContext);
+    ArgumentCaptor<URI> requestUriCaptor = ArgumentCaptor.forClass(URI.class);
+    verify(requestContext).setRequestUri(eq(baseUri), 
requestUriCaptor.capture());
+    assertThat(requestUriCaptor.getValue().getPath()).isEqualTo("/mybucket");
+    assertThat(requestUriCaptor.getValue().getQuery().split("&"))
+        .containsExactlyInAnyOrder("prefix=bh", "type=dir");
 
   }
 
@@ -180,9 +174,9 @@ public void testVirtualHostStyleWithInvalidInputs(String 
hostAddress,
                                                     String expectErrorMessage) 
throws Exception {
     VirtualHostStyleFilter virtualHostStyleFilter = new 
VirtualHostStyleFilter();
     virtualHostStyleFilter.setConfiguration(conf);
-    ContainerRequest containerRequest = createContainerRequest(hostAddress, 
null, null, true);
+    ContainerRequestContext requestContext = createRequestContext(hostAddress, 
null);
     InvalidRequestException exception = 
assertThrows(InvalidRequestException.class,
-        () -> virtualHostStyleFilter.filter(containerRequest));
+        () -> virtualHostStyleFilter.filter(requestContext));
     assertThat(exception).hasMessageContaining(expectErrorMessage);
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to