Repository: ambari
Updated Branches:
  refs/heads/trunk 611cb6582 -> 655e8018a


AMBARI-5052. Proxied API requests do not return error details.(vbrodetskyi)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/655e8018
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/655e8018
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/655e8018

Branch: refs/heads/trunk
Commit: 655e8018a3cc68eba45b0925427be35eec0ac20c
Parents: 611cb65
Author: Vitaly Brodetskyi <[email protected]>
Authored: Wed Mar 12 19:11:26 2014 +0200
Committer: Vitaly Brodetskyi <[email protected]>
Committed: Wed Mar 12 19:11:26 2014 +0200

----------------------------------------------------------------------
 .../apache/ambari/server/proxy/ProxyService.java |  9 ++++++---
 .../ambari/server/proxy/ProxyServiceTest.java    | 19 +++++++++++++++----
 2 files changed, 21 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/655e8018/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 cb07a0b..30e998b 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
@@ -93,15 +93,18 @@ public class ProxyService {
       try {
         HttpURLConnection connection = urlStreamProvider.processURL(url, 
requestType, body, getHeaderParamsToForward(headers));
         int responseCode = connection.getResponseCode();
+        InputStream resultInputStream = null;
         if (responseCode >= HTTP_ERROR_RANGE_START) {
-          throw new WebApplicationException(connection.getResponseCode());
+          resultInputStream = connection.getErrorStream();
+        } else {
+          resultInputStream = connection.getInputStream();
         }
         String contentType = connection.getContentType();
         Response.ResponseBuilder rb = Response.status(responseCode);
         if (contentType.indexOf(APPLICATION_JSON) != -1) {
-          rb.entity(new Gson().fromJson(new 
InputStreamReader(connection.getInputStream()), Map.class));
+          rb.entity(new Gson().fromJson(new 
InputStreamReader(resultInputStream), Map.class));
         } else {
-          rb.entity(connection.getInputStream());
+          rb.entity(resultInputStream);
         }
         return rb.type(contentType).build();
       } catch (IOException e) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/655e8018/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 9b824fd..2c1f1bc 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
@@ -205,12 +205,15 @@ class ProxyServiceTest extends BaseServiceTest {
     assertSame(resultForDeleteRequest, responseMock);
   }
 
-  @Test(expected = WebApplicationException.class)
+  @Test
   public void testResponseWithError() throws Exception {
     ProxyService ps = new ProxyService();
     URLStreamProvider streamProviderMock = 
PowerMock.createNiceMock(URLStreamProvider.class);
     HttpURLConnection urlConnectionMock = createMock(HttpURLConnection.class);
+    Response.ResponseBuilder responseBuilderMock = 
PowerMock.createMock(ResponseBuilderImpl.class);
     URI uriMock = PowerMock.createMock(URI.class);
+    Response responseMock = createMock(ResponseImpl.class);
+    InputStream es = new ByteArrayInputStream("error".getBytes());
     MultivaluedMap<String, String> headerParams = new MultivaluedMapImpl();
     Map<String, List<String>> headerParamsToForward = new HashMap<String, 
List<String>>();
     headerParams.add("AmbariProxy-User-Remote","testuser");
@@ -218,16 +221,24 @@ class ProxyServiceTest extends BaseServiceTest {
     List<String> userRemoteParams = new LinkedList<String>();
     userRemoteParams.add("testuser");
     headerParamsToForward.put("User-Remote", userRemoteParams);
+    PowerMock.mockStatic(Response.class);
     expect(getHttpHeaders().getRequestHeaders()).andReturn(headerParams);
     
expect(getHttpHeaders().getRequestHeader("AmbariProxy-User-Remote")).andReturn(userRemoteParams);
     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);
+    expect(urlConnectionMock.getResponseCode()).andReturn(400).times(2);
+    expect(urlConnectionMock.getContentType()).andReturn("text/plain");
+    expect(urlConnectionMock.getErrorStream()).andReturn(es);
+    expect(Response.status(400)).andReturn(responseBuilderMock);
+    expect(responseBuilderMock.entity(es)).andReturn(responseBuilderMock);
+    
expect(responseBuilderMock.type("text/plain")).andReturn(responseBuilderMock);
+    expect(responseBuilderMock.build()).andReturn(responseMock);
     PowerMock.expectNew(URLStreamProvider.class, 20000, 15000, null, null, 
null).andReturn(streamProviderMock);
-    PowerMock.replay(streamProviderMock, URLStreamProvider.class, uriMock, 
URI.class);
+    PowerMock.replay(streamProviderMock, URLStreamProvider.class, uriMock, 
URI.class, Response.class, responseBuilderMock);
     replay(getUriInfo(), urlConnectionMock, getHttpHeaders());
-    ps.processGetRequestForwarding(getHttpHeaders(),getUriInfo());
+    Response resultForErrorRequest = 
ps.processGetRequestForwarding(getHttpHeaders(),getUriInfo());
+    assertSame(resultForErrorRequest, responseMock);
   }
 
   @Test

Reply via email to