Fix native tests (#10685)
Co-authored-by: Jean Bisutti <jean.bisutti@gmail.com> Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com> Co-authored-by: Lauri Tulmin <tulmin@gmail.com>
This commit is contained in:
parent
f8c10942ac
commit
c73bf8eadf
|
@ -46,7 +46,6 @@ dependencies {
|
||||||
compileOnly(project(":instrumentation-annotations"))
|
compileOnly(project(":instrumentation-annotations"))
|
||||||
|
|
||||||
compileOnly(project(":instrumentation:resources:library"))
|
compileOnly(project(":instrumentation:resources:library"))
|
||||||
compileOnly(project(":instrumentation:spring:spring-boot-resources:library"))
|
|
||||||
annotationProcessor("com.google.auto.service:auto-service")
|
annotationProcessor("com.google.auto.service:auto-service")
|
||||||
compileOnly("com.google.auto.service:auto-service-annotations")
|
compileOnly("com.google.auto.service:auto-service-annotations")
|
||||||
|
|
||||||
|
|
|
@ -17,14 +17,14 @@ import io.opentelemetry.instrumentation.resources.ProcessRuntimeResource;
|
||||||
import io.opentelemetry.instrumentation.resources.ProcessRuntimeResourceProvider;
|
import io.opentelemetry.instrumentation.resources.ProcessRuntimeResourceProvider;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
|
||||||
import io.opentelemetry.instrumentation.spring.resources.SpringBootServiceNameDetector;
|
|
||||||
import io.opentelemetry.instrumentation.spring.resources.SpringBootServiceVersionDetector;
|
|
||||||
import io.opentelemetry.sdk.autoconfigure.internal.EnvironmentResourceProvider;
|
import io.opentelemetry.sdk.autoconfigure.internal.EnvironmentResourceProvider;
|
||||||
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
|
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
|
||||||
|
import java.util.Optional;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
|
import org.springframework.boot.info.BuildProperties;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Conditional;
|
import org.springframework.context.annotation.Conditional;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
@ -42,8 +42,8 @@ public class OtelResourceAutoConfiguration {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public ResourceProvider otelSpringResourceProvider() {
|
public ResourceProvider otelSpringResourceProvider(Optional<BuildProperties> buildProperties) {
|
||||||
return new SpringResourceProvider();
|
return new SpringResourceProvider(buildProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
@ -51,18 +51,6 @@ public class OtelResourceAutoConfiguration {
|
||||||
return new DistroVersionResourceProvider();
|
return new DistroVersionResourceProvider();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
|
||||||
@ConditionalOnClass(SpringBootServiceNameDetector.class)
|
|
||||||
public ResourceProvider otelSpringBootServiceNameResourceProvider() {
|
|
||||||
return new SpringBootServiceNameDetector();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
@ConditionalOnClass(SpringBootServiceVersionDetector.class)
|
|
||||||
public ResourceProvider otelSpringBootServiceVersionResourceProvider() {
|
|
||||||
return new SpringBootServiceVersionDetector();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnClass(OsResource.class)
|
@ConditionalOnClass(OsResource.class)
|
||||||
public ResourceProvider otelOsResourceProvider() {
|
public ResourceProvider otelOsResourceProvider() {
|
||||||
|
|
|
@ -11,16 +11,33 @@ import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
|
||||||
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
|
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
|
||||||
import io.opentelemetry.sdk.resources.Resource;
|
import io.opentelemetry.sdk.resources.Resource;
|
||||||
import io.opentelemetry.semconv.ResourceAttributes;
|
import io.opentelemetry.semconv.ResourceAttributes;
|
||||||
|
import java.util.Optional;
|
||||||
|
import org.springframework.boot.info.BuildProperties;
|
||||||
|
|
||||||
public class SpringResourceProvider implements ResourceProvider {
|
public class SpringResourceProvider implements ResourceProvider {
|
||||||
|
|
||||||
|
private final Optional<BuildProperties> buildProperties;
|
||||||
|
|
||||||
|
public SpringResourceProvider(Optional<BuildProperties> buildProperties) {
|
||||||
|
this.buildProperties = buildProperties;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Resource createResource(ConfigProperties configProperties) {
|
public Resource createResource(ConfigProperties configProperties) {
|
||||||
AttributesBuilder attributesBuilder = Attributes.builder();
|
AttributesBuilder attributesBuilder = Attributes.builder();
|
||||||
|
buildProperties
|
||||||
|
.map(BuildProperties::getName)
|
||||||
|
.ifPresent(v -> attributesBuilder.put(ResourceAttributes.SERVICE_NAME, v));
|
||||||
|
|
||||||
String springApplicationName = configProperties.getString("spring.application.name");
|
String springApplicationName = configProperties.getString("spring.application.name");
|
||||||
if (springApplicationName != null) {
|
if (springApplicationName != null) {
|
||||||
attributesBuilder.put(ResourceAttributes.SERVICE_NAME, springApplicationName);
|
attributesBuilder.put(ResourceAttributes.SERVICE_NAME, springApplicationName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buildProperties
|
||||||
|
.map(BuildProperties::getVersion)
|
||||||
|
.ifPresent(v -> attributesBuilder.put(ResourceAttributes.SERVICE_VERSION, v));
|
||||||
|
|
||||||
return Resource.create(attributesBuilder.build());
|
return Resource.create(attributesBuilder.build());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
|
|
||||||
package io.opentelemetry.instrumentation.spring.autoconfigure;
|
package io.opentelemetry.instrumentation.spring.autoconfigure;
|
||||||
|
|
||||||
import static io.opentelemetry.semconv.ResourceAttributes.SERVICE_NAME;
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
|
@ -100,55 +99,6 @@ class OpenTelemetryAutoConfigurationTest {
|
||||||
.doesNotHaveBean("sdkLoggerProvider"));
|
.doesNotHaveBean("sdkLoggerProvider"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@DisplayName(
|
|
||||||
"when spring.application.name is set value should be passed to service name attribute")
|
|
||||||
void shouldDetermineServiceNameBySpringApplicationName() {
|
|
||||||
this.contextRunner
|
|
||||||
.withPropertyValues("spring.application.name=myapp-backend")
|
|
||||||
.withConfiguration(
|
|
||||||
AutoConfigurations.of(
|
|
||||||
OtelResourceAutoConfiguration.class, OpenTelemetryAutoConfiguration.class))
|
|
||||||
.run(
|
|
||||||
context -> {
|
|
||||||
Resource otelResource = context.getBean("otelResource", Resource.class);
|
|
||||||
|
|
||||||
assertThat(otelResource.getAttribute(SERVICE_NAME)).isEqualTo("myapp-backend");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@DisplayName(
|
|
||||||
"when spring application name and otel service name are not set service name should be default")
|
|
||||||
void hasDefaultServiceName() {
|
|
||||||
this.contextRunner
|
|
||||||
.withConfiguration(
|
|
||||||
AutoConfigurations.of(
|
|
||||||
OtelResourceAutoConfiguration.class, OpenTelemetryAutoConfiguration.class))
|
|
||||||
.run(
|
|
||||||
context -> {
|
|
||||||
Resource otelResource = context.getBean("otelResource", Resource.class);
|
|
||||||
|
|
||||||
assertThat(otelResource.getAttribute(SERVICE_NAME)).isEqualTo("unknown_service:java");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@DisplayName("when otel service name is set it should be set as service name attribute")
|
|
||||||
void shouldDetermineServiceNameByOtelServiceName() {
|
|
||||||
this.contextRunner
|
|
||||||
.withConfiguration(
|
|
||||||
AutoConfigurations.of(
|
|
||||||
OtelResourceAutoConfiguration.class, OpenTelemetryAutoConfiguration.class))
|
|
||||||
.withPropertyValues("otel.resource.attributes.service.name=otel-name-backend")
|
|
||||||
.run(
|
|
||||||
context -> {
|
|
||||||
Resource otelResource = context.getBean("otelResource", Resource.class);
|
|
||||||
|
|
||||||
assertThat(otelResource.getAttribute(SERVICE_NAME)).isEqualTo("otel-name-backend");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("when otel attributes are set in properties they should be put in resource")
|
@DisplayName("when otel attributes are set in properties they should be put in resource")
|
||||||
void shouldInitializeAttributes() {
|
void shouldInitializeAttributes() {
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
|
|
||||||
package io.opentelemetry.instrumentation.spring.autoconfigure.resources;
|
package io.opentelemetry.instrumentation.spring.autoconfigure.resources;
|
||||||
|
|
||||||
|
import static io.opentelemetry.semconv.ResourceAttributes.SERVICE_NAME;
|
||||||
|
import static io.opentelemetry.semconv.ResourceAttributes.SERVICE_VERSION;
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.entry;
|
import static org.assertj.core.api.Assertions.entry;
|
||||||
|
|
||||||
|
@ -13,9 +15,12 @@ import io.opentelemetry.api.common.AttributeKey;
|
||||||
import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration;
|
import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration;
|
||||||
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
|
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
|
||||||
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
|
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
|
||||||
|
import io.opentelemetry.sdk.resources.Resource;
|
||||||
|
import java.util.Properties;
|
||||||
import org.junit.jupiter.api.DisplayName;
|
import org.junit.jupiter.api.DisplayName;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||||
|
import org.springframework.boot.info.BuildProperties;
|
||||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||||
|
|
||||||
public class SpringResourceProviderTest {
|
public class SpringResourceProviderTest {
|
||||||
|
@ -54,4 +59,74 @@ public class SpringResourceProviderTest {
|
||||||
context ->
|
context ->
|
||||||
assertThat(context.getBean(OtelResourceProperties.class).getAttributes()).isEmpty());
|
assertThat(context.getBean(OtelResourceProperties.class).getAttributes()).isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName(
|
||||||
|
"when spring.application.name is set value should be passed to service name attribute")
|
||||||
|
void shouldDetermineServiceNameBySpringApplicationName() {
|
||||||
|
this.contextRunner
|
||||||
|
.withPropertyValues("spring.application.name=myapp-backend")
|
||||||
|
.withConfiguration(
|
||||||
|
AutoConfigurations.of(
|
||||||
|
OtelResourceAutoConfiguration.class, OpenTelemetryAutoConfiguration.class))
|
||||||
|
.run(
|
||||||
|
context -> {
|
||||||
|
Resource otelResource = context.getBean("otelResource", Resource.class);
|
||||||
|
|
||||||
|
assertThat(otelResource.getAttribute(SERVICE_NAME)).isEqualTo("myapp-backend");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName(
|
||||||
|
"when spring.application.name is set value should be passed to service name attribute")
|
||||||
|
void shouldDetermineServiceNameAndVersionBySpringApplicationVersion() {
|
||||||
|
Properties properties = new Properties();
|
||||||
|
properties.put("name", "demo");
|
||||||
|
properties.put("version", "0.3");
|
||||||
|
this.contextRunner
|
||||||
|
.withBean("buildProperties", BuildProperties.class, () -> new BuildProperties(properties))
|
||||||
|
.withConfiguration(
|
||||||
|
AutoConfigurations.of(
|
||||||
|
OtelResourceAutoConfiguration.class, OpenTelemetryAutoConfiguration.class))
|
||||||
|
.run(
|
||||||
|
context -> {
|
||||||
|
Resource otelResource = context.getBean("otelResource", Resource.class);
|
||||||
|
|
||||||
|
assertThat(otelResource.getAttribute(SERVICE_NAME)).isEqualTo("demo");
|
||||||
|
assertThat(otelResource.getAttribute(SERVICE_VERSION)).isEqualTo("0.3");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName(
|
||||||
|
"when spring application name and otel service name are not set service name should be default")
|
||||||
|
void hasDefaultServiceName() {
|
||||||
|
this.contextRunner
|
||||||
|
.withConfiguration(
|
||||||
|
AutoConfigurations.of(
|
||||||
|
OtelResourceAutoConfiguration.class, OpenTelemetryAutoConfiguration.class))
|
||||||
|
.run(
|
||||||
|
context -> {
|
||||||
|
Resource otelResource = context.getBean("otelResource", Resource.class);
|
||||||
|
|
||||||
|
assertThat(otelResource.getAttribute(SERVICE_NAME)).isEqualTo("unknown_service:java");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("when otel service name is set it should be set as service name attribute")
|
||||||
|
void shouldDetermineServiceNameByOtelServiceName() {
|
||||||
|
this.contextRunner
|
||||||
|
.withConfiguration(
|
||||||
|
AutoConfigurations.of(
|
||||||
|
OtelResourceAutoConfiguration.class, OpenTelemetryAutoConfiguration.class))
|
||||||
|
.withPropertyValues("otel.resource.attributes.service.name=otel-name-backend")
|
||||||
|
.run(
|
||||||
|
context -> {
|
||||||
|
Resource otelResource = context.getBean("otelResource", Resource.class);
|
||||||
|
|
||||||
|
assertThat(otelResource.getAttribute(SERVICE_NAME)).isEqualTo("otel-name-backend");
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,8 +46,8 @@ import org.snakeyaml.engine.v2.api.LoadSettings;
|
||||||
* <li>Check for --spring.application.name program argument via sun.java.command system property
|
* <li>Check for --spring.application.name program argument via sun.java.command system property
|
||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
* <p>Note: should not be used inside a spring application, where the spring.application.name is
|
* <p>Note: The spring starter already includes provider in
|
||||||
* already available.
|
* io.opentelemetry.instrumentation.spring.autoconfigure.resources.SpringResourceProvider
|
||||||
*/
|
*/
|
||||||
@AutoService(ResourceProvider.class)
|
@AutoService(ResourceProvider.class)
|
||||||
public class SpringBootServiceNameDetector implements ConditionalResourceProvider {
|
public class SpringBootServiceNameDetector implements ConditionalResourceProvider {
|
||||||
|
|
|
@ -18,6 +18,10 @@ import java.util.Optional;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Note: The spring starter already includes provider in
|
||||||
|
* io.opentelemetry.instrumentation.spring.autoconfigure.resources.SpringResourceProvider
|
||||||
|
*/
|
||||||
@AutoService(ResourceProvider.class)
|
@AutoService(ResourceProvider.class)
|
||||||
public class SpringBootServiceVersionDetector implements ResourceProvider {
|
public class SpringBootServiceVersionDetector implements ResourceProvider {
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@ dependencies {
|
||||||
api(project(":instrumentation:spring:spring-boot-autoconfigure"))
|
api(project(":instrumentation:spring:spring-boot-autoconfigure"))
|
||||||
api(project(":instrumentation-annotations"))
|
api(project(":instrumentation-annotations"))
|
||||||
implementation(project(":instrumentation:resources:library"))
|
implementation(project(":instrumentation:resources:library"))
|
||||||
implementation(project(":instrumentation:spring:spring-boot-resources:library"))
|
|
||||||
api("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi")
|
api("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi")
|
||||||
api("io.opentelemetry:opentelemetry-api")
|
api("io.opentelemetry:opentelemetry-api")
|
||||||
api("io.opentelemetry:opentelemetry-exporter-logging")
|
api("io.opentelemetry:opentelemetry-exporter-logging")
|
||||||
|
|
|
@ -7,6 +7,7 @@ package io.opentelemetry.smoketest;
|
||||||
|
|
||||||
import io.opentelemetry.spring.smoketest.OtelSpringStarterSmokeTestApplication;
|
import io.opentelemetry.spring.smoketest.OtelSpringStarterSmokeTestApplication;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.condition.DisabledInNativeImage;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
@SpringBootTest(
|
@SpringBootTest(
|
||||||
|
@ -15,6 +16,9 @@ import org.springframework.boot.test.context.SpringBootTest;
|
||||||
OtelSpringStarterSmokeTest.TestConfiguration.class
|
OtelSpringStarterSmokeTest.TestConfiguration.class
|
||||||
},
|
},
|
||||||
properties = {"otel.sdk.disabled=true"})
|
properties = {"otel.sdk.disabled=true"})
|
||||||
|
@DisabledInNativeImage // Without this the native tests in the OtelSpringStarterSmokeTest class will
|
||||||
|
// fail with org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "TEST_TABLE"
|
||||||
|
// already exists
|
||||||
class OtelSpringStarterDisabledSmokeTest {
|
class OtelSpringStarterDisabledSmokeTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in New Issue