From db83942857233f65c590f708a929576d77b39ffa Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 20 Nov 2024 11:37:37 -0500 Subject: [PATCH 1/5] initial implementation for support ipv6 addresses in dd_agent_host rebasing --- ...dCommunicationsObjectsSpecification.groovy | 18 +++++- .../main/java/datadog/trace/api/Config.java | 61 +++++++++++-------- 2 files changed, 50 insertions(+), 29 deletions(-) diff --git a/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy b/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy index 67670f1c00b..93bea64c5bf 100644 --- a/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy +++ b/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy @@ -1,23 +1,37 @@ package datadog.communication.ddagent +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.Moshi +import com.squareup.moshi.Types import datadog.communication.monitor.Monitoring import datadog.trace.api.Config +import datadog.trace.api.IdGenerationStrategy import datadog.trace.test.util.DDSpecification import okhttp3.HttpUrl import okhttp3.OkHttpClient +import okhttp3.Request +import spock.lang.AutoCleanup +import spock.lang.Shared + +import java.lang.reflect.Type + +import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_AGENT_PORT +import static datadog.trace.api.config.TracerConfig.AGENT_HOST class SharedCommunicationsObjectsSpecification extends DDSpecification { SharedCommunicationObjects sco = new SharedCommunicationObjects() void 'nothing populated'() { given: - Config config = Mock() + injectSysConfig(AGENT_HOST, "2600:1f18:19c0:bd07:d55b::17") + Config config = Config.get() +// Config config = Mock() when: sco.createRemaining(config) then: - 1 * config.agentUrl >> 'http://example.com/' + 1 * config.agentUrl >> "http://[2600:1f18:19c0:bd07:d55b::17]:8126" 1 * config.agentNamedPipe >> null 1 * config.agentTimeout >> 1 1 * config.agentUnixDomainSocket >> null diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 5cf5e4edef8..e8da626cdcb 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -694,6 +694,8 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins if (agentHostFromEnvironment == null) { agentHost = DEFAULT_AGENT_HOST; + } else if (agentHostFromEnvironment.charAt(0) == '[') { + agentHost = agentHostFromEnvironment.substring(1, agentHostFromEnvironment.length()-2); } else { agentHost = agentHostFromEnvironment; } @@ -704,12 +706,17 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins agentPort = agentPortFromEnvironment; } - if (rebuildAgentUrl) { - agentUrl = "http://" + agentHost + ":" + agentPort; + if (rebuildAgentUrl) { //check if agenthost contains ':' + if (agentHost.indexOf(':') != -1) { //Checking to see whether host address is IPv6 vs IPv4 + agentUrl = "http://[" + agentHost + "]:" + agentPort; + } else { + agentUrl = "http://" + agentHost + ":" + agentPort; + } } else { agentUrl = agentUrlFromEnvironment; } + if (unixSocketFromEnvironment == null) { unixSocketFromEnvironment = configProvider.getString(AGENT_UNIX_DOMAIN_SOCKET); String unixPrefix = "unix://"; @@ -1230,7 +1237,7 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment()) telemetryMetricsInterval = telemetryInterval; telemetryMetricsEnabled = - configProvider.getBoolean(GeneralConfig.TELEMETRY_METRICS_ENABLED, true); + configProvider.getBoolean(TELEMETRY_METRICS_ENABLED, true); isTelemetryLogCollectionEnabled = instrumenterConfig.isTelemetryEnabled() @@ -1725,16 +1732,16 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment()) boolean longRunningEnabled = configProvider.getBoolean( - TracerConfig.TRACE_LONG_RUNNING_ENABLED, - ConfigDefaults.DEFAULT_TRACE_LONG_RUNNING_ENABLED); + TRACE_LONG_RUNNING_ENABLED, + DEFAULT_TRACE_LONG_RUNNING_ENABLED); long longRunningTraceInitialFlushInterval = configProvider.getLong( - TracerConfig.TRACE_LONG_RUNNING_INITIAL_FLUSH_INTERVAL, + TRACE_LONG_RUNNING_INITIAL_FLUSH_INTERVAL, DEFAULT_TRACE_LONG_RUNNING_INITIAL_FLUSH_INTERVAL); long longRunningTraceFlushInterval = configProvider.getLong( - TracerConfig.TRACE_LONG_RUNNING_FLUSH_INTERVAL, - ConfigDefaults.DEFAULT_TRACE_LONG_RUNNING_FLUSH_INTERVAL); + TRACE_LONG_RUNNING_FLUSH_INTERVAL, + DEFAULT_TRACE_LONG_RUNNING_FLUSH_INTERVAL); if (longRunningEnabled && (longRunningTraceInitialFlushInterval < 10 @@ -1761,16 +1768,16 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment()) this.sparkTaskHistogramEnabled = configProvider.getBoolean( - SPARK_TASK_HISTOGRAM_ENABLED, ConfigDefaults.DEFAULT_SPARK_TASK_HISTOGRAM_ENABLED); + SPARK_TASK_HISTOGRAM_ENABLED, DEFAULT_SPARK_TASK_HISTOGRAM_ENABLED); this.sparkAppNameAsService = configProvider.getBoolean( - SPARK_APP_NAME_AS_SERVICE, ConfigDefaults.DEFAULT_SPARK_APP_NAME_AS_SERVICE); + SPARK_APP_NAME_AS_SERVICE, DEFAULT_SPARK_APP_NAME_AS_SERVICE); this.jaxRsExceptionAsErrorsEnabled = configProvider.getBoolean( JAX_RS_EXCEPTION_AS_ERROR_ENABLED, - ConfigDefaults.DEFAULT_JAX_RS_EXCEPTION_AS_ERROR_ENABLED); + DEFAULT_JAX_RS_EXCEPTION_AS_ERROR_ENABLED); axisPromoteResourceName = configProvider.getBoolean(AXIS_PROMOTE_RESOURCE_NAME, false); @@ -1780,7 +1787,7 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment()) this.tracePostProcessingTimeout = configProvider.getLong( - TRACE_POST_PROCESSING_TIMEOUT, ConfigDefaults.DEFAULT_TRACE_POST_PROCESSING_TIMEOUT); + TRACE_POST_PROCESSING_TIMEOUT, DEFAULT_TRACE_POST_PROCESSING_TIMEOUT); if (isLlmObsEnabled()) { log.debug("Attempting to enable LLM Observability"); @@ -1821,31 +1828,31 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment()) this.telemetryDebugRequestsEnabled = configProvider.getBoolean( - GeneralConfig.TELEMETRY_DEBUG_REQUESTS_ENABLED, - ConfigDefaults.DEFAULT_TELEMETRY_DEBUG_REQUESTS_ENABLED); + TELEMETRY_DEBUG_REQUESTS_ENABLED, + DEFAULT_TELEMETRY_DEBUG_REQUESTS_ENABLED); this.agentlessLogSubmissionEnabled = - configProvider.getBoolean(GeneralConfig.AGENTLESS_LOG_SUBMISSION_ENABLED, false); + configProvider.getBoolean(AGENTLESS_LOG_SUBMISSION_ENABLED, false); this.agentlessLogSubmissionQueueSize = - configProvider.getInteger(GeneralConfig.AGENTLESS_LOG_SUBMISSION_QUEUE_SIZE, 1024); + configProvider.getInteger(AGENTLESS_LOG_SUBMISSION_QUEUE_SIZE, 1024); this.agentlessLogSubmissionLevel = - configProvider.getString(GeneralConfig.AGENTLESS_LOG_SUBMISSION_LEVEL, "INFO"); + configProvider.getString(AGENTLESS_LOG_SUBMISSION_LEVEL, "INFO"); this.agentlessLogSubmissionUrl = - configProvider.getString(GeneralConfig.AGENTLESS_LOG_SUBMISSION_URL); + configProvider.getString(AGENTLESS_LOG_SUBMISSION_URL); this.agentlessLogSubmissionProduct = isCiVisibilityEnabled() ? "citest" : "apm"; this.cloudPayloadTaggingServices = configProvider.getSet( - TracerConfig.TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES, - ConfigDefaults.DEFAULT_TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES); + TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES, + DEFAULT_TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES); this.cloudRequestPayloadTagging = - configProvider.getList(TracerConfig.TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING, null); + configProvider.getList(TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING, null); this.cloudResponsePayloadTagging = - configProvider.getList(TracerConfig.TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING, null); + configProvider.getList(TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING, null); this.cloudPayloadTaggingMaxDepth = - configProvider.getInteger(TracerConfig.TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH, 10); + configProvider.getInteger(TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH, 10); this.cloudPayloadTaggingMaxTags = - configProvider.getInteger(TracerConfig.TRACE_CLOUD_PAYLOAD_TAGGING_MAX_TAGS, 758); + configProvider.getInteger(TRACE_CLOUD_PAYLOAD_TAGGING_MAX_TAGS, 758); this.dependecyResolutionPeriodMillis = configProvider.getLong( @@ -1854,8 +1861,8 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment()) timelineEventsEnabled = configProvider.getBoolean( - ProfilingConfig.PROFILING_TIMELINE_EVENTS_ENABLED, - ProfilingConfig.PROFILING_TIMELINE_EVENTS_ENABLED_DEFAULT); + PROFILING_TIMELINE_EVENTS_ENABLED, + PROFILING_TIMELINE_EVENTS_ENABLED_DEFAULT); if (appSecScaEnabled != null && appSecScaEnabled @@ -3834,7 +3841,7 @@ public boolean isTraceAnalyticsIntegrationEnabled( } public boolean isSamplingMechanismValidationDisabled() { - return configProvider.getBoolean(TracerConfig.SAMPLING_MECHANISM_VALIDATION_DISABLED, false); + return configProvider.getBoolean(SAMPLING_MECHANISM_VALIDATION_DISABLED, false); } public > T getEnumValue( From ebe8e392cb525b79a5642353c04f4940b66c3076 Mon Sep 17 00:00:00 2001 From: Bruce Bujon Date: Fri, 22 Nov 2024 14:53:35 +0100 Subject: [PATCH 2/5] fix: Fix test using getAgentUrl() instead of agentUrl --- .../SharedCommunicationsObjectsSpecification.groovy | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy b/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy index 93bea64c5bf..7cea0e5dd02 100644 --- a/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy +++ b/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy @@ -24,18 +24,17 @@ class SharedCommunicationsObjectsSpecification extends DDSpecification { void 'nothing populated'() { given: injectSysConfig(AGENT_HOST, "2600:1f18:19c0:bd07:d55b::17") - Config config = Config.get() -// Config config = Mock() + Config config = Mock() when: sco.createRemaining(config) then: - 1 * config.agentUrl >> "http://[2600:1f18:19c0:bd07:d55b::17]:8126" + 1 * config.getAgentUrl() >> 'http://[2600:1f18:19c0:bd07:d55b::17]:8126' 1 * config.agentNamedPipe >> null 1 * config.agentTimeout >> 1 1 * config.agentUnixDomainSocket >> null - sco.agentUrl as String == 'http://example.com/' + sco.agentUrl as String == 'http://[2600:1f18:19c0:bd07:d55b::17]:8126/' sco.okHttpClient != null sco.monitoring.is(Monitoring.DISABLED) From 745e36495842d7067387c46487bdd00474bbcd8d Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 25 Nov 2024 15:00:51 -0800 Subject: [PATCH 3/5] updating unit tests rebasing --- ...dCommunicationsObjectsSpecification.groovy | 31 ++++++++++++++-- .../main/java/datadog/trace/api/Config.java | 35 +++++++------------ 2 files changed, 40 insertions(+), 26 deletions(-) diff --git a/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy b/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy index 7cea0e5dd02..53fa8939d8e 100644 --- a/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy +++ b/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy @@ -23,18 +23,17 @@ class SharedCommunicationsObjectsSpecification extends DDSpecification { void 'nothing populated'() { given: - injectSysConfig(AGENT_HOST, "2600:1f18:19c0:bd07:d55b::17") Config config = Mock() when: sco.createRemaining(config) then: - 1 * config.getAgentUrl() >> 'http://[2600:1f18:19c0:bd07:d55b::17]:8126' + 1 * config.agentUrl >> 'http://example.com/' 1 * config.agentNamedPipe >> null 1 * config.agentTimeout >> 1 1 * config.agentUnixDomainSocket >> null - sco.agentUrl as String == 'http://[2600:1f18:19c0:bd07:d55b::17]:8126/' + sco.agentUrl as String == 'http://example.com/' sco.okHttpClient != null sco.monitoring.is(Monitoring.DISABLED) @@ -103,4 +102,30 @@ class SharedCommunicationsObjectsSpecification extends DDSpecification { sco.monitoring.is(monitoring) sco.featuresDiscovery.is(agentFeaturesDiscovery) } + + void 'supports ipv6 agent host'() { + given: + injectSysConfig(AGENT_HOST, "2600:1f18:19c0:bd07:d55b::17") + Config config = Mock() + + when: + sco.createRemaining(config) + + then: + 1 * config.getAgentUrl() >> 'http://[2600:1f18:19c0:bd07:d55b::17]:8126' + 1 * config.agentNamedPipe >> null + 1 * config.agentTimeout >> 1 + 1 * config.agentUnixDomainSocket >> null + sco.agentUrl as String == 'http://[2600:1f18:19c0:bd07:d55b::17]:8126/' + sco.okHttpClient != null + sco.monitoring.is(Monitoring.DISABLED) + + when: + sco.featuresDiscovery(config) + + then: + 1 * config.traceAgentV05Enabled >> false + 1 * config.tracerMetricsEnabled >> false + sco.featuresDiscovery != null + } } diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index e8da626cdcb..e855e1c493c 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -695,7 +695,7 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins if (agentHostFromEnvironment == null) { agentHost = DEFAULT_AGENT_HOST; } else if (agentHostFromEnvironment.charAt(0) == '[') { - agentHost = agentHostFromEnvironment.substring(1, agentHostFromEnvironment.length()-2); + agentHost = agentHostFromEnvironment.substring(1, agentHostFromEnvironment.length() - 2); } else { agentHost = agentHostFromEnvironment; } @@ -706,8 +706,8 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins agentPort = agentPortFromEnvironment; } - if (rebuildAgentUrl) { //check if agenthost contains ':' - if (agentHost.indexOf(':') != -1) { //Checking to see whether host address is IPv6 vs IPv4 + if (rebuildAgentUrl) { // check if agenthost contains ':' + if (agentHost.indexOf(':') != -1) { // Checking to see whether host address is IPv6 vs IPv4 agentUrl = "http://[" + agentHost + "]:" + agentPort; } else { agentUrl = "http://" + agentHost + ":" + agentPort; @@ -716,7 +716,6 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins agentUrl = agentUrlFromEnvironment; } - if (unixSocketFromEnvironment == null) { unixSocketFromEnvironment = configProvider.getString(AGENT_UNIX_DOMAIN_SOCKET); String unixPrefix = "unix://"; @@ -1236,8 +1235,7 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment()) } telemetryMetricsInterval = telemetryInterval; - telemetryMetricsEnabled = - configProvider.getBoolean(TELEMETRY_METRICS_ENABLED, true); + telemetryMetricsEnabled = configProvider.getBoolean(TELEMETRY_METRICS_ENABLED, true); isTelemetryLogCollectionEnabled = instrumenterConfig.isTelemetryEnabled() @@ -1731,17 +1729,14 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment()) apiKey = tmpApiKey; boolean longRunningEnabled = - configProvider.getBoolean( - TRACE_LONG_RUNNING_ENABLED, - DEFAULT_TRACE_LONG_RUNNING_ENABLED); + configProvider.getBoolean(TRACE_LONG_RUNNING_ENABLED, DEFAULT_TRACE_LONG_RUNNING_ENABLED); long longRunningTraceInitialFlushInterval = configProvider.getLong( TRACE_LONG_RUNNING_INITIAL_FLUSH_INTERVAL, DEFAULT_TRACE_LONG_RUNNING_INITIAL_FLUSH_INTERVAL); long longRunningTraceFlushInterval = configProvider.getLong( - TRACE_LONG_RUNNING_FLUSH_INTERVAL, - DEFAULT_TRACE_LONG_RUNNING_FLUSH_INTERVAL); + TRACE_LONG_RUNNING_FLUSH_INTERVAL, DEFAULT_TRACE_LONG_RUNNING_FLUSH_INTERVAL); if (longRunningEnabled && (longRunningTraceInitialFlushInterval < 10 @@ -1771,13 +1766,11 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment()) SPARK_TASK_HISTOGRAM_ENABLED, DEFAULT_SPARK_TASK_HISTOGRAM_ENABLED); this.sparkAppNameAsService = - configProvider.getBoolean( - SPARK_APP_NAME_AS_SERVICE, DEFAULT_SPARK_APP_NAME_AS_SERVICE); + configProvider.getBoolean(SPARK_APP_NAME_AS_SERVICE, DEFAULT_SPARK_APP_NAME_AS_SERVICE); this.jaxRsExceptionAsErrorsEnabled = configProvider.getBoolean( - JAX_RS_EXCEPTION_AS_ERROR_ENABLED, - DEFAULT_JAX_RS_EXCEPTION_AS_ERROR_ENABLED); + JAX_RS_EXCEPTION_AS_ERROR_ENABLED, DEFAULT_JAX_RS_EXCEPTION_AS_ERROR_ENABLED); axisPromoteResourceName = configProvider.getBoolean(AXIS_PROMOTE_RESOURCE_NAME, false); @@ -1828,8 +1821,7 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment()) this.telemetryDebugRequestsEnabled = configProvider.getBoolean( - TELEMETRY_DEBUG_REQUESTS_ENABLED, - DEFAULT_TELEMETRY_DEBUG_REQUESTS_ENABLED); + TELEMETRY_DEBUG_REQUESTS_ENABLED, DEFAULT_TELEMETRY_DEBUG_REQUESTS_ENABLED); this.agentlessLogSubmissionEnabled = configProvider.getBoolean(AGENTLESS_LOG_SUBMISSION_ENABLED, false); @@ -1837,14 +1829,12 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment()) configProvider.getInteger(AGENTLESS_LOG_SUBMISSION_QUEUE_SIZE, 1024); this.agentlessLogSubmissionLevel = configProvider.getString(AGENTLESS_LOG_SUBMISSION_LEVEL, "INFO"); - this.agentlessLogSubmissionUrl = - configProvider.getString(AGENTLESS_LOG_SUBMISSION_URL); + this.agentlessLogSubmissionUrl = configProvider.getString(AGENTLESS_LOG_SUBMISSION_URL); this.agentlessLogSubmissionProduct = isCiVisibilityEnabled() ? "citest" : "apm"; this.cloudPayloadTaggingServices = configProvider.getSet( - TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES, - DEFAULT_TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES); + TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES, DEFAULT_TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES); this.cloudRequestPayloadTagging = configProvider.getList(TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING, null); this.cloudResponsePayloadTagging = @@ -1861,8 +1851,7 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment()) timelineEventsEnabled = configProvider.getBoolean( - PROFILING_TIMELINE_EVENTS_ENABLED, - PROFILING_TIMELINE_EVENTS_ENABLED_DEFAULT); + PROFILING_TIMELINE_EVENTS_ENABLED, PROFILING_TIMELINE_EVENTS_ENABLED_DEFAULT); if (appSecScaEnabled != null && appSecScaEnabled From 11990d152a8bbc846e62021fb7d3ad270a00d83d Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Mon, 25 Nov 2024 15:03:19 -0800 Subject: [PATCH 4/5] cleanup --- .../SharedCommunicationsObjectsSpecification.groovy | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy b/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy index 53fa8939d8e..e7b35141923 100644 --- a/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy +++ b/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy @@ -1,21 +1,11 @@ package datadog.communication.ddagent -import com.squareup.moshi.JsonAdapter -import com.squareup.moshi.Moshi -import com.squareup.moshi.Types import datadog.communication.monitor.Monitoring import datadog.trace.api.Config -import datadog.trace.api.IdGenerationStrategy import datadog.trace.test.util.DDSpecification import okhttp3.HttpUrl import okhttp3.OkHttpClient -import okhttp3.Request -import spock.lang.AutoCleanup -import spock.lang.Shared -import java.lang.reflect.Type - -import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_AGENT_PORT import static datadog.trace.api.config.TracerConfig.AGENT_HOST class SharedCommunicationsObjectsSpecification extends DDSpecification { From 6e11420939bb5e222e8caafbe15455f2e1a248e7 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Wed, 15 Jan 2025 11:10:03 -0500 Subject: [PATCH 5/5] fixing bug with parsing host with brackets --- ...dCommunicationsObjectsSpecification.groovy | 20 ++++++++++++------- .../main/java/datadog/trace/api/Config.java | 2 +- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy b/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy index e7b35141923..0584c32fdf6 100644 --- a/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy +++ b/communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy @@ -93,7 +93,7 @@ class SharedCommunicationsObjectsSpecification extends DDSpecification { sco.featuresDiscovery.is(agentFeaturesDiscovery) } - void 'supports ipv6 agent host'() { + void 'supports ipv6 agent host w/o brackets'() { given: injectSysConfig(AGENT_HOST, "2600:1f18:19c0:bd07:d55b::17") Config config = Mock() @@ -107,15 +107,21 @@ class SharedCommunicationsObjectsSpecification extends DDSpecification { 1 * config.agentTimeout >> 1 1 * config.agentUnixDomainSocket >> null sco.agentUrl as String == 'http://[2600:1f18:19c0:bd07:d55b::17]:8126/' - sco.okHttpClient != null - sco.monitoring.is(Monitoring.DISABLED) + } + + void 'supports ipv6 agent host w/ brackets'() { + given: + injectSysConfig(AGENT_HOST, "[2600:1f18:19c0:bd07:d55b::17]") + Config config = Mock() when: - sco.featuresDiscovery(config) + sco.createRemaining(config) then: - 1 * config.traceAgentV05Enabled >> false - 1 * config.tracerMetricsEnabled >> false - sco.featuresDiscovery != null + 1 * config.getAgentUrl() >> 'http://[2600:1f18:19c0:bd07:d55b::17]:8126' + 1 * config.agentNamedPipe >> null + 1 * config.agentTimeout >> 1 + 1 * config.agentUnixDomainSocket >> null + sco.agentUrl as String == 'http://[2600:1f18:19c0:bd07:d55b::17]:8126/' } } diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index e855e1c493c..c69c6416b88 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -695,7 +695,7 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins if (agentHostFromEnvironment == null) { agentHost = DEFAULT_AGENT_HOST; } else if (agentHostFromEnvironment.charAt(0) == '[') { - agentHost = agentHostFromEnvironment.substring(1, agentHostFromEnvironment.length() - 2); + agentHost = agentHostFromEnvironment.substring(1, agentHostFromEnvironment.length() - 1); } else { agentHost = agentHostFromEnvironment; }