/* * Copyright 2020, OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import io.opentelemetry.auto.test.base.HttpClientTest import org.apache.http.HttpHost import org.apache.http.HttpRequest import org.apache.http.HttpResponse import org.apache.http.impl.client.DefaultHttpClient import org.apache.http.message.BasicHeader import org.apache.http.message.BasicHttpRequest import org.apache.http.params.HttpConnectionParams import org.apache.http.params.HttpParams import org.apache.http.protocol.BasicHttpContext import spock.lang.Shared import spock.lang.Timeout abstract class ApacheHttpClientTest extends HttpClientTest { @Shared def client = new DefaultHttpClient() def setupSpec() { HttpParams httpParams = client.getParams() HttpConnectionParams.setConnectionTimeout(httpParams, CONNECT_TIMEOUT_MS) HttpConnectionParams.setSoTimeout(httpParams, READ_TIMEOUT_MS) } @Override int doRequest(String method, URI uri, Map headers, Closure callback) { def request = createRequest(method, uri) headers.entrySet().each { request.addHeader(new BasicHeader(it.key, it.value)) } def response = executeRequest(request, uri) callback?.call() response.entity?.content?.close() // Make sure the connection is closed. return response.statusLine.statusCode } abstract T createRequest(String method, URI uri) abstract HttpResponse executeRequest(T request, URI uri) static String fullPathFromURI(URI uri) { StringBuilder builder = new StringBuilder() if (uri.getPath() != null) { builder.append(uri.getPath()) } if (uri.getQuery() != null) { builder.append('?') builder.append(uri.getQuery()) } if (uri.getFragment() != null) { builder.append('#') builder.append(uri.getFragment()) } return builder.toString() } } @Timeout(5) class ApacheClientHostRequest extends ApacheHttpClientTest { @Override BasicHttpRequest createRequest(String method, URI uri) { return new BasicHttpRequest(method, fullPathFromURI(uri)) } @Override HttpResponse executeRequest(BasicHttpRequest request, URI uri) { return client.execute(new HttpHost(uri.getHost(), uri.getPort()), request) } @Override boolean testRemoteConnection() { return false } } @Timeout(5) class ApacheClientHostRequestContext extends ApacheHttpClientTest { @Override BasicHttpRequest createRequest(String method, URI uri) { return new BasicHttpRequest(method, fullPathFromURI(uri)) } @Override HttpResponse executeRequest(BasicHttpRequest request, URI uri) { return client.execute(new HttpHost(uri.getHost(), uri.getPort()), request, new BasicHttpContext()) } @Override boolean testRemoteConnection() { return false } } @Timeout(5) class ApacheClientHostRequestResponseHandler extends ApacheHttpClientTest { @Override BasicHttpRequest createRequest(String method, URI uri) { return new BasicHttpRequest(method, fullPathFromURI(uri)) } @Override HttpResponse executeRequest(BasicHttpRequest request, URI uri) { return client.execute(new HttpHost(uri.getHost(), uri.getPort()), request, { response -> response }) } @Override boolean testRemoteConnection() { return false } } @Timeout(5) class ApacheClientHostRequestResponseHandlerContext extends ApacheHttpClientTest { @Override BasicHttpRequest createRequest(String method, URI uri) { return new BasicHttpRequest(method, fullPathFromURI(uri)) } @Override HttpResponse executeRequest(BasicHttpRequest request, URI uri) { return client.execute(new HttpHost(uri.getHost(), uri.getPort()), request, { response -> response }, new BasicHttpContext()) } @Override boolean testRemoteConnection() { return false } } @Timeout(5) class ApacheClientUriRequest extends ApacheHttpClientTest { @Override HttpUriRequest createRequest(String method, URI uri) { return new HttpUriRequest(method, uri) } @Override HttpResponse executeRequest(HttpUriRequest request, URI uri) { return client.execute(request) } } @Timeout(5) class ApacheClientUriRequestContext extends ApacheHttpClientTest { @Override HttpUriRequest createRequest(String method, URI uri) { return new HttpUriRequest(method, uri) } @Override HttpResponse executeRequest(HttpUriRequest request, URI uri) { return client.execute(request, new BasicHttpContext()) } } @Timeout(5) class ApacheClientUriRequestResponseHandler extends ApacheHttpClientTest { @Override HttpUriRequest createRequest(String method, URI uri) { return new HttpUriRequest(method, uri) } @Override HttpResponse executeRequest(HttpUriRequest request, URI uri) { return client.execute(request, { response -> response }) } } @Timeout(5) class ApacheClientUriRequestResponseHandlerContext extends ApacheHttpClientTest { @Override HttpUriRequest createRequest(String method, URI uri) { return new HttpUriRequest(method, uri) } @Override HttpResponse executeRequest(HttpUriRequest request, URI uri) { return client.execute(request, { response -> response }) } }