You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by tb...@apache.org on 2015/05/19 22:29:12 UTC
ambari git commit: AMBARI-11170 - Views : AmbariStreamProvider and
URLStreamProvider should accept body as Object (tbeerbower)
Repository: ambari
Updated Branches:
refs/heads/trunk 824bc8b6a -> 2e0fd3d89
AMBARI-11170 - Views : AmbariStreamProvider and URLStreamProvider should accept body as Object (tbeerbower)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/2e0fd3d8
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/2e0fd3d8
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/2e0fd3d8
Branch: refs/heads/trunk
Commit: 2e0fd3d897f807f3086d7390d1c0af6fc3704fad
Parents: 824bc8b
Author: tbeerbower <tb...@hortonworks.com>
Authored: Tue May 19 16:28:32 2015 -0400
Committer: tbeerbower <tb...@hortonworks.com>
Committed: Tue May 19 16:28:55 2015 -0400
----------------------------------------------------------------------
.../controller/internal/URLStreamProvider.java | 61 +++++++++---
.../apache/ambari/server/utils/HTTPUtils.java | 2 +-
.../server/view/HttpImpersonatorImpl.java | 2 +-
.../server/view/ViewAmbariStreamProvider.java | 22 ++++-
.../server/view/ViewURLStreamProvider.java | 67 +++++++++----
.../internal/URLStreamProviderTest.java | 2 +-
.../ambari/server/proxy/ProxyServiceTest.java | 10 +-
.../view/ViewAmbariStreamProviderTest.java | 40 +++++++-
.../server/view/ViewURLStreamProviderTest.java | 98 +++++++++++++++++++-
.../ambari/view/AmbariStreamProvider.java | 23 ++++-
.../apache/ambari/view/URLStreamProvider.java | 48 ++++++++++
11 files changed, 324 insertions(+), 51 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/2e0fd3d8/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/URLStreamProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/URLStreamProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/URLStreamProvider.java
index 1853021..1a8b085 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/URLStreamProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/URLStreamProvider.java
@@ -65,30 +65,31 @@ public class URLStreamProvider implements StreamProvider {
/**
* Provide the connection timeout for the underlying connection.
- *
+ *
* @param connectionTimeout
* time, in milliseconds, to attempt a connection
* @param readTimeout
* the read timeout in milliseconds
* @param configuration configuration holding TrustStore information
*/
- public URLStreamProvider(int connectionTimeout, int readTimeout,
- ComponentSSLConfiguration configuration) {
+ public URLStreamProvider(int connectionTimeout, int readTimeout,
+ ComponentSSLConfiguration configuration) {
this(connectionTimeout, readTimeout,
configuration.getTruststorePath(),
configuration.getTruststorePassword(),
configuration.getTruststoreType());
}
+
/**
* Provide the connection timeout for the underlying connection.
- *
+ *
* @param connectionTimeout
* time, in milliseconds, to attempt a connection
* @param readTimeout
* the read timeout in milliseconds
*/
public URLStreamProvider(int connectionTimeout, int readTimeout, String path,
- String password, String type) {
+ String password, String type) {
this.connTimeout = connectionTimeout;
this.readTimeout = readTimeout;
@@ -118,14 +119,50 @@ public class URLStreamProvider implements StreamProvider {
*
* @param spec the String to parse as a URL
* @param requestMethod the HTTP method (GET,POST,PUT,etc.).
- * @param params the body of the request; may be null
+ * @param body the body of the request; may be null
+ * @param headers the headers of the request; may be null
+ *
+ * @return a URL connection
+ *
+ * @throws IOException if the URL connection can not be established
+ */
+ public HttpURLConnection processURL(String spec, String requestMethod, String body, Map<String, List<String>> headers)
+ throws IOException {
+
+ return processURL(spec, requestMethod, body == null ? null : body.getBytes(), headers);
+ }
+
+ /**
+ * Get a URL connection from the given spec.
+ *
+ * @param spec the String to parse as a URL
+ * @param requestMethod the HTTP method (GET,POST,PUT,etc.).
+ * @param body the body of the request; may be null
* @param headers the headers of the request; may be null
*
* @return a URL connection
*
* @throws IOException if the URL connection can not be established
*/
- public HttpURLConnection processURL(String spec, String requestMethod, Object params, Map<String, List<String>> headers)
+ public HttpURLConnection processURL(String spec, String requestMethod, InputStream body, Map<String, List<String>> headers)
+ throws IOException {
+
+ return processURL(spec, requestMethod, body == null ? null : IOUtils.toByteArray(body), headers);
+ }
+
+ /**
+ * Get a URL connection from the given spec.
+ *
+ * @param spec the String to parse as a URL
+ * @param requestMethod the HTTP method (GET,POST,PUT,etc.).
+ * @param body the body of the request; may be null
+ * @param headers the headers of the request; may be null
+ *
+ * @return a URL connection
+ *
+ * @throws IOException if the URL connection can not be established
+ */
+ public HttpURLConnection processURL(String spec, String requestMethod, byte[] body, Map<String, List<String>> headers)
throws IOException {
if (LOG.isDebugEnabled()) {
LOG.debug("readFrom spec:" + spec);
@@ -164,14 +201,8 @@ public class URLStreamProvider implements StreamProvider {
}
}
- if (params != null) {
- byte[] info;
- if (params instanceof InputStream) {
- info = IOUtils.toByteArray((InputStream)params);
- } else {
- info = ((String)params).getBytes();
- }
- connection.getOutputStream().write(info);
+ if (body != null) {
+ connection.getOutputStream().write(body);
}
int statusCode = connection.getResponseCode();
http://git-wip-us.apache.org/repos/asf/ambari/blob/2e0fd3d8/ambari-server/src/main/java/org/apache/ambari/server/utils/HTTPUtils.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/utils/HTTPUtils.java b/ambari-server/src/main/java/org/apache/ambari/server/utils/HTTPUtils.java
index 89d3f14..cfb7128 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/utils/HTTPUtils.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/utils/HTTPUtils.java
@@ -50,7 +50,7 @@ public class HTTPUtils {
Map<String, List<String>> headers = new HashMap<String, List<String>>();
- HttpURLConnection connection = urlStreamProvider.processURL(url, "GET", null, headers);
+ HttpURLConnection connection = urlStreamProvider.processURL(url, "GET", (String) null, headers);
int responseCode = connection.getResponseCode();
InputStream resultInputStream = null;
http://git-wip-us.apache.org/repos/asf/ambari/blob/2e0fd3d8/ambari-server/src/main/java/org/apache/ambari/server/view/HttpImpersonatorImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/view/HttpImpersonatorImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/view/HttpImpersonatorImpl.java
index fe4e180..7dd4947 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/view/HttpImpersonatorImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/view/HttpImpersonatorImpl.java
@@ -137,7 +137,7 @@ public class HttpImpersonatorImpl implements HttpImpersonator {
Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put(impersonatorSetting.getDoAsParamName(), new ArrayList<String>() {{add(impersonatorSetting.getUsername()); }} );
- HttpURLConnection connection = urlStreamProvider.processURL(url, requestType, null, headers);
+ HttpURLConnection connection = urlStreamProvider.processURL(url, requestType, (String) null, headers);
int responseCode = connection.getResponseCode();
InputStream resultInputStream;
http://git-wip-us.apache.org/repos/asf/ambari/blob/2e0fd3d8/ambari-server/src/main/java/org/apache/ambari/server/view/ViewAmbariStreamProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewAmbariStreamProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewAmbariStreamProvider.java
index d8448b8..d36f562 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewAmbariStreamProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewAmbariStreamProvider.java
@@ -22,6 +22,7 @@ import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.AmbariSessionManager;
import org.apache.ambari.server.controller.internal.URLStreamProvider;
import org.apache.ambari.view.AmbariStreamProvider;
+import org.apache.commons.io.IOUtils;
import java.io.IOException;
import java.io.InputStream;
@@ -72,10 +73,23 @@ public class ViewAmbariStreamProvider implements AmbariStreamProvider {
// ----- AmbariStreamProvider -----------------------------------------------
@Override
- public InputStream readFrom(String path, String requestMethod, String params, Map<String, String> headers,
- boolean useAmbariSession)
- throws IOException {
+ public InputStream readFrom(String path, String requestMethod, String body, Map<String, String> headers,
+ boolean useAmbariSession) throws IOException {
+ return getInputStream(path, requestMethod, headers, useAmbariSession, body.getBytes());
+ }
+
+ @Override
+ public InputStream readFrom(String path, String requestMethod, InputStream body, Map<String, String> headers,
+ boolean useAmbariSession) throws IOException {
+
+ return getInputStream(path, requestMethod, headers, useAmbariSession, IOUtils.toByteArray(body));
+ }
+
+
+ // ----- helper methods ----------------------------------------------------
+ private InputStream getInputStream(String path, String requestMethod, Map<String, String> headers,
+ boolean useAmbariSession, byte[] body) throws IOException {
// add the Ambari session cookie to the given headers
if (useAmbariSession) {
String sessionId = ambariSessionManager.getCurrentSessionId();
@@ -102,7 +116,7 @@ public class ViewAmbariStreamProvider implements AmbariStreamProvider {
}
return streamProvider.processURL(controller.getAmbariServerURI(path.startsWith("/") ? path : "/" + path),
- requestMethod, params, headerMap).getInputStream();
+ requestMethod, body, headerMap).getInputStream();
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2e0fd3d8/ambari-server/src/main/java/org/apache/ambari/server/view/ViewURLStreamProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewURLStreamProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewURLStreamProvider.java
index 0b81e04..32c130d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewURLStreamProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewURLStreamProvider.java
@@ -21,6 +21,7 @@ package org.apache.ambari.server.view;
import org.apache.ambari.server.controller.internal.URLStreamProvider;
import org.apache.ambari.server.proxy.ProxyService;
import org.apache.ambari.view.ViewContext;
+import org.apache.commons.io.IOUtils;
import java.io.IOException;
import java.io.InputStream;
@@ -70,25 +71,50 @@ public class ViewURLStreamProvider implements org.apache.ambari.view.URLStreamPr
@Override
public InputStream readFrom(String spec, String requestMethod, String body, Map<String, String> headers)
throws IOException {
- // adapt the headers to the internal URLStreamProvider processURL signature
- Map<String, List<String>> headerMap = new HashMap<String, List<String>>();
- for (Map.Entry<String, String> entry : headers.entrySet()) {
- headerMap.put(entry.getKey(), Collections.singletonList(entry.getValue()));
- }
-
- HttpURLConnection connection = streamProvider.processURL(spec, requestMethod, body, headerMap);
-
- int responseCode = connection.getResponseCode();
+ return getInputStream(spec, requestMethod, headers, body.getBytes());
+ }
- return responseCode >= ProxyService.HTTP_ERROR_RANGE_START ?
- connection.getErrorStream() : connection.getInputStream();
+ @Override
+ public InputStream readFrom(String spec, String requestMethod, InputStream body, Map<String, String> headers)
+ throws IOException {
+ return getInputStream(spec, requestMethod, headers, IOUtils.toByteArray(body));
}
+
@Override
public InputStream readAs(String spec, String requestMethod, String body, Map<String, String> headers,
String userName)
throws IOException {
+ return readFrom(spec, requestMethod, body, addDoAsHeader(spec, headers, userName));
+ }
+
+ @Override
+ public InputStream readAs(String spec, String requestMethod, InputStream body, Map<String, String> headers,
+ String userName) throws IOException {
+ return readFrom(spec, requestMethod, body, addDoAsHeader(spec, headers, userName));
+ }
+
+
+ @Override
+ public InputStream readAsCurrent(String spec, String requestMethod, String body, Map<String, String> headers)
+ throws IOException {
+
+ return readAs(spec, requestMethod, body, headers, viewContext.getUsername());
+ }
+
+ @Override
+ public InputStream readAsCurrent(String spec, String requestMethod, InputStream body, Map<String, String> headers)
+ throws IOException {
+
+ return readAs(spec, requestMethod, body, headers, viewContext.getUsername());
+ }
+
+
+ // ----- helper methods ----------------------------------------------------
+
+ // add the "do as" header
+ private Map<String, String> addDoAsHeader(String spec, Map<String, String> headers, String userName) {
if (spec.toLowerCase().contains(DO_AS_PARAM)) {
throw new IllegalArgumentException("URL cannot contain \"" + DO_AS_PARAM + "\" parameter.");
}
@@ -100,15 +126,24 @@ public class ViewURLStreamProvider implements org.apache.ambari.view.URLStreamPr
}
headers.put(DO_AS_PARAM, userName);
-
- return readFrom(spec, requestMethod, body, headers);
+ return headers;
}
- @Override
- public InputStream readAsCurrent(String spec, String requestMethod, String body, Map<String, String> headers)
+ // get the input stream response from the underlying stream provider
+ private InputStream getInputStream(String spec, String requestMethod, Map<String, String> headers, byte[] info)
throws IOException {
+ // adapt the headers to the internal URLStreamProvider processURL signature
+ Map<String, List<String>> headerMap = new HashMap<String, List<String>>();
+ for (Map.Entry<String, String> entry : headers.entrySet()) {
+ headerMap.put(entry.getKey(), Collections.singletonList(entry.getValue()));
+ }
- return readAs(spec, requestMethod, body, headers, viewContext.getUsername());
+ HttpURLConnection connection = streamProvider.processURL(spec, requestMethod, info, headerMap);
+
+ int responseCode = connection.getResponseCode();
+
+ return responseCode >= ProxyService.HTTP_ERROR_RANGE_START ?
+ connection.getErrorStream() : connection.getInputStream();
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2e0fd3d8/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/URLStreamProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/URLStreamProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/URLStreamProviderTest.java
index ebed4db..7268ff2 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/URLStreamProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/URLStreamProviderTest.java
@@ -68,7 +68,7 @@ public class URLStreamProviderTest {
replay(urlStreamProvider, connection, appCookieManager);
- Assert.assertEquals(connection, urlStreamProvider.processURL("spec", "GET", null, headerMap));
+ Assert.assertEquals(connection, urlStreamProvider.processURL("spec", "GET", (String) null, headerMap));
verify(urlStreamProvider, connection, appCookieManager);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2e0fd3d8/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 8ad8889..ba8f01e 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
@@ -82,7 +82,7 @@ class ProxyServiceTest extends BaseServiceTest {
expect(getUriInfo().getRequestUri()).andReturn(uriMock);
expect(getUriInfo().getQueryParameters()).andReturn(queryParams);
expect(uriMock.getQuery()).andReturn("url=testurl");
- expect(streamProviderMock.processURL("testurl", "GET", null, headerParamsToForward)).andReturn(urlConnectionMock);
+ expect(streamProviderMock.processURL("testurl", "GET", (InputStream) null, headerParamsToForward)).andReturn(urlConnectionMock);
expect(urlConnectionMock.getResponseCode()).andReturn(200);
expect(urlConnectionMock.getContentType()).andReturn("text/plain");
expect(urlConnectionMock.getInputStream()).andReturn(is);
@@ -198,7 +198,7 @@ class ProxyServiceTest extends BaseServiceTest {
expect(getUriInfo().getRequestUri()).andReturn(uriMock);
expect(getUriInfo().getQueryParameters()).andReturn(queryParams);
expect(uriMock.getQuery()).andReturn("url=testurl");
- expect(streamProviderMock.processURL("testurl", "DELETE", null, headerParamsToForward)).andReturn(urlConnectionMock);
+ expect(streamProviderMock.processURL("testurl", "DELETE", (InputStream) null, headerParamsToForward)).andReturn(urlConnectionMock);
expect(urlConnectionMock.getResponseCode()).andReturn(200);
expect(urlConnectionMock.getContentType()).andReturn("text/plain");
expect(urlConnectionMock.getInputStream()).andReturn(is);
@@ -236,7 +236,7 @@ class ProxyServiceTest extends BaseServiceTest {
expect(getUriInfo().getRequestUri()).andReturn(uriMock);
expect(getUriInfo().getQueryParameters()).andReturn(queryParams);
expect(uriMock.getQuery()).andReturn("url=testurl");
- expect(streamProviderMock.processURL("testurl", "GET", null, headerParamsToForward)).andReturn(urlConnectionMock);
+ expect(streamProviderMock.processURL("testurl", "GET", (InputStream) null, headerParamsToForward)).andReturn(urlConnectionMock);
expect(urlConnectionMock.getResponseCode()).andReturn(400).times(2);
expect(urlConnectionMock.getContentType()).andReturn("text/plain");
expect(urlConnectionMock.getErrorStream()).andReturn(es);
@@ -274,7 +274,7 @@ class ProxyServiceTest extends BaseServiceTest {
expect(getUriInfo().getRequestUri()).andReturn(uriMock);
expect(getUriInfo().getQueryParameters()).andReturn(queryParams);
expect(uriMock.getQuery()).andReturn("url=testurl");
- expect(streamProviderMock.processURL("testurl", "GET", null, headerParamsToForward)).andReturn(urlConnectionMock);
+ expect(streamProviderMock.processURL("testurl", "GET", (InputStream) null, headerParamsToForward)).andReturn(urlConnectionMock);
expect(urlConnectionMock.getResponseCode()).andReturn(200);
expect(urlConnectionMock.getContentType()).andReturn("application/json");
expect(urlConnectionMock.getInputStream()).andReturn(new ByteArrayInputStream("{ \"test\":\"test\" }".getBytes()));
@@ -314,7 +314,7 @@ class ProxyServiceTest extends BaseServiceTest {
expect(urlConnectionMock.getInputStream()).andReturn(is);
PowerMock.expectNew(URLStreamProvider.class, 20000, 15000, null, null, null).andReturn(streamProviderMock);
expect(streamProviderMock.processURL("http://server:8188/ws/v1/timeline/HIVE_QUERY_ID?fields=events,primary" +
- "filters&limit=10&primaryFilter=user:hiveuser1", "GET", null, headerParamsToForward)).andReturn(urlConnectionMock);
+ "filters&limit=10&primaryFilter=user:hiveuser1", "GET", (InputStream) null, headerParamsToForward)).andReturn(urlConnectionMock);
PowerMock.replay(streamProviderMock, URLStreamProvider.class);
replay(getUriInfo(), urlConnectionMock, getHttpHeaders());
ps.processGetRequestForwarding(getHttpHeaders(),getUriInfo());
http://git-wip-us.apache.org/repos/asf/ambari/blob/2e0fd3d8/ambari-server/src/test/java/org/apache/ambari/server/view/ViewAmbariStreamProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewAmbariStreamProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewAmbariStreamProviderTest.java
index 94f5e86..d424a29 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewAmbariStreamProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewAmbariStreamProviderTest.java
@@ -24,6 +24,7 @@ import org.apache.ambari.server.controller.internal.URLStreamProvider;
import org.junit.Assert;
import org.junit.Test;
+import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.util.Collections;
@@ -31,7 +32,9 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import static org.easymock.EasyMock.aryEq;
import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.eq;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
@@ -59,7 +62,7 @@ public class ViewAmbariStreamProviderTest {
expect(sessionManager.getSessionCookie()).andReturn("AMBARISESSIONID");
expect(controller.getAmbariServerURI("/spec")).andReturn("http://c6401.ambari.apache.org:8080/spec");
- expect(streamProvider.processURL("http://c6401.ambari.apache.org:8080/spec", "requestMethod", "params", headerMap)).andReturn(urlConnection);
+ expect(streamProvider.processURL(eq("http://c6401.ambari.apache.org:8080/spec"), eq("requestMethod"), aryEq("params".getBytes()), eq(headerMap))).andReturn(urlConnection);
expect(urlConnection.getInputStream()).andReturn(inputStream);
replay(streamProvider, sessionManager, controller, urlConnection, inputStream);
@@ -70,4 +73,39 @@ public class ViewAmbariStreamProviderTest {
verify(streamProvider, sessionManager, urlConnection, inputStream);
}
+
+ @Test
+ public void testReadFromNew() throws Exception {
+ URLStreamProvider streamProvider = createNiceMock(URLStreamProvider.class);
+ AmbariSessionManager sessionManager = createNiceMock(AmbariSessionManager.class);
+ AmbariManagementController controller = createNiceMock(AmbariManagementController.class);
+
+ HttpURLConnection urlConnection = createNiceMock(HttpURLConnection.class);
+ InputStream inputStream = createNiceMock(InputStream.class);
+
+ InputStream body = new ByteArrayInputStream("params".getBytes());
+
+ Map<String, String> headers = new HashMap<String, String>();
+ headers.put("header", "headerValue");
+ headers.put("Cookie", "FOO=bar");
+
+ Map<String, List<String>> headerMap = new HashMap<String, List<String>>();
+ headerMap.put("header", Collections.singletonList("headerValue"));
+ headerMap.put("Cookie", Collections.singletonList("FOO=bar; AMBARISESSIONID=abcdefg"));
+
+ expect(sessionManager.getCurrentSessionId()).andReturn("abcdefg");
+ expect(sessionManager.getSessionCookie()).andReturn("AMBARISESSIONID");
+
+ expect(controller.getAmbariServerURI("/spec")).andReturn("http://c6401.ambari.apache.org:8080/spec");
+ expect(streamProvider.processURL(eq("http://c6401.ambari.apache.org:8080/spec"), eq("requestMethod"), aryEq("params".getBytes()), eq(headerMap))).andReturn(urlConnection);
+ expect(urlConnection.getInputStream()).andReturn(inputStream);
+
+ replay(streamProvider, sessionManager, controller, urlConnection, inputStream);
+
+ ViewAmbariStreamProvider viewAmbariStreamProvider = new ViewAmbariStreamProvider(streamProvider, sessionManager, controller);
+
+ Assert.assertEquals(inputStream, viewAmbariStreamProvider.readFrom("spec", "requestMethod", body, headers, true));
+
+ verify(streamProvider, sessionManager, urlConnection, inputStream);
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/2e0fd3d8/ambari-server/src/test/java/org/apache/ambari/server/view/ViewURLStreamProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewURLStreamProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewURLStreamProviderTest.java
index 4a265e7..908e63c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewURLStreamProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewURLStreamProviderTest.java
@@ -23,6 +23,7 @@ import org.apache.ambari.view.ViewContext;
import org.junit.Assert;
import org.junit.Test;
+import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.util.Collections;
@@ -30,7 +31,9 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import static org.easymock.EasyMock.aryEq;
import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.eq;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
@@ -51,7 +54,7 @@ public class ViewURLStreamProviderTest {
Map<String, List<String>> headerMap = new HashMap<String, List<String>>();
headerMap.put("header", Collections.singletonList("headerValue"));
- expect(streamProvider.processURL("spec", "requestMethod", "params", headerMap)).andReturn(urlConnection);
+ expect(streamProvider.processURL(eq("spec"), eq("requestMethod"), aryEq("params".getBytes()), eq(headerMap))).andReturn(urlConnection);
expect(urlConnection.getInputStream()).andReturn(inputStream);
replay(streamProvider, urlConnection, inputStream);
@@ -79,7 +82,7 @@ public class ViewURLStreamProviderTest {
headerMap.put("header", Collections.singletonList("headerValue"));
headerMap.put("doAs", Collections.singletonList("joe"));
- expect(streamProvider.processURL("spec", "requestMethod", "params", headerMap)).andReturn(urlConnection);
+ expect(streamProvider.processURL(eq("spec"), eq("requestMethod"), aryEq("params".getBytes()), eq(headerMap))).andReturn(urlConnection);
expect(urlConnection.getInputStream()).andReturn(inputStream);
replay(streamProvider, urlConnection, inputStream);
@@ -107,7 +110,7 @@ public class ViewURLStreamProviderTest {
headerMap.put("header", Collections.singletonList("headerValue"));
headerMap.put("doAs", Collections.singletonList("joe"));
- expect(streamProvider.processURL("spec", "requestMethod", "params", headerMap)).andReturn(urlConnection);
+ expect(streamProvider.processURL(eq("spec"), eq("requestMethod"), aryEq("params".getBytes()), eq(headerMap))).andReturn(urlConnection);
expect(urlConnection.getInputStream()).andReturn(inputStream);
expect(viewContext.getUsername()).andReturn("joe").anyTimes();
@@ -119,4 +122,93 @@ public class ViewURLStreamProviderTest {
verify(streamProvider, urlConnection, inputStream, viewContext);
}
+
+ @Test
+ public void testReadFromInputStream() throws Exception {
+
+ URLStreamProvider streamProvider = createNiceMock(URLStreamProvider.class);
+ HttpURLConnection urlConnection = createNiceMock(HttpURLConnection.class);
+ InputStream inputStream = createNiceMock(InputStream.class);
+ ViewContext viewContext = createNiceMock(ViewContext.class);
+
+ InputStream body = new ByteArrayInputStream("params".getBytes());
+
+ Map<String, String> headers = new HashMap<String, String>();
+ headers.put("header", "headerValue");
+
+ Map<String, List<String>> headerMap = new HashMap<String, List<String>>();
+ headerMap.put("header", Collections.singletonList("headerValue"));
+
+ expect(streamProvider.processURL(eq("spec"), eq("requestMethod"), aryEq("params".getBytes()), eq(headerMap))).andReturn(urlConnection);
+ expect(urlConnection.getInputStream()).andReturn(inputStream);
+
+ replay(streamProvider, urlConnection, inputStream);
+
+ ViewURLStreamProvider viewURLStreamProvider = new ViewURLStreamProvider(viewContext, streamProvider);
+
+ Assert.assertEquals(inputStream, viewURLStreamProvider.readFrom("spec", "requestMethod", body, headers));
+
+ verify(streamProvider, urlConnection, inputStream);
+ }
+
+ @Test
+ public void testReadAsInputStream() throws Exception {
+
+ URLStreamProvider streamProvider = createNiceMock(URLStreamProvider.class);
+ HttpURLConnection urlConnection = createNiceMock(HttpURLConnection.class);
+ InputStream inputStream = createNiceMock(InputStream.class);
+ ViewContext viewContext = createNiceMock(ViewContext.class);
+
+ InputStream body = new ByteArrayInputStream("params".getBytes());
+
+ Map<String, String> headers = new HashMap<String, String>();
+ headers.put("header", "headerValue");
+ headers.put("doAs", "joe");
+
+ Map<String, List<String>> headerMap = new HashMap<String, List<String>>();
+ headerMap.put("header", Collections.singletonList("headerValue"));
+ headerMap.put("doAs", Collections.singletonList("joe"));
+
+ expect(streamProvider.processURL(eq("spec"), eq("requestMethod"), aryEq("params".getBytes()), eq(headerMap))).andReturn(urlConnection);
+ expect(urlConnection.getInputStream()).andReturn(inputStream);
+
+ replay(streamProvider, urlConnection, inputStream);
+
+ ViewURLStreamProvider viewURLStreamProvider = new ViewURLStreamProvider(viewContext, streamProvider);
+
+ Assert.assertEquals(inputStream, viewURLStreamProvider.readAs("spec", "requestMethod", body, headers, "joe"));
+
+ verify(streamProvider, urlConnection, inputStream);
+ }
+
+ @Test
+ public void testReadAsCurrentInputStream() throws Exception {
+
+ URLStreamProvider streamProvider = createNiceMock(URLStreamProvider.class);
+ HttpURLConnection urlConnection = createNiceMock(HttpURLConnection.class);
+ InputStream inputStream = createNiceMock(InputStream.class);
+ ViewContext viewContext = createNiceMock(ViewContext.class);
+
+ InputStream body = new ByteArrayInputStream("params".getBytes());
+
+ Map<String, String> headers = new HashMap<String, String>();
+ headers.put("header", "headerValue");
+ headers.put("doAs", "joe");
+
+ Map<String, List<String>> headerMap = new HashMap<String, List<String>>();
+ headerMap.put("header", Collections.singletonList("headerValue"));
+ headerMap.put("doAs", Collections.singletonList("joe"));
+
+ expect(streamProvider.processURL(eq("spec"), eq("requestMethod"), aryEq("params".getBytes()), eq(headerMap))).andReturn(urlConnection);
+ expect(urlConnection.getInputStream()).andReturn(inputStream);
+ expect(viewContext.getUsername()).andReturn("joe").anyTimes();
+
+ replay(streamProvider, urlConnection, inputStream, viewContext);
+
+ ViewURLStreamProvider viewURLStreamProvider = new ViewURLStreamProvider(viewContext, streamProvider);
+
+ Assert.assertEquals(inputStream, viewURLStreamProvider.readAsCurrent("spec", "requestMethod", body, headers));
+
+ verify(streamProvider, urlConnection, inputStream, viewContext);
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2e0fd3d8/ambari-views/src/main/java/org/apache/ambari/view/AmbariStreamProvider.java
----------------------------------------------------------------------
diff --git a/ambari-views/src/main/java/org/apache/ambari/view/AmbariStreamProvider.java b/ambari-views/src/main/java/org/apache/ambari/view/AmbariStreamProvider.java
index 0f8367a..ce91676 100644
--- a/ambari-views/src/main/java/org/apache/ambari/view/AmbariStreamProvider.java
+++ b/ambari-views/src/main/java/org/apache/ambari/view/AmbariStreamProvider.java
@@ -31,7 +31,7 @@ public interface AmbariStreamProvider {
*
* @param path the String to parse as an Ambari endpoint (e.g. /api/v1/users)
* @param requestMethod the HTTP method (GET,POST,PUT,etc.).
- * @param params the body of the request; may be null
+ * @param body the body of the request; may be null
* @param headers the headers of the request; may be null
* @param useAmbariSession indicates that the current Ambari session cookie should be set for the request
*
@@ -39,7 +39,22 @@ public interface AmbariStreamProvider {
*
* @throws java.io.IOException if an error occurred connecting to the server
*/
- public InputStream readFrom(String path, String requestMethod, String params,
- Map<String, String> headers, boolean useAmbariSession)
- throws IOException;
+ public InputStream readFrom(String path, String requestMethod, String body,
+ Map<String, String> headers, boolean useAmbariSession) throws IOException;
+
+ /**
+ * Read from the input stream specified by the given path on the Ambari server.
+ *
+ * @param path the String to parse as an Ambari endpoint (e.g. /api/v1/users)
+ * @param requestMethod the HTTP method (GET,POST,PUT,etc.).
+ * @param body the body of the request; may be null
+ * @param headers the headers of the request; may be null
+ * @param useAmbariSession indicates that the current Ambari session cookie should be set for the request
+ *
+ * @return the input stream
+ *
+ * @throws java.io.IOException if an error occurred connecting to the server
+ */
+ public InputStream readFrom(String path, String requestMethod, InputStream body,
+ Map<String, String> headers, boolean useAmbariSession) throws IOException;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2e0fd3d8/ambari-views/src/main/java/org/apache/ambari/view/URLStreamProvider.java
----------------------------------------------------------------------
diff --git a/ambari-views/src/main/java/org/apache/ambari/view/URLStreamProvider.java b/ambari-views/src/main/java/org/apache/ambari/view/URLStreamProvider.java
index 2b667e4..f98f09a 100644
--- a/ambari-views/src/main/java/org/apache/ambari/view/URLStreamProvider.java
+++ b/ambari-views/src/main/java/org/apache/ambari/view/URLStreamProvider.java
@@ -42,6 +42,21 @@ public interface URLStreamProvider {
throws IOException;
/**
+ * Read from the input stream specified by the given URL spec.
+ *
+ * @param spec the String to parse as a URL
+ * @param requestMethod the HTTP method (GET,POST,PUT,etc.).
+ * @param body the body of the request; may be null
+ * @param headers the headers of the request; may be null
+ *
+ * @return the input stream
+ *
+ * @throws IOException if an error occurred connecting to the server
+ */
+ public InputStream readFrom(String spec, String requestMethod, InputStream body, Map<String, String> headers)
+ throws IOException;
+
+ /**
* Read from the input stream specified by the given URL spec as the given user. This method sets the
* "doAs" user header to impersonate the user over the request.
*
@@ -60,6 +75,23 @@ public interface URLStreamProvider {
throws IOException;
/**
+ * Read from the input stream specified by the given URL spec as the given user. This method sets the
+ * "doAs" user header to impersonate the user over the request.
+ *
+ * @param spec the String to parse as a URL
+ * @param requestMethod the HTTP method (GET,POST,PUT,etc.).
+ * @param body the body of the request; may be null
+ * @param headers the headers of the request; may be null
+ * @param userName the "doAs" user name
+ *
+ * @return the input stream
+ *
+ * @throws IOException if an error occurred connecting to the server
+ */
+ public InputStream readAs(String spec, String requestMethod, InputStream body, Map<String, String> headers,
+ String userName) throws IOException;
+
+ /**
* Read from the input stream specified by the given URL spec as the current user. This method sets the
* "doAs" user header to impersonate the user over the request.
*
@@ -75,4 +107,20 @@ public interface URLStreamProvider {
public InputStream readAsCurrent(String spec, String requestMethod, String body, Map<String, String> headers)
throws IOException;
+ /**
+ * Read from the input stream specified by the given URL spec as the current user. This method sets the
+ * "doAs" user header to impersonate the user over the request.
+ *
+ * @param spec the String to parse as a URL
+ * @param requestMethod the HTTP method (GET,POST,PUT,etc.).
+ * @param body the body of the request; may be null
+ * @param headers the headers of the request; may be null
+ *
+ * @return the input stream
+ *
+ * @throws IOException if an error occurred connecting to the server
+ */
+ public InputStream readAsCurrent(String spec, String requestMethod, InputStream body, Map<String, String> headers)
+ throws IOException;
+
}