From 037f8e71bf410276ad3829e0c9f407a9a80370ea Mon Sep 17 00:00:00 2001 From: Mateusz Rzeszutek Date: Mon, 30 Oct 2023 15:35:36 +0100 Subject: [PATCH 1/2] Remove conditional requirement on network.peer.address and network.peer.port --- .../ForwardedHostAddressAndPortExtractor.java | 7 ++++ .../HttpClientAttributesExtractorBuilder.java | 1 - .../HttpServerAttributesExtractorBuilder.java | 1 - .../net/NetClientAttributesExtractor.java | 1 - .../net/NetServerAttributesExtractor.java | 1 - .../network/NetworkAttributesExtractor.java | 1 - .../InternalNetworkAttributesExtractor.java | 10 ++---- ...wardedHostAddressAndPortExtractorTest.java | 16 +++++++++ .../net/NetClientAttributesExtractorTest.java | 30 ----------------- .../net/NetServerAttributesExtractorTest.java | 30 ----------------- ...tAttributesExtractorStableSemconvTest.java | 7 ++-- ...rAttributesExtractorStableSemconvTest.java | 33 +++++++++++++++++-- 12 files changed, 62 insertions(+), 76 deletions(-) diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/ForwardedHostAddressAndPortExtractor.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/ForwardedHostAddressAndPortExtractor.java index 073aea6c11d5..74508c739ed7 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/ForwardedHostAddressAndPortExtractor.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/ForwardedHostAddressAndPortExtractor.java @@ -49,6 +49,13 @@ public void extract(AddressPortSink sink, REQUEST request) { return; } } + + // try :authority (HTTP 2.0 pseudo-header) + for (String host : getter.getHttpRequestHeader(request, ":authority")) { + if (extractHost(sink, host, 0, host.length())) { + return; + } + } } private static boolean extractFromForwardedHeader(AddressPortSink sink, String forwarded) { diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractorBuilder.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractorBuilder.java index 3e5bdde89b59..7b7969f52457 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractorBuilder.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractorBuilder.java @@ -135,7 +135,6 @@ InternalNetClientAttributesExtractor buildNetExtractor() { InternalNetworkAttributesExtractor buildNetworkExtractor() { return new InternalNetworkAttributesExtractor<>( netAttributesGetter, - AddressAndPortExtractor.noop(), serverAddressAndPortExtractor, /* captureNetworkTransportAndType= */ false, /* captureLocalSocketAttributes= */ false, diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorBuilder.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorBuilder.java index 3667bc9f0f91..c16834e69e4a 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorBuilder.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorBuilder.java @@ -148,7 +148,6 @@ InternalNetServerAttributesExtractor buildNetExtractor() { InternalNetworkAttributesExtractor buildNetworkExtractor() { return new InternalNetworkAttributesExtractor<>( netAttributesGetter, - serverAddressPortExtractor, clientAddressPortExtractor, /* captureNetworkTransportAndType= */ false, /* captureLocalSocketAttributes= */ false, diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetClientAttributesExtractor.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetClientAttributesExtractor.java index 5e9458ece162..aaf6d1f531ad 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetClientAttributesExtractor.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetClientAttributesExtractor.java @@ -50,7 +50,6 @@ private NetClientAttributesExtractor(NetClientAttributesGetter( getter, - AddressAndPortExtractor.noop(), serverAddressAndPortExtractor, /* captureNetworkTransportAndType= */ true, /* captureLocalSocketAttributes= */ false, diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractor.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractor.java index 67493be7ed77..dae29c4b33dc 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractor.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractor.java @@ -52,7 +52,6 @@ private NetServerAttributesExtractor(NetServerAttributesGetter( getter, - serverAddressAndPortExtractor, clientAddressAndPortExtractor, /* captureNetworkTransportAndType= */ true, /* captureLocalSocketAttributes= */ true, diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractor.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractor.java index 89ea385b8b34..e232a8db1067 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractor.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractor.java @@ -37,7 +37,6 @@ public static NetworkAttributesExtractor new InternalNetworkAttributesExtractor<>( getter, AddressAndPortExtractor.noop(), - AddressAndPortExtractor.noop(), /* captureNetworkTransportAndType= */ true, /* captureLocalSocketAttributes= */ true, // capture the old net.sock.peer.name attr for backwards compatibility diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/internal/InternalNetworkAttributesExtractor.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/internal/InternalNetworkAttributesExtractor.java index f2529cbe7a0d..6ebadd2657d5 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/internal/InternalNetworkAttributesExtractor.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/internal/InternalNetworkAttributesExtractor.java @@ -22,7 +22,6 @@ public final class InternalNetworkAttributesExtractor { private final NetworkAttributesGetter getter; - private final AddressAndPortExtractor logicalLocalAddressAndPortExtractor; private final AddressAndPortExtractor logicalPeerAddressAndPortExtractor; private final boolean captureNetworkTransportAndType; private final boolean captureLocalSocketAttributes; @@ -32,7 +31,6 @@ public final class InternalNetworkAttributesExtractor { public InternalNetworkAttributesExtractor( NetworkAttributesGetter getter, - AddressAndPortExtractor logicalLocalAddressAndPortExtractor, AddressAndPortExtractor logicalPeerAddressAndPortExtractor, boolean captureNetworkTransportAndType, boolean captureLocalSocketAttributes, @@ -40,7 +38,6 @@ public InternalNetworkAttributesExtractor( boolean emitStableUrlAttributes, boolean emitOldHttpAttributes) { this.getter = getter; - this.logicalLocalAddressAndPortExtractor = logicalLocalAddressAndPortExtractor; this.logicalPeerAddressAndPortExtractor = logicalPeerAddressAndPortExtractor; this.captureNetworkTransportAndType = captureNetworkTransportAndType; this.captureLocalSocketAttributes = captureLocalSocketAttributes; @@ -74,8 +71,7 @@ public void onEnd(AttributesBuilder attributes, REQUEST request, @Nullable RESPO } String localAddress = getter.getNetworkLocalAddress(request, response); - String logicalLocalAddress = logicalLocalAddressAndPortExtractor.extract(request).address; - if (localAddress != null && !localAddress.equals(logicalLocalAddress)) { + if (localAddress != null) { if (emitStableUrlAttributes && captureLocalSocketAttributes) { internalSet(attributes, NetworkAttributes.NETWORK_LOCAL_ADDRESS, localAddress); } @@ -95,8 +91,7 @@ public void onEnd(AttributesBuilder attributes, REQUEST request, @Nullable RESPO } String peerAddress = getter.getNetworkPeerAddress(request, response); - String logicalPeerAddress = logicalPeerAddressAndPortExtractor.extract(request).address; - if (peerAddress != null && !peerAddress.equals(logicalPeerAddress)) { + if (peerAddress != null) { if (emitStableUrlAttributes) { internalSet(attributes, NetworkAttributes.NETWORK_PEER_ADDRESS, peerAddress); } @@ -119,6 +114,7 @@ public void onEnd(AttributesBuilder attributes, REQUEST request, @Nullable RESPO getter.getNetworkPeerInetSocketAddress(request, response); if (peerSocketAddress != null) { String peerSocketDomain = InetSocketAddressUtil.getDomainName(peerSocketAddress); + String logicalPeerAddress = logicalPeerAddressAndPortExtractor.extract(request).address; if (peerSocketDomain != null && !peerSocketDomain.equals(logicalPeerAddress)) { internalSet(attributes, SemanticAttributes.NET_SOCK_PEER_NAME, peerSocketDomain); } diff --git a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/ForwardedHostAddressAndPortExtractorTest.java b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/ForwardedHostAddressAndPortExtractorTest.java index 3a8827beeb13..b2b89171fca6 100644 --- a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/ForwardedHostAddressAndPortExtractorTest.java +++ b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/ForwardedHostAddressAndPortExtractorTest.java @@ -125,6 +125,22 @@ void shouldParseHost( assertThat(sink.getPort()).isEqualTo(expectedPort); } + @ParameterizedTest + @ArgumentsSource(HostArgs.class) + void shouldParsePseudoAuthority( + List headers, @Nullable String expectedAddress, @Nullable Integer expectedPort) { + doReturn(emptyList()).when(getter).getHttpRequestHeader(REQUEST, "forwarded"); + doReturn(emptyList()).when(getter).getHttpRequestHeader(REQUEST, "x-forwarded-host"); + doReturn(emptyList()).when(getter).getHttpRequestHeader(REQUEST, "host"); + doReturn(headers).when(getter).getHttpRequestHeader(REQUEST, ":authority"); + + AddressAndPort sink = new AddressAndPort(); + underTest.extract(sink, REQUEST); + + assertThat(sink.getAddress()).isEqualTo(expectedAddress); + assertThat(sink.getPort()).isEqualTo(expectedPort); + } + static final class HostArgs implements ArgumentsProvider { @Override diff --git a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetClientAttributesExtractorTest.java b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetClientAttributesExtractorTest.java index 79fbf5bdec9d..1a4d66015da0 100644 --- a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetClientAttributesExtractorTest.java +++ b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetClientAttributesExtractorTest.java @@ -147,36 +147,6 @@ void empty() { assertThat(endAttributes.build()).isEmpty(); } - @Test - void doesNotSetDuplicateSocketAddress() { - // given - Map map = new HashMap<>(); - map.put("netTransport", IP_TCP); - map.put("peerName", "1:2:3:4::"); - map.put("peerPort", "42"); - map.put("sockFamily", "inet6"); - map.put("sockPeerAddr", "1:2:3:4::"); - map.put("sockPeerName", "proxy.opentelemetry.io"); - map.put("sockPeerPort", "123"); - - Context context = Context.root(); - - // when - AttributesBuilder startAttributes = Attributes.builder(); - extractor.onStart(startAttributes, context, map); - - AttributesBuilder endAttributes = Attributes.builder(); - extractor.onEnd(endAttributes, context, map, map, null); - - // then - assertThat(startAttributes.build()) - .containsOnly( - entry(SemanticAttributes.NET_PEER_NAME, "1:2:3:4::"), - entry(SemanticAttributes.NET_PEER_PORT, 42L)); - - assertThat(endAttributes.build()).containsOnly(entry(SemanticAttributes.NET_TRANSPORT, IP_TCP)); - } - @Test void doesNotSetNegativePortValues() { // given diff --git a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractorTest.java b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractorTest.java index ac332991027c..498e046b9160 100644 --- a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractorTest.java +++ b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractorTest.java @@ -163,36 +163,6 @@ void empty() { assertThat(endAttributes.build()).isEmpty(); } - @Test - void doesNotSetDuplicatesSocketAddress() { - // given - Map map = new HashMap<>(); - map.put("netTransport", IP_TCP); - map.put("hostName", "4:3:2:1::"); - map.put("hostPort", "80"); - map.put("sockFamily", "inet6"); - map.put("sockHostAddr", "4:3:2:1::"); - map.put("sockHostPort", "8080"); - - Context context = Context.root(); - - // when - AttributesBuilder startAttributes = Attributes.builder(); - extractor.onStart(startAttributes, context, map); - - AttributesBuilder endAttributes = Attributes.builder(); - extractor.onEnd(endAttributes, context, map, null, null); - - // then - assertThat(startAttributes.build()) - .containsOnly( - entry(SemanticAttributes.NET_TRANSPORT, IP_TCP), - entry(SemanticAttributes.NET_HOST_NAME, "4:3:2:1::"), - entry(SemanticAttributes.NET_HOST_PORT, 80L)); - - assertThat(endAttributes.build()).isEmpty(); - } - @Test void doesNotSetNegativePort() { // given diff --git a/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractorStableSemconvTest.java b/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractorStableSemconvTest.java index 517e6e6963a4..d686cd725869 100644 --- a/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractorStableSemconvTest.java +++ b/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractorStableSemconvTest.java @@ -371,7 +371,7 @@ void shouldExtractServerAddressAndPortFromHostHeader() { } @Test - void shouldNotExtractDuplicatePeerAddress() { + void shouldExtractPeerAddressEvenIfItDuplicatesServerAddress() { Map request = new HashMap<>(); request.put("networkPeerAddress", "1.2.3.4"); request.put("networkPeerPort", "456"); @@ -394,6 +394,9 @@ void shouldNotExtractDuplicatePeerAddress() { AttributesBuilder endAttributes = Attributes.builder(); extractor.onEnd(endAttributes, Context.root(), request, response, null); assertThat(endAttributes.build()) - .containsOnly(entry(SemanticAttributes.HTTP_RESPONSE_STATUS_CODE, 200L)); + .containsOnly( + entry(SemanticAttributes.HTTP_RESPONSE_STATUS_CODE, 200L), + entry(NetworkAttributes.NETWORK_PEER_ADDRESS, "1.2.3.4"), + entry(NetworkAttributes.NETWORK_PEER_PORT, 456L)); } } diff --git a/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorStableSemconvTest.java b/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorStableSemconvTest.java index 4cba765d7157..220d89d04c79 100644 --- a/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorStableSemconvTest.java +++ b/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorStableSemconvTest.java @@ -483,6 +483,7 @@ void shouldExtractServerAddressAndPortFromAuthorityPseudoHeader() { void shouldExtractServerAddressAndPortFromHostHeader() { Map request = new HashMap<>(); request.put("header.host", "github.com:123"); + request.put("header.:authority", "opentelemetry.io:42"); Map response = new HashMap<>(); response.put("statusCode", "200"); @@ -505,7 +506,32 @@ void shouldExtractServerAddressAndPortFromHostHeader() { } @Test - void shouldNotExtractDuplicatePeerAddress() { + void shouldExtractServerAddressAndPortFromAuthorityPseudoHeader() { + Map request = new HashMap<>(); + request.put("header.:authority", "opentelemetry.io:42"); + + Map response = new HashMap<>(); + response.put("statusCode", "200"); + + AttributesExtractor, Map> extractor = + HttpServerAttributesExtractor.create(new TestHttpServerAttributesGetter()); + + AttributesBuilder startAttributes = Attributes.builder(); + extractor.onStart(startAttributes, Context.root(), request); + + assertThat(startAttributes.build()) + .containsOnly( + entry(SemanticAttributes.SERVER_ADDRESS, "opentelemetry.io"), + entry(SemanticAttributes.SERVER_PORT, 42L)); + + AttributesBuilder endAttributes = Attributes.builder(); + extractor.onEnd(endAttributes, Context.root(), request, response, null); + assertThat(endAttributes.build()) + .containsOnly(entry(SemanticAttributes.HTTP_RESPONSE_STATUS_CODE, 200L)); + } + + @Test + void shouldExtractPeerAddressEvenIfItDuplicatesClientAddress() { Map request = new HashMap<>(); request.put("networkPeerAddress", "1.2.3.4"); request.put("networkPeerPort", "456"); @@ -527,6 +553,9 @@ void shouldNotExtractDuplicatePeerAddress() { AttributesBuilder endAttributes = Attributes.builder(); extractor.onEnd(endAttributes, Context.root(), request, response, null); assertThat(endAttributes.build()) - .containsOnly(entry(SemanticAttributes.HTTP_RESPONSE_STATUS_CODE, 200L)); + .containsOnly( + entry(SemanticAttributes.HTTP_RESPONSE_STATUS_CODE, 200L), + entry(NetworkAttributes.NETWORK_PEER_ADDRESS, "1.2.3.4"), + entry(NetworkAttributes.NETWORK_PEER_PORT, 456L)); } } From 5258ece7f36d2db10817d3f98a68fcc88ae31009 Mon Sep 17 00:00:00 2001 From: Mateusz Rzeszutek Date: Tue, 31 Oct 2023 13:09:26 +0100 Subject: [PATCH 2/2] fixes --- .../ForwardedHostAddressAndPortExtractor.java | 7 ----- ...wardedHostAddressAndPortExtractorTest.java | 16 ------------ ...rAttributesExtractorStableSemconvTest.java | 26 ------------------- .../TwoServicesWithDirectClientCamelTest.java | 8 ++++-- .../junit/http/AbstractHttpServerTest.java | 18 +++++-------- 5 files changed, 13 insertions(+), 62 deletions(-) diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/ForwardedHostAddressAndPortExtractor.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/ForwardedHostAddressAndPortExtractor.java index 74508c739ed7..073aea6c11d5 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/ForwardedHostAddressAndPortExtractor.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/ForwardedHostAddressAndPortExtractor.java @@ -49,13 +49,6 @@ public void extract(AddressPortSink sink, REQUEST request) { return; } } - - // try :authority (HTTP 2.0 pseudo-header) - for (String host : getter.getHttpRequestHeader(request, ":authority")) { - if (extractHost(sink, host, 0, host.length())) { - return; - } - } } private static boolean extractFromForwardedHeader(AddressPortSink sink, String forwarded) { diff --git a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/ForwardedHostAddressAndPortExtractorTest.java b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/ForwardedHostAddressAndPortExtractorTest.java index b2b89171fca6..3a8827beeb13 100644 --- a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/ForwardedHostAddressAndPortExtractorTest.java +++ b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/ForwardedHostAddressAndPortExtractorTest.java @@ -125,22 +125,6 @@ void shouldParseHost( assertThat(sink.getPort()).isEqualTo(expectedPort); } - @ParameterizedTest - @ArgumentsSource(HostArgs.class) - void shouldParsePseudoAuthority( - List headers, @Nullable String expectedAddress, @Nullable Integer expectedPort) { - doReturn(emptyList()).when(getter).getHttpRequestHeader(REQUEST, "forwarded"); - doReturn(emptyList()).when(getter).getHttpRequestHeader(REQUEST, "x-forwarded-host"); - doReturn(emptyList()).when(getter).getHttpRequestHeader(REQUEST, "host"); - doReturn(headers).when(getter).getHttpRequestHeader(REQUEST, ":authority"); - - AddressAndPort sink = new AddressAndPort(); - underTest.extract(sink, REQUEST); - - assertThat(sink.getAddress()).isEqualTo(expectedAddress); - assertThat(sink.getPort()).isEqualTo(expectedPort); - } - static final class HostArgs implements ArgumentsProvider { @Override diff --git a/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorStableSemconvTest.java b/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorStableSemconvTest.java index 220d89d04c79..6d88f3016b95 100644 --- a/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorStableSemconvTest.java +++ b/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorStableSemconvTest.java @@ -483,7 +483,6 @@ void shouldExtractServerAddressAndPortFromAuthorityPseudoHeader() { void shouldExtractServerAddressAndPortFromHostHeader() { Map request = new HashMap<>(); request.put("header.host", "github.com:123"); - request.put("header.:authority", "opentelemetry.io:42"); Map response = new HashMap<>(); response.put("statusCode", "200"); @@ -505,31 +504,6 @@ void shouldExtractServerAddressAndPortFromHostHeader() { .containsOnly(entry(SemanticAttributes.HTTP_RESPONSE_STATUS_CODE, 200L)); } - @Test - void shouldExtractServerAddressAndPortFromAuthorityPseudoHeader() { - Map request = new HashMap<>(); - request.put("header.:authority", "opentelemetry.io:42"); - - Map response = new HashMap<>(); - response.put("statusCode", "200"); - - AttributesExtractor, Map> extractor = - HttpServerAttributesExtractor.create(new TestHttpServerAttributesGetter()); - - AttributesBuilder startAttributes = Attributes.builder(); - extractor.onStart(startAttributes, Context.root(), request); - - assertThat(startAttributes.build()) - .containsOnly( - entry(SemanticAttributes.SERVER_ADDRESS, "opentelemetry.io"), - entry(SemanticAttributes.SERVER_PORT, 42L)); - - AttributesBuilder endAttributes = Attributes.builder(); - extractor.onEnd(endAttributes, Context.root(), request, response, null); - assertThat(endAttributes.build()) - .containsOnly(entry(SemanticAttributes.HTTP_RESPONSE_STATUS_CODE, 200L)); - } - @Test void shouldExtractPeerAddressEvenIfItDuplicatesClientAddress() { Map request = new HashMap<>(); diff --git a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/TwoServicesWithDirectClientCamelTest.java b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/TwoServicesWithDirectClientCamelTest.java index 0aa7db927309..298f6a070a2d 100644 --- a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/TwoServicesWithDirectClientCamelTest.java +++ b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/TwoServicesWithDirectClientCamelTest.java @@ -153,6 +153,9 @@ void twoCamelServiceSpans() throws Exception { equalTo( SemanticAttributes.USER_AGENT_ORIGINAL, "Jakarta Commons-HttpClient/3.1"), + satisfies( + SemanticAttributes.HTTP_REQUEST_CONTENT_LENGTH, + val -> val.isInstanceOf(Long.class)), equalTo(SemanticAttributes.HTTP_ROUTE, "/serviceTwo"), equalTo(SemanticAttributes.NET_PROTOCOL_NAME, "http"), equalTo(SemanticAttributes.NET_PROTOCOL_VERSION, "1.1"), @@ -160,10 +163,11 @@ void twoCamelServiceSpans() throws Exception { equalTo(SemanticAttributes.NET_HOST_PORT, portTwo), equalTo(SemanticAttributes.NET_SOCK_PEER_ADDR, "127.0.0.1"), satisfies( - SemanticAttributes.HTTP_REQUEST_CONTENT_LENGTH, + SemanticAttributes.NET_SOCK_PEER_PORT, val -> val.isInstanceOf(Long.class)), + equalTo(SemanticAttributes.NET_SOCK_HOST_ADDR, "127.0.0.1"), satisfies( - SemanticAttributes.NET_SOCK_PEER_PORT, + SemanticAttributes.NET_SOCK_HOST_PORT, val -> val.isInstanceOf(Long.class))), span -> span.hasName("POST /serviceTwo") diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java index 8389b1ea5e27..255c3fba3541 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java @@ -757,6 +757,13 @@ protected SpanDataAssert assertServerSpan( if (attrs.get(netHostPortKey) != null) { assertThat(attrs).containsEntry(netHostPortKey, port); } + + AttributeKey netSockPeerAddrKey = + getAttributeKey(SemanticAttributes.NET_SOCK_PEER_ADDR); + if (attrs.get(netSockPeerAddrKey) != null) { + assertThat(attrs) + .containsEntry(netSockPeerAddrKey, options.sockPeerAddr.apply(endpoint)); + } AttributeKey netSockPeerPortKey = getAttributeKey(SemanticAttributes.NET_SOCK_PEER_PORT); if (attrs.get(netSockPeerPortKey) != null) { @@ -768,17 +775,6 @@ protected SpanDataAssert assertServerSpan( .isInstanceOf(Long.class) .isNotEqualTo(Long.valueOf(port))); } - AttributeKey netSockPeerAddrKey = - getAttributeKey(SemanticAttributes.NET_SOCK_PEER_ADDR); - if (attrs.get(netSockPeerAddrKey) != null) { - assertThat(attrs) - .containsEntry(netSockPeerAddrKey, options.sockPeerAddr.apply(endpoint)); - } - AttributeKey netSockHostAddrKey = - getAttributeKey(SemanticAttributes.NET_SOCK_PEER_ADDR); - if (attrs.get(netSockHostAddrKey) != null) { - assertThat(attrs).containsEntry(netSockHostAddrKey, "127.0.0.1"); - } assertThat(attrs) .hasEntrySatisfying(