diff --git a/pom.xml b/pom.xml
index 0013af0..4f927ee 100644
--- a/pom.xml
+++ b/pom.xml
@@ -93,7 +93,7 @@
org.junit.jupiter
junit-jupiter-engine
- 5.2.0
+ 5.10.5
test
diff --git a/src/main/java/com/yetanalytics/xapi/client/StatementClient.java b/src/main/java/com/yetanalytics/xapi/client/StatementClient.java
index 758b1c7..d0f13c3 100644
--- a/src/main/java/com/yetanalytics/xapi/client/StatementClient.java
+++ b/src/main/java/com/yetanalytics/xapi/client/StatementClient.java
@@ -76,6 +76,7 @@ private List doPost(List statements, URI endpoint)
responseBody,
new TypeReference>(){});
} else {
+ EntityUtils.consumeQuietly(response.getEntity());
throw new StatementClientException(String.format(
"Error, Non-200 Status. Received: %s",
response.getStatusLine().getStatusCode()));
@@ -119,6 +120,7 @@ private StatementResult doGetStatementResult(URI endpoint)
String responseBody = EntityUtils.toString(response.getEntity());
return Mapper.getMapper().readValue(responseBody, StatementResult.class);
} else {
+ EntityUtils.consumeQuietly(response.getEntity());
throw new StatementClientException(String.format(
"Error, Non-200 Status. Received: %s",
response.getStatusLine().getStatusCode()));
@@ -134,6 +136,7 @@ private Statement doGetStatement(URI endpoint)
String responseBody = EntityUtils.toString(response.getEntity());
return Mapper.getMapper().readValue(responseBody, Statement.class);
} else {
+ EntityUtils.consumeQuietly(response.getEntity());
throw new StatementClientException(String.format(
"Error, Non-200 Status. Received: %s",
response.getStatusLine().getStatusCode()));
diff --git a/src/test/java/com/yetanalytics/xapi/client/StatementClientTest.java b/src/test/java/com/yetanalytics/xapi/client/StatementClientTest.java
index 2158ecd..3ed1e6d 100644
--- a/src/test/java/com/yetanalytics/xapi/client/StatementClientTest.java
+++ b/src/test/java/com/yetanalytics/xapi/client/StatementClientTest.java
@@ -19,12 +19,14 @@
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
import org.testcontainers.containers.GenericContainer;
import com.fasterxml.jackson.core.exc.StreamReadException;
import com.fasterxml.jackson.databind.DatabindException;
import com.yetanalytics.xapi.client.filters.StatementFilters;
+import com.yetanalytics.xapi.exception.StatementClientException;
import com.yetanalytics.xapi.model.Agent;
import com.yetanalytics.xapi.model.Statement;
import com.yetanalytics.xapi.util.Mapper;
@@ -216,5 +218,40 @@ public void testDateFilters() throws StreamReadException, DatabindException, IOE
List result = client.getStatements(filters);
assertNotNull(result);
+ }
+
+ @Test
+ @Timeout(value = 30, unit = TimeUnit.SECONDS)
+ public void testConnectionPoolOnError() throws StreamReadException, DatabindException, IOException {
+ LRS lrs = new LRS(getMappedHost(), KEY, SECRET);
+ StatementClient client = new StatementClient(lrs);
+
+ Statement statement = new Statement();
+ statement.setId(UUID.randomUUID());
+
+ // Try 1, handled, no issue
+ try {
+ client.postStatement(statement);
+ } catch (StatementClientException e) {
+ assertTrue(e.getMessage().contains("Error, Non-200 Status. Received: 400"));
+ }
+
+ // Try 2, handled, no issue
+ try {
+ client.postStatement(statement);
+ } catch (StatementClientException e) {
+ assertTrue(e.getMessage().contains("Error, Non-200 Status. Received: 400"));
+ }
+
+ // Try 3, will await indefinitely if connection pool is not cleaned up properly (timeout will trigger)
+ // Test will finish successfully if client is handling conns right
+ try {
+ client.postStatement(statement);
+ } catch (StatementClientException e) {
+ assertTrue(e.getMessage().contains("Error, Non-200 Status. Received: 400"));
+ }
+
+
+
}
}