Fix tests for Apache HTTP Client 4.5 and greater

Must explicitly close the underlying HttpClient instance to ensure
pooled connections are closed between between tests.  Otherwise stale
connections exist from previous test and which fail on use with
NoHttpResponseException errors.

https://hc.apache.org/httpcomponents-client-4.5.x/current/tutorial/html/connmgmt.html#d5e401

Change-Id: I318ea1006e8d7453d95960f5d33bbff2bb36735a
Signed-off-by: Brian de Alwis <bsd@acm.org>
diff --git a/org.eclipse.userstorage.oauth.tests/META-INF/MANIFEST.MF b/org.eclipse.userstorage.oauth.tests/META-INF/MANIFEST.MF
index 6ea59d5..e05dd70 100644
--- a/org.eclipse.userstorage.oauth.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.userstorage.oauth.tests/META-INF/MANIFEST.MF
@@ -9,4 +9,4 @@
 Require-Bundle: org.junit;bundle-version="4.12.0",
  org.mockito,
  org.apache.httpcomponents.httpclient;bundle-version="[4.0.0,5.0.0)";visibility:=reexport,
- org.apache.httpcomponents.httpcore;bundle-version="[4.0.0,5.0.0)";visibility:=reexport 
+ org.apache.httpcomponents.httpcore;bundle-version="[4.0.0,5.0.0)";visibility:=reexport
diff --git a/org.eclipse.userstorage/src/org/eclipse/userstorage/internal/Session.java b/org.eclipse.userstorage/src/org/eclipse/userstorage/internal/Session.java
index c9f7cd4..5b4085e 100644
--- a/org.eclipse.userstorage/src/org/eclipse/userstorage/internal/Session.java
+++ b/org.eclipse.userstorage/src/org/eclipse/userstorage/internal/Session.java
@@ -33,6 +33,8 @@
 import org.apache.http.client.fluent.Executor;
 import org.apache.http.client.fluent.Request;
 import org.apache.http.client.fluent.Response;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -68,6 +70,8 @@
    */
   private final CookieStore cookieStore;
 
+  private final CloseableHttpClient httpClient;
+
   private final Executor executor;
 
   protected final ICredentialsProvider credentialsProvider;
@@ -79,7 +83,8 @@
     this.service = service;
     this.credentialsProvider = credentialsProvider;
     cookieStore = new org.apache.http.impl.client.BasicCookieStore();
-    executor = Executor.newInstance().cookieStore(cookieStore);
+    httpClient = HttpClients.createDefault();
+    executor = Executor.newInstance(httpClient).cookieStore(cookieStore);
   }
 
   public IStorageService getService()
@@ -644,6 +649,17 @@
   public void close()
   {
     reset();
+    try
+    {
+      // During tests with Apache HttpClient 4.5, connections are pooled across tests
+      // even if the USSServer was disposed. Explicitly close the httpClient to ensure
+      // connections are properly closed.
+      httpClient.close();
+    }
+    catch (IOException ex)
+    {
+      // IGNORE
+    }
   }
 }