HDDS-679. Add query parameter to the constructed query in VirtualHostStyleFilter.
Contributed by Bharat Viswanadham.
(cherry picked from commit d7b012e560
)
This commit is contained in:
parent
69cf9e66e2
commit
6417a51192
|
@ -22,14 +22,14 @@ import javax.ws.rs.container.ContainerRequestContext;
|
||||||
import javax.ws.rs.container.ContainerRequestFilter;
|
import javax.ws.rs.container.ContainerRequestFilter;
|
||||||
import javax.ws.rs.container.PreMatching;
|
import javax.ws.rs.container.PreMatching;
|
||||||
import javax.ws.rs.core.HttpHeaders;
|
import javax.ws.rs.core.HttpHeaders;
|
||||||
|
import javax.ws.rs.core.MultivaluedMap;
|
||||||
import javax.ws.rs.core.UriBuilder;
|
import javax.ws.rs.core.UriBuilder;
|
||||||
import javax.ws.rs.ext.Provider;
|
import javax.ws.rs.ext.Provider;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import org.apache.hadoop.fs.InvalidRequestException;
|
import org.apache.hadoop.fs.InvalidRequestException;
|
||||||
|
@ -95,11 +95,16 @@ public class VirtualHostStyleFilter implements ContainerRequestFilter {
|
||||||
|
|
||||||
URI baseURI = requestContext.getUriInfo().getBaseUri();
|
URI baseURI = requestContext.getUriInfo().getBaseUri();
|
||||||
String currentPath = requestContext.getUriInfo().getPath();
|
String currentPath = requestContext.getUriInfo().getPath();
|
||||||
String newPath = bucketName;
|
String newPath = bucketName;
|
||||||
if (currentPath != null) {
|
if (currentPath != null) {
|
||||||
newPath += String.format("%s", currentPath);
|
newPath += String.format("%s", currentPath);
|
||||||
}
|
}
|
||||||
URI requestAddr = UriBuilder.fromUri(baseURI).path(newPath).build();
|
MultivaluedMap<String, String> queryParams = requestContext.getUriInfo()
|
||||||
|
.getQueryParameters();
|
||||||
|
UriBuilder requestAddrBuilder = UriBuilder.fromUri(baseURI).path(newPath);
|
||||||
|
queryParams.forEach((k, v) -> requestAddrBuilder.queryParam(k,
|
||||||
|
v.toArray()));
|
||||||
|
URI requestAddr = requestAddrBuilder.build();
|
||||||
requestContext.setRequestUri(baseURI, requestAddr);
|
requestContext.setRequestUri(baseURI, requestAddr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ import javax.ws.rs.core.HttpHeaders;
|
||||||
import javax.ws.rs.core.SecurityContext;
|
import javax.ws.rs.core.SecurityContext;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -55,16 +56,27 @@ public class TestVirtualHostStyleFilter {
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public ContainerRequest createContainerRequest(String host, String path,
|
public ContainerRequest createContainerRequest(String host, String path,
|
||||||
|
String queryParams,
|
||||||
boolean virtualHostStyle)
|
boolean virtualHostStyle)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
URI baseUri = new URI("http://" + s3HttpAddr);
|
URI baseUri = new URI("http://" + s3HttpAddr);
|
||||||
URI virtualHostStyleUri;
|
URI virtualHostStyleUri;
|
||||||
if (path == null) {
|
if (path == null && queryParams == null) {
|
||||||
virtualHostStyleUri = new URI("http://" + s3HttpAddr);
|
virtualHostStyleUri = new URI("http://" + s3HttpAddr);
|
||||||
} else {
|
} else if (path != null && queryParams == null) {
|
||||||
virtualHostStyleUri = new URI("http://" + s3HttpAddr + path);
|
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);
|
||||||
}
|
}
|
||||||
URI pathStyleUri = new URI("http://" + s3HttpAddr + path);
|
|
||||||
String httpMethod = "DELETE";
|
String httpMethod = "DELETE";
|
||||||
SecurityContext securityContext = Mockito.mock(SecurityContext.class);
|
SecurityContext securityContext = Mockito.mock(SecurityContext.class);
|
||||||
PropertiesDelegate propertiesDelegate = Mockito.mock(PropertiesDelegate
|
PropertiesDelegate propertiesDelegate = Mockito.mock(PropertiesDelegate
|
||||||
|
@ -89,7 +101,7 @@ public class TestVirtualHostStyleFilter {
|
||||||
virtualHostStyleFilter.setConfiguration(conf);
|
virtualHostStyleFilter.setConfiguration(conf);
|
||||||
|
|
||||||
ContainerRequest containerRequest = createContainerRequest("mybucket" +
|
ContainerRequest containerRequest = createContainerRequest("mybucket" +
|
||||||
".localhost:9878", "/myfile", true);
|
".localhost:9878", "/myfile", null, true);
|
||||||
virtualHostStyleFilter.filter(containerRequest);
|
virtualHostStyleFilter.filter(containerRequest);
|
||||||
URI expected = new URI("http://" + s3HttpAddr +
|
URI expected = new URI("http://" + s3HttpAddr +
|
||||||
"/mybucket/myfile");
|
"/mybucket/myfile");
|
||||||
|
@ -104,7 +116,7 @@ public class TestVirtualHostStyleFilter {
|
||||||
virtualHostStyleFilter.setConfiguration(conf);
|
virtualHostStyleFilter.setConfiguration(conf);
|
||||||
|
|
||||||
ContainerRequest containerRequest = createContainerRequest(s3HttpAddr,
|
ContainerRequest containerRequest = createContainerRequest(s3HttpAddr,
|
||||||
"/mybucket/myfile", false);
|
"/mybucket/myfile", null, false);
|
||||||
virtualHostStyleFilter.filter(containerRequest);
|
virtualHostStyleFilter.filter(containerRequest);
|
||||||
URI expected = new URI("http://" + s3HttpAddr +
|
URI expected = new URI("http://" + s3HttpAddr +
|
||||||
"/mybucket/myfile");
|
"/mybucket/myfile");
|
||||||
|
@ -120,13 +132,37 @@ public class TestVirtualHostStyleFilter {
|
||||||
virtualHostStyleFilter.setConfiguration(conf);
|
virtualHostStyleFilter.setConfiguration(conf);
|
||||||
|
|
||||||
ContainerRequest containerRequest = createContainerRequest("mybucket" +
|
ContainerRequest containerRequest = createContainerRequest("mybucket" +
|
||||||
".localhost:9878", null, true);
|
".localhost:9878", null, null, true);
|
||||||
virtualHostStyleFilter.filter(containerRequest);
|
virtualHostStyleFilter.filter(containerRequest);
|
||||||
URI expected = new URI("http://" + s3HttpAddr + "/mybucket");
|
URI expected = new URI("http://" + s3HttpAddr + "/mybucket");
|
||||||
Assert.assertEquals(expected, containerRequest.getRequestUri());
|
Assert.assertEquals(expected, containerRequest.getRequestUri());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testVirtualHostStyleWithQueryParams() throws Exception {
|
||||||
|
|
||||||
|
VirtualHostStyleFilter virtualHostStyleFilter =
|
||||||
|
new VirtualHostStyleFilter();
|
||||||
|
virtualHostStyleFilter.setConfiguration(conf);
|
||||||
|
|
||||||
|
ContainerRequest containerRequest = createContainerRequest("mybucket" +
|
||||||
|
".localhost:9878", null, "?prefix=bh", true);
|
||||||
|
virtualHostStyleFilter.filter(containerRequest);
|
||||||
|
URI expected = new URI("http://" + s3HttpAddr + "/mybucket?prefix=bh");
|
||||||
|
assertTrue(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");
|
||||||
|
assertTrue(expected.toString().contains(containerRequest.getRequestUri()
|
||||||
|
.toString()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testVirtualHostStyleWithNoMatchingDomain() throws Exception {
|
public void testVirtualHostStyleWithNoMatchingDomain() throws Exception {
|
||||||
|
|
||||||
|
@ -135,7 +171,7 @@ public class TestVirtualHostStyleFilter {
|
||||||
virtualHostStyleFilter.setConfiguration(conf);
|
virtualHostStyleFilter.setConfiguration(conf);
|
||||||
|
|
||||||
ContainerRequest containerRequest = createContainerRequest("mybucket" +
|
ContainerRequest containerRequest = createContainerRequest("mybucket" +
|
||||||
".localhost:9999", null, true);
|
".localhost:9999", null, null, true);
|
||||||
try {
|
try {
|
||||||
virtualHostStyleFilter.filter(containerRequest);
|
virtualHostStyleFilter.filter(containerRequest);
|
||||||
} catch (InvalidRequestException ex) {
|
} catch (InvalidRequestException ex) {
|
||||||
|
@ -153,7 +189,7 @@ public class TestVirtualHostStyleFilter {
|
||||||
virtualHostStyleFilter.setConfiguration(conf);
|
virtualHostStyleFilter.setConfiguration(conf);
|
||||||
|
|
||||||
ContainerRequest containerRequest = createContainerRequest("mybucket" +
|
ContainerRequest containerRequest = createContainerRequest("mybucket" +
|
||||||
"localhost:9878", null, true);
|
"localhost:9878", null, null, true);
|
||||||
try {
|
try {
|
||||||
virtualHostStyleFilter.filter(containerRequest);
|
virtualHostStyleFilter.filter(containerRequest);
|
||||||
fail("testIncorrectVirtualHostStyle failed");
|
fail("testIncorrectVirtualHostStyle failed");
|
||||||
|
|
Loading…
Reference in New Issue