/* * Copyright The OpenTelemetry Authors * SPDX-License-Identifier: Apache-2.0 */ import io.opentelemetry.instrumentation.test.AgentTestTrait import io.opentelemetry.instrumentation.test.base.HttpClientTest import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest import org.springframework.http.HttpEntity import org.springframework.http.HttpHeaders import org.springframework.http.HttpMethod import org.springframework.http.client.ClientHttpRequestFactory import org.springframework.http.client.SimpleClientHttpRequestFactory import org.springframework.web.client.ResourceAccessException import org.springframework.web.client.RestTemplate import spock.lang.Shared class SpringRestTemplateTest extends HttpClientTest> implements AgentTestTrait { @Shared ClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory() @Shared RestTemplate restTemplate = new RestTemplate(factory) def setupSpec() { factory.connectTimeout = CONNECT_TIMEOUT_MS } @Override HttpEntity buildRequest(String method, URI uri, Map headers) { def httpHeaders = new HttpHeaders() headers.each { httpHeaders.put(it.key, [it.value]) } return new HttpEntity(httpHeaders) } @Override int sendRequest(HttpEntity request, String method, URI uri, Map headers) { try { return restTemplate.exchange(uri, HttpMethod.valueOf(method), request, String) .statusCode .value() } catch (ResourceAccessException exception) { throw exception.getCause() } } @Override void sendRequestWithCallback(HttpEntity request, String method, URI uri, Map headers = [:], AbstractHttpClientTest.RequestResult requestResult) { try { restTemplate.execute(uri, HttpMethod.valueOf(method), { req -> req.getHeaders().putAll(request.getHeaders()) }, { response -> requestResult.complete(response.statusCode.value()) }) } catch (ResourceAccessException exception) { requestResult.complete(exception.getCause()) } } @Override int maxRedirects() { 20 } @Override Integer responseCodeOnRedirectError() { return 302 } }