Adds missing customizer config and backfills tests

This commit is contained in:
Adrian Cole
2020-04-07 11:36:21 +08:00
parent 553cba5506
commit 29cc2422ec
2 changed files with 83 additions and 3 deletions

View File

@@ -26,6 +26,7 @@ import brave.baggage.BaggagePropagation;
import brave.baggage.BaggagePropagationConfig.SingleBaggageField;
import brave.baggage.BaggagePropagationCustomizer;
import brave.baggage.CorrelationScopeConfig.SingleCorrelationField;
import brave.baggage.CorrelationScopeCustomizer;
import brave.baggage.CorrelationScopeDecorator;
import brave.context.slf4j.MDCScopeDecorator;
import brave.handler.FinishedSpanHandler;
@@ -68,6 +69,9 @@ public class TraceBaggageAutoConfiguration {
@Autowired(required = false)
List<BaggagePropagationCustomizer> baggagePropagationCustomizers = new ArrayList<>();
@Autowired(required = false)
List<CorrelationScopeCustomizer> correlationScopeCustomizers = new ArrayList<>();
/**
* To override the underlying context format, override this bean and set the delegate
* to what you need. {@link BaggagePropagation.FactoryBuilder} will unwrap itself if
@@ -183,11 +187,17 @@ public class TraceBaggageAutoConfiguration {
"spring.sleuth.baggage.correlation-fields",
sleuthBaggageProperties.getCorrelationFields());
// Add fields from properties
CorrelationScopeDecorator.Builder builder = MDCScopeDecorator.newBuilder();
for (String field : correlationFields) {
builder.add(SingleCorrelationField.newBuilder(BaggageField.create(field))
.build());
}
// handle user overrides
for (CorrelationScopeCustomizer customizer : this.correlationScopeCustomizers) {
customizer.customize(builder);
}
return builder.build();
}

View File

@@ -17,10 +17,16 @@
package org.springframework.cloud.sleuth.baggage;
import java.util.List;
import java.util.Set;
import brave.baggage.BaggageField;
import brave.baggage.BaggageFields;
import brave.baggage.BaggagePropagationConfig.SingleBaggageField;
import brave.baggage.BaggagePropagationCustomizer;
import brave.baggage.CorrelationScopeConfig;
import brave.baggage.CorrelationScopeConfig.SingleCorrelationField;
import brave.baggage.CorrelationScopeCustomizer;
import brave.baggage.CorrelationScopeDecorator;
import brave.handler.FinishedSpanHandler;
import brave.propagation.Propagation;
import org.assertj.core.api.AbstractListAssert;
@@ -38,6 +44,7 @@ import org.springframework.context.annotation.Configuration;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.tuple;
import static org.assertj.core.api.InstanceOfAssertFactories.array;
public class TraceBaggageAutoConfigurationTests {
@@ -102,7 +109,7 @@ public class TraceBaggageAutoConfigurationTests {
}
@Test
public void catCreateDeprecatedBaggageFieldsWithJavaConfig() {
public void canCreateDeprecatedBaggageFieldsWithJavaConfig() {
this.contextRunner.withUserConfiguration(CustomBaggageConfiguration.class)
.run((context) -> assertThatBaggageFieldNameToKeyNames(context)
.containsOnly(tuple("country-code", new String[] {
@@ -130,8 +137,7 @@ public class TraceBaggageAutoConfigurationTests {
AssertableApplicationContext context) {
return assertThat(context.getBean(FinishedSpanHandler.class))
.isInstanceOf(BaggageTagFinishedSpanHandler.class)
.extracting("fieldsToTag")
.asInstanceOf(InstanceOfAssertFactories.array(BaggageField[].class))
.extracting("fieldsToTag").asInstanceOf(array(BaggageField[].class))
.extracting(BaggageField::name);
}
@@ -144,6 +150,70 @@ public class TraceBaggageAutoConfigurationTests {
});
}
@Test
public void canAddOldCorrelationFieldsForLogScraping() {
this.contextRunner
.withUserConfiguration(
OldCorrelationFieldsForLogScrapingConfiguration.class)
.run((context) -> assertThat(
context.getBean(CorrelationScopeDecorator.class))
.extracting("fields")
.asInstanceOf(array(SingleCorrelationField[].class))
.extracting(SingleCorrelationField::name)
.containsExactly("traceId", "spanId", "parentId",
"spanExportable"));
}
@Test
public void canMakeAllCorrelationFieldsDirty() {
this.contextRunner
.withPropertyValues(
"spring.sleuth.baggage.correlation-fields=country-code")
.withUserConfiguration(DirtyCorrelationFieldConfiguration.class)
.run((context) -> assertThat(
context.getBean(CorrelationScopeDecorator.class))
.extracting("fields")
.asInstanceOf(array(SingleCorrelationField[].class))
.filteredOn(c -> !c.readOnly())
.extracting(SingleCorrelationField::dirty)
.containsExactly(true));
}
@Configuration
static class DirtyCorrelationFieldConfiguration {
@Bean
CorrelationScopeCustomizer makeCorrelationFieldsDirty() {
return b -> {
Set<CorrelationScopeConfig> configs = b.configs();
b.clear();
for (CorrelationScopeConfig config : configs) {
if (config instanceof SingleCorrelationField) {
SingleCorrelationField field = (SingleCorrelationField) config;
if (!field.readOnly()) {
config = field.toBuilder().dirty().build();
}
}
b.add(config);
}
};
}
}
@Configuration
static class OldCorrelationFieldsForLogScrapingConfiguration {
@Bean
CorrelationScopeCustomizer addParentAndSpanExportable() {
return b -> b.add(SingleCorrelationField.create(BaggageFields.PARENT_ID))
.add(SingleCorrelationField.newBuilder(BaggageFields.SAMPLED)
.name("spanExportable").build());
}
}
@Configuration
static class CustomBaggageConfiguration {