Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,26 @@

<properties>
<apm-agent-parent.base.dir>${project.basedir}/../../..</apm-agent-parent.base.dir>
<animal.sniffer.skip>true</animal.sniffer.skip>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.0.5</version> <!-- update IT in case of major upgrade -->
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${version.spring}</version>
<scope>provided</scope>
</dependency>
<dependency>
Expand All @@ -38,7 +51,6 @@
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>${version.okhttp}</version>
<scope>test</scope>
</dependency>
<dependency>
Expand All @@ -48,9 +60,8 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.6</version>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
*/
package co.elastic.apm.agent.resttemplate;

import co.elastic.apm.agent.common.JvmRuntimeInfo;
import co.elastic.apm.agent.httpclient.AbstractHttpClientInstrumentationTest;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
Expand All @@ -27,29 +28,52 @@
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@RunWith(Parameterized.class)
public class SpringRestTemplateInstrumentationTest extends AbstractHttpClientInstrumentationTest {

private final RestTemplate restTemplate;
// Cannot directly reference RestTemplate here because it is compiled with Java 17
private final Object restTemplate;

public SpringRestTemplateInstrumentationTest(Supplier<ClientHttpRequestFactory> supplier) {
restTemplate = new RestTemplate(supplier.get());
public SpringRestTemplateInstrumentationTest(Supplier<RestTemplate> supplier) {
restTemplate = supplier.get();
}

@Parameterized.Parameters()
public static Iterable<Supplier<ClientHttpRequestFactory>> data() {
return Arrays.asList(
SimpleClientHttpRequestFactory::new,
OkHttp3ClientHttpRequestFactory::new,
HttpComponentsClientHttpRequestFactory::new);
public static Iterable<Supplier<RestTemplate>> data() {
if (JvmRuntimeInfo.ofCurrentVM().getMajorVersion() >= 17) {
return Java17Code.getRestTemplateFactories();
} else {
return List.of();
}
}

@Override
protected void performGet(String path) {
// note: getForEntity is only available as of Spring-web 3.0.2
restTemplate.getForEntity(path, String.class);
Java17Code.performGet(restTemplate, path);
}

/**
* The code is compiled with java 17 but potentially run with java 11.
* JUnit will inspect the test class, therefore it must not contain any references to java 17 code.
*/
private static class Java17Code {
public static void performGet(Object restTemplate, String path) {
// note: getForEntity is only available as of Spring-web 3.0.2
((RestTemplate) restTemplate).getForEntity(path, String.class);
}

public static Iterable<Supplier<RestTemplate>> getRestTemplateFactories() {
return Stream.<Supplier<ClientHttpRequestFactory>>of(
SimpleClientHttpRequestFactory::new,
OkHttp3ClientHttpRequestFactory::new,
HttpComponentsClientHttpRequestFactory::new)
.map(fac -> (Supplier<RestTemplate>) (() -> new RestTemplate(fac.get())))
.collect(Collectors.toList());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ void testVersion5(String version) throws Exception {

@ParameterizedTest
@ValueSource(strings = {
"[6.0.0,7.0.0)" // using ivy range specifier to make test against later versions
"6.0.5"
})
@EnabledForJreRange(min = JRE.JAVA_17, disabledReason = "Spring 6 requires JDK 17")
void testVersion6(String version) throws Exception {
Expand Down
1 change: 1 addition & 0 deletions integration-tests/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
<module>runtime-attach</module>
<module>jakartaee-jsf-app</module>
<module>main-app-test</module>
<module>spring-boot-3</module>
<module>aws-lambda-test</module>
</modules>

Expand Down
30 changes: 29 additions & 1 deletion integration-tests/spring-boot-2/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,23 @@
</modules>

<properties>
<version.spring-boot>2.1.8.RELEASE</version.spring-boot>
<apm-agent-parent.base.dir>${project.basedir}/../..</apm-agent-parent.base.dir>
<animal.sniffer.skip>true</animal.sniffer.skip>
</properties>

<dependencyManagement>
<dependencies>
<!-- using spring bom dependency to resolve dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.10</version> <!-- no major upgrade here -->
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
Expand Down Expand Up @@ -57,4 +70,19 @@
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

</project>
19 changes: 0 additions & 19 deletions integration-tests/spring-boot-2/spring-boot-2-base/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,26 +16,10 @@
<apm-agent-parent.base.dir>${project.basedir}/../../..</apm-agent-parent.base.dir>
</properties>

<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${version.spring-boot}</version>
<exclusions>
<!-- avoid LoggingException: log4j-slf4j-impl cannot be present with log4j-to-slf4j -->
<exclusion>
Expand All @@ -47,17 +31,14 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>${version.spring-boot}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>${version.spring-boot}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${version.spring-boot}</version>
</dependency>
</dependencies>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,21 +35,21 @@
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.stagemonitor.configuration.ConfigurationRegistry;

import java.time.Duration;
import java.util.Collections;

import static org.assertj.core.api.Java6Assertions.assertThat;
Expand Down Expand Up @@ -78,9 +78,9 @@ public static void beforeClass() {
public void setUp() {
doReturn(true).when(config.getConfig(ReporterConfiguration.class)).isReportSynchronously();
restTemplate = new TestRestTemplate(new RestTemplateBuilder()
.setConnectTimeout(0)
.setReadTimeout(0)
.basicAuthorization("username", "password"));
.setConnectTimeout(Duration.ZERO)
.setReadTimeout(Duration.ZERO)
.basicAuthentication("username", "password"));
reporter.reset();
}

Expand All @@ -106,7 +106,11 @@ public void greetingShouldReturnDefaultMessage() throws Exception {
// the service.name will not be overwritten for the webapp class loader based on spring.application.name
assertThat(transaction.getTraceContext().getServiceName()).isNull();
assertThat(transaction.getFrameworkName()).isEqualTo("Spring Web MVC");
assertThat(transaction.getFrameworkVersion()).isEqualTo("5.1.9.RELEASE");
assertThat(transaction.getFrameworkVersion()).matches(getExpectedSpringVersionRegex());
}

protected String getExpectedSpringVersionRegex() {
return "5\\.[0-9]+\\.[0-9]+";
}

@Test
Expand All @@ -122,6 +126,7 @@ public void testStaticFile() {

@RestController
@SpringBootApplication
@EnableWebSecurity
public static class TestApp {

public static void main(String[] args) {
Expand All @@ -134,26 +139,22 @@ public String greeting() {
return "Hello World";
}

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic();
}

@Bean
@Override
public UserDetailsService userDetailsService() {
return new InMemoryUserDetailsManager(User.withDefaultPasswordEncoder()
.username("username")
.password("password")
.roles("USER")
.build());
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic();
return http.build();
}

@Bean
public UserDetailsService userDetailsService() {
return new InMemoryUserDetailsManager(User.withDefaultPasswordEncoder()
.username("username")
.password("password")
.roles("USER")
.build());
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
<version>${version.spring-boot}</version>
</dependency>
</dependencies>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
<version>${version.spring-boot}</version>
</dependency>
</dependencies>

Expand Down
Loading