Skip to content
Closed
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 @@ -37,11 +37,13 @@
import java.util.List;
import java.util.Map;
import java.util.function.ToIntFunction;
import java.util.stream.Stream;
import javax.annotation.Nullable;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.ArgumentsSource;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.MethodSource;
import org.junit.jupiter.params.provider.ValueSource;

class HttpClientAttributesExtractorTest {
Expand Down Expand Up @@ -202,33 +204,74 @@ void normal() {
entry(NETWORK_PEER_PORT, 456L));
}

private static Stream<Arguments> shouldRedactUserInfoAndQueryParametersProvider() {
return Stream.of(
// url, expectedResult
Arguments.of("https://user1:[email protected]", "https://REDACTED:[email protected]"),
Arguments.of(
"https://user1:[email protected]/path/", "https://REDACTED:[email protected]/path/"),
Arguments.of(
"https://user1:[email protected]#test.html",
"https://REDACTED:[email protected]#test.html"),
Arguments.of(
"https://user1:[email protected]?foo=b@r",
"https://REDACTED:[email protected]?foo=b@r"),
Arguments.of(
"https://user1:[email protected]/p@th?foo=b@r",
"https://REDACTED:[email protected]/p@th?foo=b@r"),
Arguments.of("https://github.com/p@th?foo=b@r", "https://github.com/p@th?foo=b@r"),
Arguments.of("https://github.com#[email protected]", "https://github.com#[email protected]"),
Arguments.of("user1:[email protected]", "user1:[email protected]"),
Arguments.of("https://github.com@", "https://github.com@"),
Arguments.of(
"https://service.com?paramA=valA&paramB=valB",
"https://service.com?paramA=valA&paramB=valB"),
Arguments.of(
"https://service.com?AWSAccessKeyId=AKIAIOSFODNN7",
"https://service.com?AWSAccessKeyId=REDACTED"),
Arguments.of(
"https://service.com?Signature=39Up9jzHkxhuIhFE9594DJxe7w6cIRCg0V6ICGS0%3A377",
"https://service.com?Signature=REDACTED"),
Arguments.of(
"https://service.com?sig=39Up9jzHkxhuIhFE9594DJxe7w6cIRCg0V6ICGS0",
"https://service.com?sig=REDACTED"),
Arguments.of(
"https://service.com?X-Goog-Signature=39Up9jzHkxhuIhFE9594DJxe7w6cIRCg0V6ICGS0",
"https://service.com?X-Goog-Signature=REDACTED"),
Arguments.of(
"https://service.com?paramA=valA&AWSAccessKeyId=AKIAIOSFODNN7&paramB=valB",
"https://service.com?paramA=valA&AWSAccessKeyId=REDACTED&paramB=valB"),
Arguments.of(
"https://service.com?AWSAccessKeyId=AKIAIOSFODNN7&paramA=valA",
"https://service.com?AWSAccessKeyId=REDACTED&paramA=valA"),
Arguments.of(
"https://service.com?paramA=valA&AWSAccessKeyId=AKIAIOSFODNN7",
"https://service.com?paramA=valA&AWSAccessKeyId=REDACTED"),
Arguments.of(
"https://service.com?AWSAccessKeyId=AKIAIOSFODNN7&AWSAccessKeyId=ZGIAIOSFODNN7",
"https://service.com?AWSAccessKeyId=REDACTED&AWSAccessKeyId=REDACTED"),
Arguments.of(
"https://service.com?AWSAccessKeyId=AKIAIOSFODNN7#ref",
"https://service.com?AWSAccessKeyId=REDACTED#ref"),
Arguments.of(
"https://service.com?AWSAccessKeyId=AKIAIOSFODNN7&aa&bb",
"https://service.com?AWSAccessKeyId=REDACTED&aa&bb"),
Arguments.of(
"https://service.com?aa&bb&AWSAccessKeyId=AKIAIOSFODNN7",
"https://service.com?aa&bb&AWSAccessKeyId=REDACTED"),
Arguments.of(
"https://service.com?AWSAccessKeyId=AKIAIOSFODNN7&&",
"https://service.com?AWSAccessKeyId=REDACTED&&"),
Arguments.of(
"https://service.com?&&AWSAccessKeyId=AKIAIOSFODNN7",
"https://service.com?&&AWSAccessKeyId=REDACTED"),
Arguments.of(
"https://service.com?AWSAccessKeyId=AKIAIOSFODNN7&a&b#fragment",
"https://service.com?AWSAccessKeyId=REDACTED&a&b#fragment"));
}

