package com.navercorp.pinpoint.plugin.httpclient4; import static com.navercorp.pinpoint.bootstrap.plugin.test.Expectations.*; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Future; import com.navercorp.pinpoint.plugin.WebServer; import org.apache.http.Consts; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.concurrent.BasicFuture; import org.apache.http.concurrent.FutureCallback; import org.apache.http.impl.nio.client.CloseableHttpAsyncClient; import org.apache.http.impl.nio.client.HttpAsyncClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import com.navercorp.pinpoint.bootstrap.plugin.test.PluginTestVerifier; import com.navercorp.pinpoint.bootstrap.plugin.test.PluginTestVerifierHolder; import com.navercorp.pinpoint.test.plugin.Dependency; import com.navercorp.pinpoint.test.plugin.PinpointPluginTestSuite; /** * @author netspider */ @RunWith(PinpointPluginTestSuite.class) @Dependency({ "org.apache.httpcomponents:httpasyncclient:[4.0,)", "org.nanohttpd:nanohttpd:2.3.1"}) public class ClosableAsyncHttpClientIT { private static WebServer webServer; @BeforeClass public static void BeforeClass() throws Exception { webServer = WebServer.newTestWebServer(); } @AfterClass public static void AfterClass() throws Exception { final WebServer copy = webServer; if (copy != null) { copy.stop(); webServer = null; } } @Test public void test() throws Exception { CloseableHttpAsyncClient httpClient = HttpAsyncClients.custom().useSystemProperties().build(); httpClient.start(); try { HttpPost httpRequest = new HttpPost(webServer.getCallHttpUrl()); List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("param1", "value1")); httpRequest.setEntity(new UrlEncodedFormEntity(params, Consts.UTF_8.name())); Future<HttpResponse> responseFuture = httpClient.execute(httpRequest, null); HttpResponse response = (HttpResponse) responseFuture.get(); if ((response != null) && (response.getEntity() != null)) { EntityUtils.consume(response.getEntity()); } } finally { httpClient.close(); } PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance(); verifier.printCache(); verifier.verifyTrace(event("HTTP_CLIENT_4_INTERNAL", CloseableHttpAsyncClient.class.getMethod("execute", HttpUriRequest.class, FutureCallback.class))); final String destinationId = webServer.getHostAndPort(); final String httpUrl = webServer.getCallHttpUrl(); verifier.verifyTrace(async( event("HTTP_CLIENT_4", Class.forName("org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl").getMethod("start"), null, null, destinationId, annotation("http.url", httpUrl), annotation("http.entity", "param1=value1")), event("ASYNC","Asynchronous Invocation"), event("HTTP_CLIENT_4_INTERNAL", BasicFuture.class.getMethod("completed", Object.class)) )); verifier.verifyTrace(event("HTTP_CLIENT_4_INTERNAL", BasicFuture.class.getMethod("get"))); verifier.verifyTraceCount(0); } }