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

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -22,41 +22,35 @@
import java.util.Set;
import java.util.stream.Stream;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.ArgumentsProvider;
import org.junit.jupiter.params.provider.ArgumentsSource;
import org.junit.jupiter.params.provider.EnumSource;
import org.junit.jupiter.params.provider.MethodSource;

class SpanSuppressionStrategyTest {

static final Span span = Span.getInvalid();

@ParameterizedTest
@ArgumentsSource(ConfigArgs.class)
@MethodSource("configArgs")
void shouldParseConfig(String value, SpanSuppressionStrategy expectedStrategy) {
assertEquals(expectedStrategy, SpanSuppressionStrategy.fromConfig(value));
}

static final class ConfigArgs implements ArgumentsProvider {

@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
return Stream.of(
Arguments.of("none", SpanSuppressionStrategy.NONE),
Arguments.of("NONE", SpanSuppressionStrategy.NONE),
Arguments.of("span-kind", SpanSuppressionStrategy.SPAN_KIND),
Arguments.of("Span-Kind", SpanSuppressionStrategy.SPAN_KIND),
Arguments.of("semconv", SpanSuppressionStrategy.SEMCONV),
Arguments.of("SemConv", SpanSuppressionStrategy.SEMCONV),
Arguments.of("asdfasdfasdf", SpanSuppressionStrategy.SEMCONV),
Arguments.of(null, SpanSuppressionStrategy.SEMCONV));
}
private static Stream<Arguments> configArgs() {
return Stream.of(
Arguments.of("none", SpanSuppressionStrategy.NONE),
Arguments.of("NONE", SpanSuppressionStrategy.NONE),
Arguments.of("span-kind", SpanSuppressionStrategy.SPAN_KIND),
Arguments.of("Span-Kind", SpanSuppressionStrategy.SPAN_KIND),
Arguments.of("semconv", SpanSuppressionStrategy.SEMCONV),
Arguments.of("SemConv", SpanSuppressionStrategy.SEMCONV),
Arguments.of("asdfasdfasdf", SpanSuppressionStrategy.SEMCONV),
Arguments.of(null, SpanSuppressionStrategy.SEMCONV));
}

@ParameterizedTest
@ArgumentsSource(SpanKindsAndKeys.class)
@MethodSource("spanKindsAndKeys")
void none_shouldNotSuppressAnything(SpanKind spanKind, SpanKey spanKey) {
SpanSuppressor suppressor = SpanSuppressionStrategy.NONE.create(emptySet());

Expand All @@ -77,7 +71,7 @@ void none_shouldNotStoreSpansInContext(SpanKind spanKind) {
}

@ParameterizedTest
@ArgumentsSource(SpanKindsAndKeys.class)
@MethodSource("spanKindsAndKeys")
void spanKind_shouldStoreInContext(SpanKind spanKind, SpanKey spanKey) {
SpanSuppressor suppressor = SpanSuppressionStrategy.SPAN_KIND.create(emptySet());
Context context = Context.root();
Expand All @@ -89,7 +83,7 @@ void spanKind_shouldStoreInContext(SpanKind spanKind, SpanKey spanKey) {
}

@ParameterizedTest
@ArgumentsSource(SpanKindsAndKeys.class)
@MethodSource("spanKindsAndKeys")
void spanKind_shouldSuppressSameKind(SpanKind spanKind, SpanKey spanKey) {
SpanSuppressor suppressor = SpanSuppressionStrategy.SPAN_KIND.create(emptySet());
Context context = Context.root();
Expand All @@ -100,16 +94,12 @@ void spanKind_shouldSuppressSameKind(SpanKind spanKind, SpanKey spanKey) {
assertSame(span, spanKey.fromContextOrNull(newContext));
}

static final class SpanKindsAndKeys implements ArgumentsProvider {

@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
return Stream.of(
Arguments.of(SpanKind.SERVER, SpanKey.KIND_SERVER),
Arguments.of(SpanKind.CLIENT, SpanKey.KIND_CLIENT),
Arguments.of(SpanKind.CONSUMER, SpanKey.KIND_CONSUMER),
Arguments.of(SpanKind.PRODUCER, SpanKey.KIND_PRODUCER));
}
private static Stream<Arguments> spanKindsAndKeys() {
return Stream.of(
Arguments.of(SpanKind.SERVER, SpanKey.KIND_SERVER),
Arguments.of(SpanKind.CLIENT, SpanKey.KIND_CLIENT),
Arguments.of(SpanKind.CONSUMER, SpanKey.KIND_CONSUMER),
Arguments.of(SpanKind.PRODUCER, SpanKey.KIND_PRODUCER));
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,9 @@
import java.util.stream.Stream;
import javax.annotation.Nullable;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.ArgumentsProvider;
import org.junit.jupiter.params.provider.ArgumentsSource;
import org.junit.jupiter.params.provider.MethodSource;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
Expand All @@ -37,7 +35,7 @@ class ForwardedHostAddressAndPortExtractorTest {
@InjectMocks ForwardedHostAddressAndPortExtractor<String> underTest;

@ParameterizedTest
@ArgumentsSource(ForwardedArgs.class)
@MethodSource("forwardedArgs")
void shouldParseForwarded(
List<String> headers, @Nullable String expectedAddress, @Nullable Integer expectedPort) {
when(getter.getHttpRequestHeader(REQUEST, "forwarded")).thenReturn(headers);
Expand All @@ -49,40 +47,36 @@ void shouldParseForwarded(
assertThat(sink.getPort()).isEqualTo(expectedPort);
}

static final class ForwardedArgs implements ArgumentsProvider {

@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext extensionContext) {
return Stream.of(
// empty/invalid headers
arguments(singletonList(""), null, null),
arguments(singletonList("host="), null, null),
arguments(singletonList("host=;"), null, null),
arguments(singletonList("host=\""), null, null),
arguments(singletonList("host=\"\""), null, null),
arguments(singletonList("host=\"example.com"), null, null),
arguments(singletonList("by=1.2.3.4, test=abc"), null, null),
arguments(singletonList("host=example.com"), "example.com", null),
arguments(singletonList("host=\"example.com\""), "example.com", null),
arguments(singletonList("host=example.com; test=abc:1234"), "example.com", null),
arguments(singletonList("host=\"example.com\"; test=abc:1234"), "example.com", null),
arguments(singletonList("host=example.com:port"), "example.com", null),
arguments(singletonList("host=\"example.com:port\""), "example.com", null),
arguments(singletonList("host=example.com:42"), "example.com", 42),
arguments(singletonList("host=\"example.com:42\""), "example.com", 42),
arguments(singletonList("host=example.com:42; test=abc:1234"), "example.com", 42),
arguments(singletonList("host=\"example.com:42\"; test=abc:1234"), "example.com", 42),

// multiple headers
arguments(
asList("proto=https", "host=example.com", "host=github.com:1234"),
"example.com",
null));
}
private static Stream<Arguments> forwardedArgs() {
return Stream.of(
// empty/invalid headers
arguments(singletonList(""), null, null),
arguments(singletonList("host="), null, null),
arguments(singletonList("host=;"), null, null),
arguments(singletonList("host=\""), null, null),
arguments(singletonList("host=\"\""), null, null),
arguments(singletonList("host=\"example.com"), null, null),
arguments(singletonList("by=1.2.3.4, test=abc"), null, null),
arguments(singletonList("host=example.com"), "example.com", null),
arguments(singletonList("host=\"example.com\""), "example.com", null),
arguments(singletonList("host=example.com; test=abc:1234"), "example.com", null),
arguments(singletonList("host=\"example.com\"; test=abc:1234"), "example.com", null),
arguments(singletonList("host=example.com:port"), "example.com", null),
arguments(singletonList("host=\"example.com:port\""), "example.com", null),
arguments(singletonList("host=example.com:42"), "example.com", 42),
arguments(singletonList("host=\"example.com:42\""), "example.com", 42),
arguments(singletonList("host=example.com:42; test=abc:1234"), "example.com", 42),
arguments(singletonList("host=\"example.com:42\"; test=abc:1234"), "example.com", 42),

// multiple headers
arguments(
asList("proto=https", "host=example.com", "host=github.com:1234"),
"example.com",
null));
}

@ParameterizedTest
@ArgumentsSource(HostArgs.class)
@MethodSource("hostArgs")
@SuppressWarnings("MockitoDoSetup")
void shouldParseForwardedHost(
List<String> headers, @Nullable String expectedAddress, @Nullable Integer expectedPort) {
Expand All @@ -97,7 +91,7 @@ void shouldParseForwardedHost(
}

@ParameterizedTest
@ArgumentsSource(HostArgs.class)
@MethodSource("hostArgs")
@SuppressWarnings("MockitoDoSetup")
void shouldParsePseudoAuthority(
List<String> headers, @Nullable String expectedAddress, @Nullable Integer expectedPort) {
Expand All @@ -113,7 +107,7 @@ void shouldParsePseudoAuthority(
}

@ParameterizedTest
@ArgumentsSource(HostArgs.class)
@MethodSource("hostArgs")
@SuppressWarnings("MockitoDoSetup")
void shouldParseHost(
List<String> headers, @Nullable String expectedAddress, @Nullable Integer expectedPort) {
Expand All @@ -129,24 +123,20 @@ void shouldParseHost(
assertThat(sink.getPort()).isEqualTo(expectedPort);
}

static final class HostArgs implements ArgumentsProvider {

@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext extensionContext) {
return Stream.of(
// empty/invalid headers
arguments(singletonList(""), null, null),
arguments(singletonList("\""), null, null),
arguments(singletonList("\"\""), null, null),
arguments(singletonList("example.com"), "example.com", null),
arguments(singletonList("example.com:port"), "example.com", null),
arguments(singletonList("example.com:42"), "example.com", 42),
arguments(singletonList("\"example.com\""), "example.com", null),
arguments(singletonList("\"example.com:port\""), "example.com", null),
arguments(singletonList("\"example.com:42\""), "example.com", 42),

// multiple headers
arguments(asList("example.com", "github.com:1234"), "example.com", null));
}
private static Stream<Arguments> hostArgs() {
return Stream.of(
// empty/invalid headers
arguments(singletonList(""), null, null),
arguments(singletonList("\""), null, null),
arguments(singletonList("\"\""), null, null),
arguments(singletonList("example.com"), "example.com", null),
arguments(singletonList("example.com:port"), "example.com", null),
arguments(singletonList("example.com:42"), "example.com", 42),
arguments(singletonList("\"example.com\""), "example.com", null),
arguments(singletonList("\"example.com:port\""), "example.com", null),
arguments(singletonList("\"example.com:42\""), "example.com", 42),

// multiple headers
arguments(asList("example.com", "github.com:1234"), "example.com", null));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,9 @@
import java.util.stream.Stream;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.ArgumentsProvider;
import org.junit.jupiter.params.provider.ArgumentsSource;
import org.junit.jupiter.params.provider.MethodSource;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
Expand All @@ -44,52 +42,44 @@ void noHeaders() {
}

@ParameterizedTest
@ArgumentsSource(ForwardedHeaderValues.class)
@MethodSource("forwardedHeaderValues")
void parseForwardedHeader(List<String> values, String expectedScheme) {
when(getter.getHttpRequestHeader(REQUEST, "forwarded")).thenReturn(values);
assertThat(underTest.apply(REQUEST)).isEqualTo(expectedScheme);
}

static final class ForwardedHeaderValues implements ArgumentsProvider {

@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext extensionContext) {
return Stream.of(
arguments(singletonList("for=1.1.1.1;proto=xyz"), "xyz"),
arguments(singletonList("for=1.1.1.1;proto=xyz;"), "xyz"),
arguments(singletonList("for=1.1.1.1;proto=xyz,"), "xyz"),
arguments(singletonList("for=1.1.1.1;proto="), null),
arguments(singletonList("for=1.1.1.1;proto=;"), null),
arguments(singletonList("for=1.1.1.1;proto=,"), null),
arguments(singletonList("for=1.1.1.1;proto=\"xyz\""), "xyz"),
arguments(singletonList("for=1.1.1.1;proto=\"xyz\";"), "xyz"),
arguments(singletonList("for=1.1.1.1;proto=\"xyz\","), "xyz"),
arguments(singletonList("for=1.1.1.1;proto=\""), null),
arguments(singletonList("for=1.1.1.1;proto=\"\""), null),
arguments(singletonList("for=1.1.1.1;proto=\"\";"), null),
arguments(singletonList("for=1.1.1.1;proto=\"\","), null),
arguments(asList("for=1.1.1.1", "proto=xyz", "proto=abc"), "xyz"));
}
private static Stream<Arguments> forwardedHeaderValues() {
return Stream.of(
arguments(singletonList("for=1.1.1.1;proto=xyz"), "xyz"),
arguments(singletonList("for=1.1.1.1;proto=xyz;"), "xyz"),
arguments(singletonList("for=1.1.1.1;proto=xyz,"), "xyz"),
arguments(singletonList("for=1.1.1.1;proto="), null),
arguments(singletonList("for=1.1.1.1;proto=;"), null),
arguments(singletonList("for=1.1.1.1;proto=,"), null),
arguments(singletonList("for=1.1.1.1;proto=\"xyz\""), "xyz"),
arguments(singletonList("for=1.1.1.1;proto=\"xyz\";"), "xyz"),
arguments(singletonList("for=1.1.1.1;proto=\"xyz\","), "xyz"),
arguments(singletonList("for=1.1.1.1;proto=\""), null),
arguments(singletonList("for=1.1.1.1;proto=\"\""), null),
arguments(singletonList("for=1.1.1.1;proto=\"\";"), null),
arguments(singletonList("for=1.1.1.1;proto=\"\","), null),
arguments(asList("for=1.1.1.1", "proto=xyz", "proto=abc"), "xyz"));
}

@ParameterizedTest
@ArgumentsSource(ForwardedProtoHeaderValues.class)
@MethodSource("forwardedProtoHeaderValues")
@SuppressWarnings("MockitoDoSetup")
void parseForwardedProtoHeader(List<String> values, String expectedScheme) {
doReturn(emptyList()).when(getter).getHttpRequestHeader(REQUEST, "forwarded");
doReturn(values).when(getter).getHttpRequestHeader(REQUEST, "x-forwarded-proto");
assertThat(underTest.apply(REQUEST)).isEqualTo(expectedScheme);
}

static final class ForwardedProtoHeaderValues implements ArgumentsProvider {

@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext extensionContext) {
return Stream.of(
arguments(singletonList("xyz"), "xyz"),
arguments(singletonList("\"xyz\""), "xyz"),
arguments(singletonList("\""), null),
arguments(asList("xyz", "abc"), "xyz"));
}
private static Stream<Arguments> forwardedProtoHeaderValues() {
return Stream.of(
arguments(singletonList("xyz"), "xyz"),
arguments(singletonList("\"xyz\""), "xyz"),
arguments(singletonList("\""), null),
arguments(asList("xyz", "abc"), "xyz"));
}
}
Loading
Loading