@Test public void testTemporaryRedirect() throws IOException, URISyntaxException { HttpResponse redirectResponse = HttpResponse.builder().statusCode(307) .header("Location", "https://www.redirect.com").build(); HttpResponse successfulResponse = HttpResponse.builder().statusCode(200).content(null) .build(); final Request<?> request = new DefaultRequest<String>(new AmazonWebServiceRequest() {
final HttpResponse testResponse = new HttpResponse.Builder().build();
.content(new ByteArrayInputStream(new byte[0])) .statusCode(200) .statusText("OK") .build();
.statusCode(statusCode) .statusText(statusText) .content(content); for (final Map.Entry<String, List<String>> header : connection.getHeaderFields().entrySet()) { builder.header(header.getKey(), header.getValue().get(0)); return builder.build();
.statusCode(statusCode) .statusText(statusText) .content(content); for (final Map.Entry<String, List<String>> header : connection.getHeaderFields().entrySet()) { builder.header(header.getKey(), header.getValue().get(0)); return builder.build();
@Override public HttpResponse execute(HttpRequest request) throws IOException { HttpUriRequest httpRequest = createHttpRequest(request); org.apache.http.HttpResponse httpResponse = httpClient.execute(httpRequest); String statusText = httpResponse.getStatusLine().getReasonPhrase(); int statusCode = httpResponse.getStatusLine().getStatusCode(); InputStream content = null; if (httpResponse.getEntity() != null) { content = httpResponse.getEntity().getContent(); } HttpResponse.Builder builder = HttpResponse.builder() .statusCode(statusCode) .statusText(statusText) .content(content); for (Header header : httpResponse.getAllHeaders()) { builder.header(header.getName(), header.getValue()); } return builder.build(); }
@Override public HttpResponse execute(HttpRequest request) throws IOException { HttpUriRequest httpRequest = createHttpRequest(request); org.apache.http.HttpResponse httpResponse = httpClient.execute(httpRequest); String statusText = httpResponse.getStatusLine().getReasonPhrase(); int statusCode = httpResponse.getStatusLine().getStatusCode(); InputStream content = null; if (httpResponse.getEntity() != null) { content = httpResponse.getEntity().getContent(); } HttpResponse.Builder builder = HttpResponse.builder() .statusCode(statusCode) .statusText(statusText) .content(content); for (Header header : httpResponse.getAllHeaders()) { builder.header(header.getName(), header.getValue()); } return builder.build(); }
/** * Creates a builder for {@link HttpResponse}. * * @return a builder */ public static Builder builder() { return new Builder(); }
/** * Creates a builder for {@link HttpResponse}. * * @return a builder */ public static Builder builder() { return new Builder(); }
@Test public void testHandle() throws Exception { HttpResponse response = new HttpResponse.Builder() .header(Headers.REQUEST_ID, "testId") .header(Headers.EXTENDED_REQUEST_ID, "extendedId") .header(Headers.S3_USER_METADATA_PREFIX + "userKey", "userValue") .header(Headers.LAST_MODIFIED, "Sun, 1 Jan 2006 12:00:00 GMT") .header(Headers.CONTENT_LENGTH, "5") .header(Headers.ETAG, "Etag") .header(Headers.EXPIRES, "Sun, 1 Jan 2006 12:00:00 GMT") .header(Headers.EXPIRATION, "expiry-date=\"Fri, 21 Dec 2012 00:00:00 GMT\", rule-id=\"Rule for testfile.txt\"") .header(Headers.RESTORE, "ongoing-request=\"false\", expiry-date=\"Wed, 07 Nov 2012 00:00:00 GMT\"") .header("UndefinedKey", "UndefinedValue") .header(Headers.STORAGE_CLASS, "STANDARD_IA") .build();
@Test public void testPopulateObjectMetadata() { HttpResponse response = new HttpResponse.Builder() .header(Headers.REQUEST_ID, "testId") .header(Headers.EXTENDED_REQUEST_ID, "extendedId") .header(Headers.S3_USER_METADATA_PREFIX + "userKey", "userValue") .header(Headers.LAST_MODIFIED, "Sun, 1 Jan 2006 12:00:00 GMT") .header(Headers.CONTENT_LENGTH, "5") .header(Headers.ETAG, "Etag") .header(Headers.EXPIRES, "Sun, 1 Jan 2006 12:00:00 GMT") .header(Headers.EXPIRATION, "expiry-date=\"Fri, 21 Dec 2012 00:00:00 GMT\", rule-id=\"Rule for testfile.txt\"") .header(Headers.RESTORE, "ongoing-request=\"false\", expiry-date=\"Wed, 07 Nov 2012 00:00:00 GMT\"") .header("UndefinedKey", "UndefinedValue") .header(Headers.STORAGE_CLASS, "STANDARD_IA") .build();
List<Unmarshaller<AmazonServiceException, Node>> unmarshallerList = new ArrayList<Unmarshaller<AmazonServiceException, Node>>(); String xmlResponse = "<error>TestError</error>"; HttpResponse errorResponse = new HttpResponse.Builder() .statusCode(400) .statusText("Error") .content(new ByteArrayInputStream(xmlResponse.getBytes(StringUtils.UTF8))) .build();
.statusCode(statusCode) .statusText(statusText) .content(content); for (final Map.Entry<String, List<String>> header : connection.getHeaderFields().entrySet()) { builder.header(header.getKey(), header.getValue().get(0)); return builder.build();
@Test public void testHandleErrorResponse() throws IOException { final Request<?> request = new DefaultRequest<String>("ServiceName"); final HttpResponse httpResponse = new HttpResponse.Builder().statusText("TestResponse") .statusCode(400).build(); HttpResponseHandler<AmazonServiceException> errorResponseHandler = new HttpResponseHandler<AmazonServiceException>() { @Override public AmazonServiceException handle(HttpResponse response) throws Exception { assertSame(response, httpResponse); AmazonServiceException ase = new AmazonServiceException("Test"); ase.setErrorCode("TestError"); ase.setErrorType(ErrorType.Service); ase.setServiceName(request.getServiceName()); ase.setStatusCode(response.getStatusCode()); return ase; } @Override public boolean needsConnectionLeftOpen() { return false; } }; AmazonServiceException e = client.handleErrorResponse(request, errorResponseHandler, httpResponse); assertEquals(e.getStatusCode(), 400); assertEquals(e.getErrorCode(), "TestError"); assertEquals(e.getErrorType(), ErrorType.Service); assertEquals(e.getServiceName(), "ServiceName"); }
@Test public void testAfterResponse() { final Request<?> testRequest = new DefaultRequest<String>("test"); final Response<?> testResponse = new Response<String>("test", new HttpResponse.Builder().build()); final List<Object> calls = new ArrayList<Object>(); List<RequestHandler2> handlers = new ArrayList<RequestHandler2>(); RequestHandler2 handler = new RequestHandler2() { @Override public void beforeRequest(Request<?> request) { } @Override public void afterResponse(Request<?> request, Response<?> response) { assertSame(testRequest, request); assertSame(testResponse, response); calls.add(this); } @Override public void afterError(Request<?> request, Response<?> response, Exception e) { } }; handlers.add(handler); client.afterResponse(testRequest, handlers, testResponse, null); assertEquals(calls.size(), 1); assertTrue(calls.contains(handler)); }
@Test public void testAfterError() { final Request<?> testRequest = new DefaultRequest<String>("test"); final Response<?> testResponse = new Response<String>("test", new HttpResponse.Builder().build()); final List<Object> calls = new ArrayList<Object>(); List<RequestHandler2> handlers = new ArrayList<RequestHandler2>(); final AmazonClientException ace = new AmazonClientException("Test exception"); RequestHandler2 handler = new RequestHandler2() { @Override public void beforeRequest(Request<?> request) { } @Override public void afterResponse(Request<?> request, Response<?> response) { } @Override public void afterError(Request<?> request, Response<?> response, Exception e) { assertSame(testRequest, request); assertSame(testResponse, response); assertSame(e, ace); calls.add(this); } }; handlers.add(handler); client.afterError(testRequest, testResponse, handlers, ace); assertEquals(calls.size(), 1); assertTrue(calls.contains(handler)); }
@Test public void testUnmarshall() throws Exception { int statusCode = 299; String error = "error"; String log = "a very long log"; String content = "some content"; HttpResponse response = HttpResponse.builder() .statusCode(statusCode) .statusCode(statusCode) .header("X-Amz-Function-Error", error) .header("X-Amz-Log-Result", log) .content(new ByteArrayInputStream(content.getBytes(StringUtils.UTF8))) .build(); JsonUnmarshallerContext context = new JsonUnmarshallerContext(null, response); InvokeResultJsonUnmarshaller unmarshaller = InvokeResultJsonUnmarshaller.getInstance(); InvokeResult result = unmarshaller.unmarshall(context); assertTrue("status code", statusCode == result.getStatusCode()); assertEquals("error", error, result.getFunctionError()); assertEquals("log", log, result.getLogResult()); ByteBuffer payload = result.getPayload(); assertArrayEquals("same payload", content.getBytes(StringUtils.UTF8), payload.array()); } }
@Test public void testHandleWithContent() throws Exception { final ByteArrayInputStream bais = new ByteArrayInputStream( ("<data>Content</data>").getBytes(StringUtils.UTF8)); final HttpResponse response = new HttpResponse.Builder().header("testKey", "testValue") .header("x-amzn-RequestId", "99") .content(bais).build(); Unmarshaller<String, StaxUnmarshallerContext> unmarshaller = new Unmarshaller<String, StaxUnmarshallerContext>() { @Override public String unmarshall(StaxUnmarshallerContext in) throws Exception { in.nextEvent(); String content = in.readText(); assertEquals(content, "Content"); assertEquals(in.getHeader("testKey"), "testValue"); return content; } }; StaxResponseHandler<String> handler = new StaxResponseHandler<String>(unmarshaller); AmazonWebServiceResponse<String> awsr = handler.handle(response); assertEquals(awsr.getResponseMetadata().getRequestId(), "99"); assertEquals(awsr.getResult(), "Content"); }
@Test(expected = AmazonClientException.class) public void testDefaultErrorResponseHandlerNoUsefulUnmarshallers() throws Exception { List<Unmarshaller<AmazonServiceException, Node>> unmarshallerList = new ArrayList<Unmarshaller<AmazonServiceException, Node>>(); String xmlResponse = "<error>TestError</error>"; HttpResponse errorResponse = new HttpResponse.Builder() .statusCode(400) .statusText("Error") .content(new ByteArrayInputStream(xmlResponse.getBytes(StringUtils.UTF8))) .build(); final List<Boolean> called = new ArrayList<Boolean>(); Unmarshaller<AmazonServiceException, Node> incorrectUnmarshaller = new Unmarshaller<AmazonServiceException, Node>() { @Override public AmazonServiceException unmarshall(Node in) throws Exception { called.add(true); return null; } }; unmarshallerList.add(incorrectUnmarshaller); DefaultErrorResponseHandler handler = new DefaultErrorResponseHandler(unmarshallerList); try { handler.handle(errorResponse); } finally { assertEquals(called.size(), 1); assertTrue(called.get(0)); } }
@Test public void testHandleErrorResponseHandlerFailsWith503() throws IOException { Request<?> request = new DefaultRequest<String>("ServiceName"); final HttpResponse httpResponse = new HttpResponse.Builder() .statusText("Service unavailable") .statusCode(503).build(); HttpResponseHandler<AmazonServiceException> errorResponseHandler = new HttpResponseHandler<AmazonServiceException>() { @Override public AmazonServiceException handle(HttpResponse response) throws Exception { assertSame(response, httpResponse); throw new Exception("test"); } @Override public boolean needsConnectionLeftOpen() { return false; } }; AmazonServiceException e = client.handleErrorResponse(request, errorResponseHandler, httpResponse); assertEquals(e.getStatusCode(), 503); assertEquals(e.getErrorCode(), "Service unavailable"); assertEquals(e.getErrorType(), ErrorType.Service); assertEquals(e.getServiceName(), "ServiceName"); }