use of com.ingenico.connect.gateway.sdk.java.CommunicationException in project connect-sdk-java by Ingenico-ePayments.
the class PaymentsClientTest method testCreateMethodNotAllowed.
/**
* Tests that a 405 response with a non-JSON response will throw a {@link CommunicationException}.
*/
@Test
@SuppressWarnings("resource")
public void testCreateMethodNotAllowed() {
Client client = Factory.createClient(session);
String responseBody = getResource("method_not_allowed.html");
whenPost().thenReturn(new Response(405, responseBody, Arrays.asList(new ResponseHeader("content-type", "text/html"))));
CreatePaymentRequest body = createRequest();
try {
client.merchant("merchantId").payments().create(body);
Assert.fail("Expected CommunicationException");
} catch (CommunicationException e) {
Assert.assertNotNull(e.getCause());
Assert.assertEquals(ResponseException.class, e.getCause().getClass());
Assert.assertTrue(e.getCause().toString().contains(responseBody));
}
}
use of com.ingenico.connect.gateway.sdk.java.CommunicationException in project connect-sdk-java by Ingenico-ePayments.
the class DefaultConnectionLoggerTest method testLogErrorOnly.
@Test
public void testLogErrorOnly() throws Exception {
// logging is enabled after the request is logged but before the error is logged
serverBootstrap.registerHandler("/v1/1234/services/testconnection", requestHandler);
HttpHost host = start();
Client client = createClient(host, 1000, 10);
TestLogger logger = new TestLogger();
setupRequestHandler(enableLogging(delayedAnswer(setHtmlResponse("notFound.html", 404), 100), client, logger));
try {
client.merchant("1234").services().testconnection();
Assert.fail("expected CommunicationException");
} catch (CommunicationException e) {
// expected
} finally {
client.close();
}
Assert.assertEquals(1, logger.entries.size());
TestLoggerEntry errorEntry = logger.entries.get(0);
Assert.assertNotNull(errorEntry.message);
Assert.assertNotNull(errorEntry.thrown);
assertError(errorEntry.message);
Assert.assertEquals(SocketTimeoutException.class, errorEntry.thrown.getClass());
}
use of com.ingenico.connect.gateway.sdk.java.CommunicationException in project connect-sdk-java by Ingenico-ePayments.
the class DefaultConnectionLoggerTest method testReadTimeout.
@Test
public void testReadTimeout() throws Exception {
// an exception is thrown before logging the response
serverBootstrap.registerHandler("/v1/1234/services/testconnection", requestHandler);
HttpHost host = start();
Client client = createClient(host, 1000, 10);
TestLogger logger = new TestLogger();
client.enableLogging(logger);
setupRequestHandler(delayedAnswer(setHtmlResponse("notFound.html", 404), 100));
try {
client.merchant("1234").services().testconnection();
Assert.fail("expected CommunicationException");
} catch (CommunicationException e) {
// expected
} finally {
client.close();
}
Assert.assertEquals(2, logger.entries.size());
TestLoggerEntry requestEntry = logger.entries.get(0);
Assert.assertNotNull(requestEntry.message);
Assert.assertNull(requestEntry.thrown);
TestLoggerEntry errorEntry = logger.entries.get(1);
Assert.assertNotNull(errorEntry.message);
Assert.assertNotNull(errorEntry.thrown);
assertRequestAndError(requestEntry.message, errorEntry.message, "testConnection");
Assert.assertEquals(SocketTimeoutException.class, errorEntry.thrown.getClass());
}
use of com.ingenico.connect.gateway.sdk.java.CommunicationException in project connect-sdk-java by Ingenico-ePayments.
the class DefaultConnection method executeRequest.
@SuppressWarnings("resource")
protected Response executeRequest(HttpUriRequest request) {
final String requestId = UUID.randomUUID().toString();
final long startTime = System.currentTimeMillis();
HttpContext context = new BasicHttpContext();
context.setAttribute(REQUEST_ID_ATTRIBUTE, requestId);
context.setAttribute(START_TIMME_ATTRIBUTE, startTime);
try {
CloseableHttpResponse httpResponse = httpClient.execute(request, context);
HttpEntity entity = httpResponse.getEntity();
try {
int statusCode = httpResponse.getStatusLine().getStatusCode();
String body = entity == null ? null : EntityUtils.toString(entity, CHARSET);
List<ResponseHeader> headers = getHeaders(httpResponse);
return new Response(statusCode, body, headers);
} finally {
/*
* Ensure that the entity content is fully consumed and the
* content stream, if exists, is closed so the connection can be
* reused. Do not close the httpResponse because that will
* prevent the connection from being reused.
*/
EntityUtils.consume(entity);
}
} catch (ClientProtocolException e) {
logError(requestId, e, startTime, communicatorLogger);
throw new CommunicationException(e);
} catch (IOException e) {
logError(requestId, e, startTime, communicatorLogger);
throw new CommunicationException(e);
} catch (RuntimeException e) {
logError(requestId, e, startTime, communicatorLogger);
throw e;
}
}
Aggregations