/* * Copyright The OpenTelemetry Authors * SPDX-License-Identifier: Apache-2.0 */ import io.opentelemetry.instrumentation.test.AgentTestTrait import io.opentelemetry.instrumentation.test.base.HttpClientTest import org.apache.commons.httpclient.HttpClient import org.apache.commons.httpclient.HttpConnectionManager import org.apache.commons.httpclient.HttpMethod import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager import org.apache.commons.httpclient.methods.DeleteMethod import org.apache.commons.httpclient.methods.GetMethod import org.apache.commons.httpclient.methods.HeadMethod import org.apache.commons.httpclient.methods.OptionsMethod import org.apache.commons.httpclient.methods.PostMethod import org.apache.commons.httpclient.methods.PutMethod import org.apache.commons.httpclient.methods.TraceMethod import spock.lang.Shared abstract class AbstractCommonsHttpClientTest extends HttpClientTest implements AgentTestTrait { @Shared HttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager() @Shared HttpClient client = buildClient(false) @Shared HttpClient clientWithReadTimeout = buildClient(true) def buildClient(boolean readTimeout) { HttpClient client = new HttpClient(connectionManager) client.setConnectionTimeout(CONNECT_TIMEOUT_MS) if (readTimeout) { client.setTimeout(READ_TIMEOUT_MS) } return client } HttpClient getClient(URI uri) { if (uri.toString().contains("/read-timeout")) { return clientWithReadTimeout } return client } @Override HttpMethod buildRequest(String method, URI uri, Map headers) { def request switch (method) { case "GET": request = new GetMethod(uri.toString()) break case "PUT": request = new PutMethod(uri.toString()) break case "POST": request = new PostMethod(uri.toString()) break case "HEAD": request = new HeadMethod(uri.toString()) break case "DELETE": request = new DeleteMethod(uri.toString()) break case "OPTIONS": request = new OptionsMethod(uri.toString()) break case "TRACE": request = new TraceMethod(uri.toString()) break default: throw new IllegalStateException("Unsupported method: " + method) } headers.each { request.setRequestHeader(it.key, it.value) } return request } @Override boolean testCircularRedirects() { false } @Override boolean testReusedRequest() { // apache commons throws an exception if the request is reused without being recycled first // at which point this test is not useful (and requires re-populating uri) false } @Override boolean testCallback() { false } @Override boolean testNonStandardHttpMethod() { false } }