Updated Branches: refs/heads/trunk 8f4d05be5 -> 9157fe8f6
AMBARI-4630. Passthrough /proxy API not passing through extra params.(vbrodetskyi) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/9157fe8f Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/9157fe8f Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/9157fe8f Branch: refs/heads/trunk Commit: 9157fe8f6f92447ec671d628bca8d6a78fa27c3b Parents: 8f4d05b Author: Vitaly Brodetskyi <vbrodets...@hortonworks.com> Authored: Thu Feb 13 18:48:50 2014 +0200 Committer: Vitaly Brodetskyi <vbrodets...@hortonworks.com> Committed: Thu Feb 13 18:48:50 2014 +0200 ---------------------------------------------------------------------- .../ambari/server/proxy/ProxyService.java | 8 +-- .../ambari/server/proxy/ProxyServiceTest.java | 52 ++++++++++---------- 2 files changed, 31 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/9157fe8f/ambari-server/src/main/java/org/apache/ambari/server/proxy/ProxyService.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/proxy/ProxyService.java b/ambari-server/src/main/java/org/apache/ambari/server/proxy/ProxyService.java index 0de826a..98a7e44 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/proxy/ProxyService.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/proxy/ProxyService.java @@ -56,7 +56,7 @@ public class ProxyService { private static final String REQUEST_TYPE_POST = "POST"; private static final String REQUEST_TYPE_PUT = "PUT"; private static final String REQUEST_TYPE_DELETE = "DELETE"; - private static final String QUERY_PARAMETER_URL = "url"; + private static final String QUERY_PARAMETER_URL = "url="; private static final String AMBARI_PROXY_PREFIX = "AmbariProxy-"; private static final String ERROR_PROCESSING_URL = "Error occurred during processing URL "; @@ -87,9 +87,9 @@ public class ProxyService { private Response handleRequest(String requestType, UriInfo ui, InputStream body, HttpHeaders headers) { URLStreamProvider urlStreamProvider = new URLStreamProvider(REPO_URL_CONNECT_TIMEOUT, REPO_URL_READ_TIMEOUT, null, null, null); - List<String> urlsToForward = ui.getQueryParameters().get(QUERY_PARAMETER_URL); - if (!urlsToForward.isEmpty()) { - String url = urlsToForward.get(0); + String query = ui.getRequestUri().getQuery(); + if (query != null && query.indexOf(QUERY_PARAMETER_URL) != -1) { + String url = query.replaceFirst(QUERY_PARAMETER_URL, ""); try { HttpURLConnection connection = urlStreamProvider.processURL(url, requestType, body, getHeaderParamsToForward(headers)); int responseCode = connection.getResponseCode(); http://git-wip-us.apache.org/repos/asf/ambari/blob/9157fe8f/ambari-server/src/test/java/org/apache/ambari/server/proxy/ProxyServiceTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/proxy/ProxyServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/proxy/ProxyServiceTest.java index 326eb13..b90af09 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/proxy/ProxyServiceTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/proxy/ProxyServiceTest.java @@ -42,6 +42,7 @@ import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; +import java.net.URI; import java.util.Map; import java.util.LinkedList; import java.util.HashMap; @@ -53,7 +54,8 @@ import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; @RunWith(PowerMockRunner.class) -@PrepareForTest({ ProxyServiceTest.class, ProxyService.class, URLStreamProvider.class, Response.class, ResponseBuilderImpl.class }) +@PrepareForTest({ ProxyServiceTest.class, ProxyService.class, URLStreamProvider.class, Response.class, + ResponseBuilderImpl.class, URI.class }) class ProxyServiceTest extends BaseServiceTest { @Test @@ -61,12 +63,11 @@ class ProxyServiceTest extends BaseServiceTest { ProxyService ps = new ProxyService(); URLStreamProvider streamProviderMock = PowerMock.createNiceMock(URLStreamProvider.class); HttpURLConnection urlConnectionMock = createMock(HttpURLConnection.class); - MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); + URI uriMock = PowerMock.createMock(URI.class); MultivaluedMap<String, String> headerParams = new MultivaluedMapImpl(); Map<String, List<String>> headerParamsToForward = new HashMap<String, List<String>>(); Response.ResponseBuilder responseBuilderMock = PowerMock.createMock(ResponseBuilderImpl.class); Response responseMock = createMock(ResponseImpl.class); - queryParams.add("url","testurl"); headerParams.add("AmbariProxy-User-Remote","testuser"); headerParams.add("Content-Type","testtype"); List<String> userRemoteParams = new LinkedList<String>(); @@ -76,7 +77,8 @@ class ProxyServiceTest extends BaseServiceTest { PowerMock.mockStatic(Response.class); expect(getHttpHeaders().getRequestHeaders()).andReturn(headerParams); expect(getHttpHeaders().getRequestHeader("AmbariProxy-User-Remote")).andReturn(userRemoteParams); - expect(getUriInfo().getQueryParameters()).andReturn(queryParams); + expect(getUriInfo().getRequestUri()).andReturn(uriMock); + expect(uriMock.getQuery()).andReturn("url=testurl"); expect(streamProviderMock.processURL("testurl", "GET", null, headerParamsToForward)).andReturn(urlConnectionMock); expect(urlConnectionMock.getResponseCode()).andReturn(200); expect(urlConnectionMock.getContentType()).andReturn("text/plain"); @@ -86,7 +88,7 @@ class ProxyServiceTest extends BaseServiceTest { expect(responseBuilderMock.entity(is)).andReturn(responseBuilderMock); expect(responseBuilderMock.type("text/plain")).andReturn(responseBuilderMock); expect(responseBuilderMock.build()).andReturn(responseMock); - PowerMock.replay(streamProviderMock, URLStreamProvider.class, Response.class, responseBuilderMock); + PowerMock.replay(streamProviderMock, URLStreamProvider.class, Response.class, responseBuilderMock, uriMock, URI.class); replay(getUriInfo(), urlConnectionMock, getHttpHeaders()); Response resultForGetRequest = ps.processGetRequestForwarding(getHttpHeaders(),getUriInfo()); assertSame(resultForGetRequest, responseMock); @@ -97,12 +99,11 @@ class ProxyServiceTest extends BaseServiceTest { ProxyService ps = new ProxyService(); URLStreamProvider streamProviderMock = PowerMock.createNiceMock(URLStreamProvider.class); HttpURLConnection urlConnectionMock = createMock(HttpURLConnection.class); - MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); + URI uriMock = PowerMock.createMock(URI.class); MultivaluedMap<String, String> headerParams = new MultivaluedMapImpl(); Map<String, List<String>> headerParamsToForward = new HashMap<String, List<String>>(); Response.ResponseBuilder responseBuilderMock = PowerMock.createMock(ResponseBuilderImpl.class); Response responseMock = createMock(ResponseImpl.class); - queryParams.add("url","testurl"); headerParams.add("AmbariProxy-User-Remote","testuser"); headerParams.add("Content-Type","testtype"); List<String> userRemoteParams = new LinkedList<String>(); @@ -112,7 +113,8 @@ class ProxyServiceTest extends BaseServiceTest { PowerMock.mockStatic(Response.class); expect(getHttpHeaders().getRequestHeaders()).andReturn(headerParams); expect(getHttpHeaders().getRequestHeader("AmbariProxy-User-Remote")).andReturn(userRemoteParams); - expect(getUriInfo().getQueryParameters()).andReturn(queryParams); + expect(getUriInfo().getRequestUri()).andReturn(uriMock); + expect(uriMock.getQuery()).andReturn("url=testurl"); expect(getHttpHeaders().getMediaType()).andReturn(APPLICATION_FORM_URLENCODED_TYPE); expect(streamProviderMock.processURL("testurl", "POST", is, headerParamsToForward)).andReturn(urlConnectionMock); expect(urlConnectionMock.getResponseCode()).andReturn(200); @@ -123,7 +125,7 @@ class ProxyServiceTest extends BaseServiceTest { expect(responseBuilderMock.entity(is)).andReturn(responseBuilderMock); expect(responseBuilderMock.type("text/plain")).andReturn(responseBuilderMock); expect(responseBuilderMock.build()).andReturn(responseMock); - PowerMock.replay(streamProviderMock, URLStreamProvider.class, Response.class, responseBuilderMock); + PowerMock.replay(streamProviderMock, URLStreamProvider.class, Response.class, responseBuilderMock, uriMock, URI.class); replay(getUriInfo(), urlConnectionMock, getHttpHeaders()); Response resultForPostRequest = ps.processPostRequestForwarding(is, getHttpHeaders(), getUriInfo()); assertSame(resultForPostRequest, responseMock); @@ -134,12 +136,11 @@ class ProxyServiceTest extends BaseServiceTest { ProxyService ps = new ProxyService(); URLStreamProvider streamProviderMock = PowerMock.createNiceMock(URLStreamProvider.class); HttpURLConnection urlConnectionMock = createMock(HttpURLConnection.class); - MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); + URI uriMock = PowerMock.createMock(URI.class); MultivaluedMap<String, String> headerParams = new MultivaluedMapImpl(); Map<String, List<String>> headerParamsToForward = new HashMap<String, List<String>>(); Response.ResponseBuilder responseBuilderMock = PowerMock.createMock(ResponseBuilderImpl.class); Response responseMock = createMock(ResponseImpl.class); - queryParams.add("url","testurl"); headerParams.add("AmbariProxy-User-Remote","testuser"); headerParams.add("Content-Type","testtype"); List<String> userRemoteParams = new LinkedList<String>(); @@ -149,7 +150,8 @@ class ProxyServiceTest extends BaseServiceTest { PowerMock.mockStatic(Response.class); expect(getHttpHeaders().getRequestHeaders()).andReturn(headerParams); expect(getHttpHeaders().getRequestHeader("AmbariProxy-User-Remote")).andReturn(userRemoteParams); - expect(getUriInfo().getQueryParameters()).andReturn(queryParams); + expect(getUriInfo().getRequestUri()).andReturn(uriMock); + expect(uriMock.getQuery()).andReturn("url=testurl"); expect(getHttpHeaders().getMediaType()).andReturn(APPLICATION_FORM_URLENCODED_TYPE); expect(streamProviderMock.processURL("testurl", "PUT", is, headerParamsToForward)).andReturn(urlConnectionMock); expect(urlConnectionMock.getResponseCode()).andReturn(200); @@ -160,7 +162,7 @@ class ProxyServiceTest extends BaseServiceTest { expect(responseBuilderMock.entity(is)).andReturn(responseBuilderMock); expect(responseBuilderMock.type("text/plain")).andReturn(responseBuilderMock); expect(responseBuilderMock.build()).andReturn(responseMock); - PowerMock.replay(streamProviderMock, URLStreamProvider.class, Response.class, responseBuilderMock); + PowerMock.replay(streamProviderMock, URLStreamProvider.class, Response.class, responseBuilderMock, uriMock, URI.class); replay(getUriInfo(), urlConnectionMock, getHttpHeaders()); Response resultForPutRequest = ps.processPutRequestForwarding(is, getHttpHeaders(), getUriInfo()); assertSame(resultForPutRequest, responseMock); @@ -171,12 +173,11 @@ class ProxyServiceTest extends BaseServiceTest { ProxyService ps = new ProxyService(); URLStreamProvider streamProviderMock = PowerMock.createNiceMock(URLStreamProvider.class); HttpURLConnection urlConnectionMock = createMock(HttpURLConnection.class); - MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); + URI uriMock = PowerMock.createMock(URI.class); MultivaluedMap<String, String> headerParams = new MultivaluedMapImpl(); Map<String, List<String>> headerParamsToForward = new HashMap<String, List<String>>(); Response.ResponseBuilder responseBuilderMock = PowerMock.createMock(ResponseBuilderImpl.class); Response responseMock = createMock(ResponseImpl.class); - queryParams.add("url","testurl"); headerParams.add("AmbariProxy-User-Remote","testuser"); headerParams.add("Content-Type","testtype"); List<String> userRemoteParams = new LinkedList<String>(); @@ -186,7 +187,8 @@ class ProxyServiceTest extends BaseServiceTest { PowerMock.mockStatic(Response.class); expect(getHttpHeaders().getRequestHeaders()).andReturn(headerParams); expect(getHttpHeaders().getRequestHeader("AmbariProxy-User-Remote")).andReturn(userRemoteParams); - expect(getUriInfo().getQueryParameters()).andReturn(queryParams); + expect(getUriInfo().getRequestUri()).andReturn(uriMock); + expect(uriMock.getQuery()).andReturn("url=testurl"); expect(streamProviderMock.processURL("testurl", "DELETE", null, headerParamsToForward)).andReturn(urlConnectionMock); expect(urlConnectionMock.getResponseCode()).andReturn(200); expect(urlConnectionMock.getContentType()).andReturn("text/plain"); @@ -196,7 +198,7 @@ class ProxyServiceTest extends BaseServiceTest { expect(responseBuilderMock.entity(is)).andReturn(responseBuilderMock); expect(responseBuilderMock.type("text/plain")).andReturn(responseBuilderMock); expect(responseBuilderMock.build()).andReturn(responseMock); - PowerMock.replay(streamProviderMock, URLStreamProvider.class, Response.class, responseBuilderMock); + PowerMock.replay(streamProviderMock, URLStreamProvider.class, Response.class, responseBuilderMock, uriMock, URI.class); replay(getUriInfo(), urlConnectionMock, getHttpHeaders()); Response resultForDeleteRequest = ps.processDeleteRequestForwarding(getHttpHeaders(), getUriInfo()); assertSame(resultForDeleteRequest, responseMock); @@ -207,10 +209,9 @@ class ProxyServiceTest extends BaseServiceTest { ProxyService ps = new ProxyService(); URLStreamProvider streamProviderMock = PowerMock.createNiceMock(URLStreamProvider.class); HttpURLConnection urlConnectionMock = createMock(HttpURLConnection.class); - MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); + URI uriMock = PowerMock.createMock(URI.class); MultivaluedMap<String, String> headerParams = new MultivaluedMapImpl(); Map<String, List<String>> headerParamsToForward = new HashMap<String, List<String>>(); - queryParams.add("url","testurl"); headerParams.add("AmbariProxy-User-Remote","testuser"); headerParams.add("Content-Type","testtype"); List<String> userRemoteParams = new LinkedList<String>(); @@ -218,11 +219,12 @@ class ProxyServiceTest extends BaseServiceTest { headerParamsToForward.put("User-Remote", userRemoteParams); expect(getHttpHeaders().getRequestHeaders()).andReturn(headerParams); expect(getHttpHeaders().getRequestHeader("AmbariProxy-User-Remote")).andReturn(userRemoteParams); - expect(getUriInfo().getQueryParameters()).andReturn(queryParams); + expect(getUriInfo().getRequestUri()).andReturn(uriMock); + expect(uriMock.getQuery()).andReturn("url=testurl"); expect(streamProviderMock.processURL("testurl", "GET", null, headerParamsToForward)).andReturn(urlConnectionMock); expect(urlConnectionMock.getResponseCode()).andReturn(405).times(2); PowerMock.expectNew(URLStreamProvider.class, 3000, 3000, null, null, null).andReturn(streamProviderMock); - PowerMock.replay(streamProviderMock, URLStreamProvider.class); + PowerMock.replay(streamProviderMock, URLStreamProvider.class, uriMock, URI.class); replay(getUriInfo(), urlConnectionMock, getHttpHeaders()); ps.processGetRequestForwarding(getHttpHeaders(),getUriInfo()); } @@ -232,12 +234,11 @@ class ProxyServiceTest extends BaseServiceTest { ProxyService ps = new ProxyService(); URLStreamProvider streamProviderMock = PowerMock.createNiceMock(URLStreamProvider.class); HttpURLConnection urlConnectionMock = createMock(HttpURLConnection.class); - MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); + URI uriMock = PowerMock.createMock(URI.class); MultivaluedMap<String, String> headerParams = new MultivaluedMapImpl(); Map<String, List<String>> headerParamsToForward = new HashMap<String, List<String>>(); Response.ResponseBuilder responseBuilderMock = PowerMock.createMock(ResponseBuilderImpl.class); Response responseMock = createMock(ResponseImpl.class); - queryParams.add("url","testurl"); headerParams.add("AmbariProxy-User-Remote","testuser"); headerParams.add("Content-Type","testtype"); List<String> userRemoteParams = new LinkedList<String>(); @@ -247,7 +248,8 @@ class ProxyServiceTest extends BaseServiceTest { PowerMock.mockStatic(Response.class); expect(getHttpHeaders().getRequestHeaders()).andReturn(headerParams); expect(getHttpHeaders().getRequestHeader("AmbariProxy-User-Remote")).andReturn(userRemoteParams); - expect(getUriInfo().getQueryParameters()).andReturn(queryParams); + expect(getUriInfo().getRequestUri()).andReturn(uriMock); + expect(uriMock.getQuery()).andReturn("url=testurl"); expect(streamProviderMock.processURL("testurl", "GET", null, headerParamsToForward)).andReturn(urlConnectionMock); expect(urlConnectionMock.getResponseCode()).andReturn(200); expect(urlConnectionMock.getContentType()).andReturn("application/json"); @@ -257,7 +259,7 @@ class ProxyServiceTest extends BaseServiceTest { expect(responseBuilderMock.entity(map)).andReturn(responseBuilderMock); expect(responseBuilderMock.type("application/json")).andReturn(responseBuilderMock); expect(responseBuilderMock.build()).andReturn(responseMock); - PowerMock.replay(streamProviderMock, URLStreamProvider.class, Response.class, responseBuilderMock); + PowerMock.replay(streamProviderMock, URLStreamProvider.class, Response.class, responseBuilderMock, uriMock, URI.class); replay(getUriInfo(), urlConnectionMock, getHttpHeaders()); Response resultForGetRequest = ps.processGetRequestForwarding(getHttpHeaders(),getUriInfo()); assertSame(resultForGetRequest, responseMock);