From dee34cbf07ce18d1d2dee0e435a68341c98fac26 Mon Sep 17 00:00:00 2001 From: Andrew Lock Date: Thu, 26 Oct 2023 15:12:20 +0100 Subject: [PATCH] Ignore v1 telemetry sent by version conflict packages --- .../MockTelemetryAgent.cs | 20 ++++++++++++++----- .../MockTracerAgent.cs | 5 +++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/tracer/test/Datadog.Trace.TestHelpers/MockTelemetryAgent.cs b/tracer/test/Datadog.Trace.TestHelpers/MockTelemetryAgent.cs index d6479a67a9ce..9b8a1eceb037 100644 --- a/tracer/test/Datadog.Trace.TestHelpers/MockTelemetryAgent.cs +++ b/tracer/test/Datadog.Trace.TestHelpers/MockTelemetryAgent.cs @@ -130,8 +130,9 @@ internal static TelemetryWrapper DeserializeResponse(Stream inputStream, string { return apiVersion switch { + "v1" => null, // In version conflict, we may still send v1 telemetry. Just ignore it TelemetryConstants.ApiVersionV2 => DeserializeV2(inputStream, requestType), - _ => throw new Exception($"Unknown telemetry api version: {apiVersion}"), + _ => throw new Exception($"Unknown telemetry api version: {apiVersion}, {Deserialize(inputStream)}"), }; static TelemetryWrapper DeserializeV2(Stream inputStream, string requestType) @@ -152,6 +153,12 @@ static TelemetryWrapper DeserializeV2(Stream inputStream, string requestType) return new TelemetryWrapper.V2(telemetry); } + + static string Deserialize(Stream inputStream) + { + using var sr = new StreamReader(inputStream); + return sr.ReadToEnd(); + } } protected virtual void OnRequestReceived(HttpListenerContext context) @@ -167,11 +174,14 @@ protected virtual void HandleHttpRequest(HttpListenerContext ctx) var requestType = ctx.Request.Headers[TelemetryConstants.RequestTypeHeader]; var telemetry = DeserializeResponse(ctx.Request.InputStream, apiVersion, requestType); - Telemetry.Push(telemetry); - - lock (this) + if (telemetry is not null) { - RequestHeaders = RequestHeaders.Add(new NameValueCollection(ctx.Request.Headers)); + Telemetry.Push(telemetry); + + lock (this) + { + RequestHeaders = RequestHeaders.Add(new NameValueCollection(ctx.Request.Headers)); + } } // NOTE: HttpStreamRequest doesn't support Transfer-Encoding: Chunked diff --git a/tracer/test/Datadog.Trace.TestHelpers/MockTracerAgent.cs b/tracer/test/Datadog.Trace.TestHelpers/MockTracerAgent.cs index 34ef118e6cb1..c9fad4a959fb 100644 --- a/tracer/test/Datadog.Trace.TestHelpers/MockTracerAgent.cs +++ b/tracer/test/Datadog.Trace.TestHelpers/MockTracerAgent.cs @@ -599,6 +599,11 @@ private void HandlePotentialTelemetryData(MockHttpParser.MockHttpRequest request using var stream = new MemoryStream(body); var telemetry = MockTelemetryAgent.DeserializeResponse(stream, apiVersion, requestType); + if (telemetry is null) + { + return; + } + Telemetry.Push(telemetry); lock (this)