2017-08-10 2 views
0

Lorsque j'exécute mes tests, ils se bloquent au même moment: lorsque j'essaie d'envoyer une requête. Je comprends qu'il n'y a pas de connexions gratuites dans la piscine mais je ne sais pas comment résoudre ce problème. Des idées? code:Les tests se bloquent avec le problème de pool de connexion du client http

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
    public class ClientTest { 
private static String username = ITProperties.getInstance().getProperty("username"); 
private static String password = ITProperties.getInstance().getProperty("password"); 
private static CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); 
private static UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(username, password); 

public static final HttpClient HTTP_CLIENT = buildHttpClientWithCredentials(); 

public static HttpClient buildHttpClientWithCredentials() { 
    credentialsProvider.setCredentials(AuthScope.ANY, credentials); 
    return HttpClientBuilder.create().setDefaultCredentialsProvider(credentialsProvider).build(); 
} 

    @Test 
    public void testWhenClientNotFound() throws JSONException, IOException { 
     String requestBody = new RequestBody().setSum(100000L).setDay(7).toString(); 
     HttpPost request = RequestProvider.getPostRequest(URL, requestBody); 

     HttpResponse response = HTTP_CLIENT.execute(request); //HERE EXECUTION HANGS 

     assertThat(response.getStatusLine().getStatusCode()).isEqualTo(404); 
    } 

    ... 
    } 

De journal:

2017-08-10 12:24:13,787 DEBUG | main | org.apache.http.client.protocol.RequestAddCookies.process.123 | CookieSpec selected: default 
2017-08-10 12:24:13,787 DEBUG | main | org.apache.http.client.protocol.RequestAddCookies.process.168 | Cookie [version: 0][name: JSESSIONID][value: 00000000000000000000000000000][domain: localhost][path: /][expiry: null] match [localhost:9900/path/to/my/resource] 
2017-08-10 12:24:13,787 DEBUG | main | org.apache.http.client.protocol.RequestAuthCache.process.77 | Auth cache not set in the context 
2017-08-10 12:24:13,787 DEBUG | main | org.apache.http.impl.conn.PoolingHttpClientConnectionManager.requestConnection.255 | Connection request: [route: {}->http://localhost:9900][total kept alive: 0; route allocated: 2 of 2; total allocated: 2 of 20] 
2017-08-10 12:24:33,919 DEBUG | HikariPool-1 housekeeper | com.zaxxer.hikari.pool.HikariPool.logPoolState.378 | HikariPool-1 - Pool stats (total=2, active=0, idle=2, waiting=0) 
+0

a mis à jour le code. J'essaie de vérifier le code de réponse. – IKo

+0

c'est juste une URL. Comme: http: // localhost: 9900/chemin/vers/mon/ressource – IKo

Répondre

1

Tout d'abord, vous devez fermer votre réponse:

CloseableHttpResponse response = httpclient.execute(httpget); 
try { 
    <...> 
} finally { 
    response.close(); 
} 

Ensuite, vous pouvez configurer un pool de threads comme décrit here:

PoolingHttpClientConnectionManager cm = new 
PoolingHttpClientConnectionManager(); 
cm.setMaxTotal(200); 
cm.setDefaultMaxPerRoute(20); 
HttpHost localhost = new HttpHost("locahost", 80); 
cm.setMaxPerRoute(new HttpRoute(localhost), 50); 
CloseableHttpClient httpClient = HttpClients.custom() 
    .setConnectionManager(cm) 
    .build();