@ParameterizedTest
@CsvSource({
"https://user1:[email protected], https://REDACTED:[email protected]",
"https://user1:[email protected]/path/, https://REDACTED:[email protected]/path/",
"https://user1:[email protected]#test.html, https://REDACTED:[email protected]#test.html",
"https://user1:[email protected]?foo=b@r, https://REDACTED:[email protected]?foo=b@r",
"https://user1:[email protected]/p@th?foo=b@r, https://REDACTED:[email protected]/p@th?foo=b@r",
"https://github.com/p@th?foo=b@r, https://github.com/p@th?foo=b@r",
"https://github.com#[email protected], https://github.com#[email protected]",
"user1:[email protected], user1:[email protected]",
"https://github.com@, https://github.com@",
"https://service.com?paramA=valA&paramB=valB, https://service.com?paramA=valA&paramB=valB",
"https://service.com?AWSAccessKeyId=AKIAIOSFODNN7, https://service.com?AWSAccessKeyId=REDACTED",
"https://service.com?Signature=39Up9jzHkxhuIhFE9594DJxe7w6cIRCg0V6ICGS0%3A377, https://service.com?Signature=REDACTED",
"https://service.com?sig=39Up9jzHkxhuIhFE9594DJxe7w6cIRCg0V6ICGS0, https://service.com?sig=REDACTED",
"https://service.com?X-Goog-Signature=39Up9jzHkxhuIhFE9594DJxe7w6cIRCg0V6ICGS0, https://service.com?X-Goog-Signature=REDACTED",
"https://service.com?paramA=valA&AWSAccessKeyId=AKIAIOSFODNN7&paramB=valB, https://service.com?paramA=valA&AWSAccessKeyId=REDACTED&paramB=valB",
"https://service.com?AWSAccessKeyId=AKIAIOSFODNN7&paramA=valA, https://service.com?AWSAccessKeyId=REDACTED&paramA=valA",
"https://service.com?paramA=valA&AWSAccessKeyId=AKIAIOSFODNN7, https://service.com?paramA=valA&AWSAccessKeyId=REDACTED",
"https://service.com?AWSAccessKeyId=AKIAIOSFODNN7&AWSAccessKeyId=ZGIAIOSFODNN7, https://service.com?AWSAccessKeyId=REDACTED&AWSAccessKeyId=REDACTED",
"https://service.com?AWSAccessKeyId=AKIAIOSFODNN7#ref, https://service.com?AWSAccessKeyId=REDACTED#ref",
"https://service.com?AWSAccessKeyId=AKIAIOSFODNN7&aa&bb, https://service.com?AWSAccessKeyId=REDACTED&aa&bb",
"https://service.com?aa&bb&AWSAccessKeyId=AKIAIOSFODNN7, https://service.com?aa&bb&AWSAccessKeyId=REDACTED",
"https://service.com?AWSAccessKeyId=AKIAIOSFODNN7&&, https://service.com?AWSAccessKeyId=REDACTED&&",
"https://service.com?&&AWSAccessKeyId=AKIAIOSFODNN7, https://service.com?&&AWSAccessKeyId=REDACTED",
"https://service.com?AWSAccessKeyId=AKIAIOSFODNN7&a&b#fragment, https://service.com?AWSAccessKeyId=REDACTED&a&b#fragment"
})
@MethodSource("shouldRedactUserInfoAndQueryParametersProvider")
void shouldRedactUserInfoAndQueryParameters(String url, String expectedResult) {
Map<String, String> request = new HashMap<>();
request.put("urlFull", url);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,27 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import java.util.stream.Stream;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

class SanitizationTest {

private static Stream<Arguments> sanitizeCqlProvider() {
return Stream.of(
// original, expected
Arguments.of("FROM TABLE WHERE FIELD>=-1234", "FROM TABLE WHERE FIELD>=?"),
Arguments.of(
"SELECT Name, Phone.Number FROM Contact WHERE Address.State = 'NY'",
"SELECT Name, Phone.Number FROM Contact WHERE Address.State = ?"),
Arguments.of("FROM col WHERE @Tag='Something'", "FROM col WHERE @Tag=?"));
}

@ParameterizedTest
@CsvSource(
delimiter = '|',
value = {
"FROM TABLE WHERE FIELD>=-1234 | FROM TABLE WHERE FIELD>=?",
"SELECT Name, Phone.Number FROM Contact WHERE Address.State = 'NY' | SELECT Name, Phone.Number FROM Contact WHERE Address.State = ?",
"FROM col WHERE @Tag='Something' | FROM col WHERE @Tag=?"
})
@MethodSource("sanitizeCqlProvider")
void sanitizeCql(String original, String expected) {
DbSpanDecorator decorator = new DbSpanDecorator("cql", "");

Expand All @@ -36,13 +42,20 @@ void sanitizeCql(String original, String expected) {
assertThat(actualSanitized).isEqualTo(expected);
}

private static Stream<Arguments> sanitizeJdbcProvider() {
return Stream.of(
// original, expected
Arguments.of("SELECT 3", "SELECT ?"),
Arguments.of(
"SELECT * FROM TABLE WHERE FIELD = 1234", "SELECT * FROM TABLE WHERE FIELD = ?"),
Arguments.of("SELECT * FROM TABLE WHERE FIELD<-1234", "SELECT * FROM TABLE WHERE FIELD<?"),
Arguments.of(
"SELECT col1 AS col2 FROM users WHERE field=1234",
"SELECT col1 AS col2 FROM users WHERE field=?"));
}

@ParameterizedTest
@CsvSource({
"SELECT 3, SELECT ?",
"SELECT * FROM TABLE WHERE FIELD = 1234, SELECT * FROM TABLE WHERE FIELD = ?",
"SELECT * FROM TABLE WHERE FIELD<-1234, SELECT * FROM TABLE WHERE FIELD<?",
"SELECT col1 AS col2 FROM users WHERE field=1234, SELECT col1 AS col2 FROM users WHERE field=?"
})
@MethodSource("sanitizeJdbcProvider")
void sanitizeJdbc(String original, String expected) {
DbSpanDecorator decorator = new DbSpanDecorator("jdbc", "");

Expand All @@ -55,12 +68,18 @@ void sanitizeJdbc(String original, String expected) {
assertThat(actualSanitized).isEqualTo(expected);
}

private static Stream<Arguments> sanitizeSqlProvider() {
return Stream.of(
// original, expected
Arguments.of(
"SELECT * FROM table WHERE col1=1234 AND col2>3",
"SELECT * FROM table WHERE col1=? AND col2>?"),
Arguments.of("UPDATE table SET col=12", "UPDATE table SET col=?"),
Arguments.of("insert into table where col=321", "insert into table where col=?"));
}

@ParameterizedTest
@CsvSource({
"SELECT * FROM table WHERE col1=1234 AND col2>3, SELECT * FROM table WHERE col1=? AND col2>?",
"UPDATE table SET col=12, UPDATE table SET col=?",
"insert into table where col=321, insert into table where col=?"
})
@MethodSource("sanitizeSqlProvider")
void sanitizeSql(String original, String expected) {

DbSpanDecorator decorator = new DbSpanDecorator("sql", "");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,33 @@
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.assertEquals;

import java.util.stream.Stream;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

class UnitConverterTest {

private static Stream<Arguments> shouldSupportPredefined_to_s_ConversionsProvider() {
return Stream.of(
// originalValue, originalUnit, expectedConvertedValue
Arguments.of(1000000000L, "ns", 1.0),
Arguments.of(25L, "ns", 0.000000025),
Arguments.of(96614101945L, "ns", 96.614101945),
Arguments.of(0L, "ns", 0.0),
Arguments.of(1000000L, "us", 1.0),
Arguments.of(25L, "us", 0.000025),
Arguments.of(96614101945L, "us", 96614.101945),
Arguments.of(0L, "ns", 0.0),
Arguments.of(1000L, "ms", 1.0),
Arguments.of(25L, "ms", 0.025),
Arguments.of(9661410L, "ms", 9661.41),
Arguments.of(0L, "ms", 0.0));
}

@ParameterizedTest
@CsvSource({
"1000000000,ns, 1.0",
"25,ns, 0.000000025",
"96614101945,ns, 96.614101945",
"0,ns, 0",
"1000000,us, 1.0",
"25,us, 0.000025",
"96614101945,us, 96614.101945",
"0,ns, 0",
"1000,ms, 1.0",
"25,ms, 0.025",
"9661410,ms, 9661.41",
"0,ms, 0",
})
@MethodSource("shouldSupportPredefined_to_s_ConversionsProvider")
void shouldSupportPredefined_to_s_Conversions(
Long originalValue, String originalUnit, Double expectedConvertedValue) {
// Given
Expand All @@ -43,23 +49,29 @@ void shouldSupportPredefined_to_s_Conversions(
assertEquals(expectedConvertedValue, actualValue);
}

private static Stream<Arguments> shouldHandleUnsupportedConversionProvider() {
return Stream.of(
// sourceUnit, targetUnit
Arguments.of("--", "--"),
Arguments.of("ms", "non-existing"),
Arguments.of("non-existing", "s"));
}

@ParameterizedTest
@CsvSource({
"--, --",
"ms, non-existing",
"non-existing, s",
})
@MethodSource("shouldHandleUnsupportedConversionProvider")
void shouldHandleUnsupportedConversion(String sourceUnit, String targetUnit) {
assertThatThrownBy(() -> UnitConverter.getInstance(sourceUnit, targetUnit))
.hasMessage("Unsupported conversion from [" + sourceUnit + "] to [" + targetUnit + "]");
}

private static Stream<Arguments> shouldSkipConversionWhenSourceUnitNotSpecifiedProvider() {
return Stream.of(
// sourceUnit, targetUnit
Arguments.of(null, "s"), Arguments.of("", "s"), Arguments.of("1", ""));
}

@ParameterizedTest
@CsvSource({
", s", // null -> "s"
"'', s", // "" -> "s"
"1, ''", // empty target unit
})
@MethodSource("shouldSkipConversionWhenSourceUnitNotSpecifiedProvider")
void shouldSkipConversionWhenSourceUnitNotSpecified(String sourceUnit, String targetUnit) {
UnitConverter converter = UnitConverter.getInstance(sourceUnit, targetUnit);
assertThat(converter).isNull();
Expand All @@ -80,10 +92,14 @@ void shouldRegisterNewConversion() {
assertEquals(5400.0, actualValue);
}

private static Stream<Arguments> shouldNotAllowRegisteringConversionWithAnyUnitEmptyProvider() {
return Stream.of(
// sourceUnit, targetUnit
Arguments.of("", "By"), Arguments.of("By", ""));
}

@ParameterizedTest
@CsvSource({
"'', By", "By, ''",
})
@MethodSource("shouldNotAllowRegisteringConversionWithAnyUnitEmptyProvider")
void shouldNotAllowRegisteringConversionWithAnyUnitEmpty(String sourceUnit, String targetUnit) {
assertThatThrownBy(() -> UnitConverter.registerConversion(sourceUnit, targetUnit, (value) -> 0))
.hasMessageMatching("Non empty .+Unit must be provided");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,30 +11,42 @@
import static org.mockito.Mockito.when;

import io.opentelemetry.instrumentation.jmx.engine.MetricAttribute;
import java.util.stream.Stream;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.junit.jupiter.params.provider.ValueSource;

public class MetricStructureTest {

private static Stream<Arguments> metricAttribute_constantProvider() {
return Stream.of(
// target, expectedValue
Arguments.of("const(Hello)", "Hello"), Arguments.of("lowercase(const(Hello))", "hello"));
}

@ParameterizedTest
@CsvSource({"const(Hello),Hello", "lowercase(const(Hello)),hello"})
@MethodSource("metricAttribute_constantProvider")
void metricAttribute_constant(String target, String expectedValue) {
MetricAttribute ma = MetricStructure.buildMetricAttribute("name", target);
assertThat(ma.getAttributeName()).isEqualTo("name");
assertThat(ma.isStateAttribute()).isFalse();
assertThat(ma.acquireAttributeValue(null, null)).isEqualTo(expectedValue);
}

private static Stream<Arguments> metricAttribute_beanAttributeProvider() {
return Stream.of(
// target, value, expectedValue
Arguments.of("beanattr(beanAttribute)", "Hello", "Hello"),
Arguments.of("lowercase(beanattr(beanAttribute))", "Hello", "hello"));
}

@ParameterizedTest
@CsvSource({
"beanattr(beanAttribute),Hello,Hello",
"lowercase(beanattr(beanAttribute)),Hello,hello",
})
@MethodSource("metricAttribute_beanAttributeProvider")
void metricAttribute_beanAttribute(String target, String value, String expectedValue)
throws Exception {
MetricAttribute ma = MetricStructure.buildMetricAttribute("name", target);
Expand All @@ -56,11 +68,15 @@ void metricAttribute_beanAttribute(String target, String value, String expectedV
assertThat(ma.acquireAttributeValue(mockConnection, objectName)).isEqualTo(expectedValue);
}

private static Stream<Arguments> metricAttribute_beanParamProvider() {
return Stream.of(
// target, value, expectedValue
Arguments.of("param(name)", "Hello", "Hello"),
Arguments.of("lowercase(param(name))", "Hello", "hello"));
}

@ParameterizedTest
@CsvSource({
"param(name),Hello,Hello",
"lowercase(param(name)),Hello,hello",
})
@MethodSource("metricAttribute_beanParamProvider")
void metricAttribute_beanParam(String target, String value, String expectedValue)
throws Exception {
MetricAttribute ma = MetricStructure.buildMetricAttribute("name", target);
Expand Down
Loading
Loading