From ea1b10d2b35f9c98f78a0507713f86922af73bc9 Mon Sep 17 00:00:00 2001 From: "Hochrieser, Matthias" Date: Wed, 17 Jul 2024 10:49:20 +0200 Subject: [PATCH] Pull request #261: RUM-20521 Changing Bytes to long for WebRequestTracer Merge in OP/openkit-dotnet from feature/RUM-20521-openkit-java-.net-native-should-use-long-instead-of-int-for-bytessent-and to main * commit '71aea275c9a2710ad185808709add7b7c34fee56': RUM-20521 Changing Bytes to long for WebRequestTracer GitOrigin-RevId: ed3de4fb9845beb71d0660698c00e0f46c33940e --- CHANGELOG.md | 7 ++ .../API/IWebRequestTracer.cs | 16 +++++ .../Objects/IWebRequestTracerInternals.cs | 4 +- .../Core/Objects/NullWebRequestTracer.cs | 9 +++ .../Core/Objects/WebRequestTracer.cs | 14 +++- src/Dynatrace.OpenKit/Protocol/Beacon.cs | 18 +++++ .../Core/Objects/NullWebRequestTracerTest.cs | 26 ++++++++ .../Core/Objects/WebRequestTracerTest.cs | 66 +++++++++++++++++-- .../Protocol/BeaconTest.cs | 28 ++++---- 9 files changed, 166 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e6cc28..c21169a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,17 @@ ## [Unreleased](https://github.com/Dynatrace/openkit-dotnet/compare/v3.2.0...HEAD) +### Added + +- `IWebRequestTracer.SetBytesSent(long bytes)` to increase the size range +- `IWebRequestTracer.SetBytesReceived(long bytes)` to increase the size range + ### Changed - `HttpClientWebClient` for NET3.5 is now using User-Agent property directly - Improved cancelation or disposal of childs when leaving an action +- Deprecated `IWebRequestTracer.SetBytesSent(int bytes)` due to datatype limitations +- Deprecated `IWebRequestTracer.SetBytesReceived(int bytes)` due to datatype limitations ## 3.2.0 [Release date: 2023-12-06] [GitHub Releases](https://github.com/Dynatrace/openkit-dotnet/releases/tag/v3.2.0) diff --git a/src/Dynatrace.OpenKit/API/IWebRequestTracer.cs b/src/Dynatrace.OpenKit/API/IWebRequestTracer.cs index 0d7140c..132aebf 100644 --- a/src/Dynatrace.OpenKit/API/IWebRequestTracer.cs +++ b/src/Dynatrace.OpenKit/API/IWebRequestTracer.cs @@ -48,14 +48,30 @@ public interface IWebRequestTracer : IDisposable /// /// number of bytes sent by the web request /// + [Obsolete("Use SetBytesSent(long) instead")] IWebRequestTracer SetBytesSent(int bytesSent); + /// + /// Sets the amount of sent bytes of the web request + /// + /// number of bytes sent by the web request + /// + IWebRequestTracer SetBytesSent(long bytesSent); + /// /// Sets the amount of received bytes of the web request /// /// number of bytes received by the web request /// + [Obsolete("Use SetBytesReceived(long) instead")] IWebRequestTracer SetBytesReceived(int bytesReceived); + + /// + /// Sets the amount of received bytes of the web request + /// + /// number of bytes received by the web request + /// + IWebRequestTracer SetBytesReceived(long bytesReceived); } } diff --git a/src/Dynatrace.OpenKit/Core/Objects/IWebRequestTracerInternals.cs b/src/Dynatrace.OpenKit/Core/Objects/IWebRequestTracerInternals.cs index 4d4cfa4..0f9f12f 100644 --- a/src/Dynatrace.OpenKit/Core/Objects/IWebRequestTracerInternals.cs +++ b/src/Dynatrace.OpenKit/Core/Objects/IWebRequestTracerInternals.cs @@ -61,12 +61,12 @@ internal interface IWebRequestTracerInternals : IWebRequestTracer, ICancelableOp /// /// The number of bytes sent /// - int BytesSent { get; } + long BytesSent { get; } /// /// The number of received bytes /// - int BytesReceived { get; } + long BytesReceived { get; } /// /// Indicates whether this was stopped diff --git a/src/Dynatrace.OpenKit/Core/Objects/NullWebRequestTracer.cs b/src/Dynatrace.OpenKit/Core/Objects/NullWebRequestTracer.cs index bbe1bea..9625173 100644 --- a/src/Dynatrace.OpenKit/Core/Objects/NullWebRequestTracer.cs +++ b/src/Dynatrace.OpenKit/Core/Objects/NullWebRequestTracer.cs @@ -43,12 +43,21 @@ public IWebRequestTracer SetBytesReceived(int bytesReceived) { return this; } + public IWebRequestTracer SetBytesReceived(long bytesReceived) + { + return this; + } public IWebRequestTracer SetBytesSent(int bytesSent) { return this; } + public IWebRequestTracer SetBytesSent(long bytesSent) + { + return this; + } + public IWebRequestTracer Start() { return this; diff --git a/src/Dynatrace.OpenKit/Core/Objects/WebRequestTracer.cs b/src/Dynatrace.OpenKit/Core/Objects/WebRequestTracer.cs index f0243d1..f695ffb 100644 --- a/src/Dynatrace.OpenKit/Core/Objects/WebRequestTracer.cs +++ b/src/Dynatrace.OpenKit/Core/Objects/WebRequestTracer.cs @@ -131,9 +131,9 @@ internal static bool IsValidUrlScheme(string url) public int ResponseCode { get; private set; } = -1; - public int BytesSent { get; private set; } = -1; + public long BytesSent { get; private set; } = -1; - public int BytesReceived { get; private set; } = -1; + public long BytesReceived { get; private set; } = -1; bool IWebRequestTracerInternals.IsStopped => EndTime != -1; @@ -215,6 +215,11 @@ private void DoStop(int responseCode, bool discardData) } public IWebRequestTracer SetBytesSent(int bytesSent) + { + return SetBytesSent((long) bytesSent); + } + + public IWebRequestTracer SetBytesSent(long bytesSent) { lock (lockObject) { @@ -228,6 +233,11 @@ public IWebRequestTracer SetBytesSent(int bytesSent) } public IWebRequestTracer SetBytesReceived(int bytesReceived) + { + return SetBytesReceived((long) bytesReceived); + } + + public IWebRequestTracer SetBytesReceived(long bytesReceived) { lock (lockObject) { diff --git a/src/Dynatrace.OpenKit/Protocol/Beacon.cs b/src/Dynatrace.OpenKit/Protocol/Beacon.cs index 2ab70cc..39c2f5e 100644 --- a/src/Dynatrace.OpenKit/Protocol/Beacon.cs +++ b/src/Dynatrace.OpenKit/Protocol/Beacon.cs @@ -1087,6 +1087,24 @@ private static void AddKeyValuePairIfNotNegative(StringBuilder builder, string k } } + /// + /// Serialization helper method for adding key/value pairs with int values. + /// + /// + /// The key value pair is only added if the given is not negative. + /// + /// + /// + /// + /// + private static void AddKeyValuePairIfNotNegative(StringBuilder builder, string key, long longValue) + { + if (longValue >= 0) + { + AddKeyValuePair(builder, key, longValue); + } + } + // helper method for adding key/value pairs with double values private static void AddKeyValuePair(StringBuilder builder, string key, double doubleValue) { diff --git a/tests/Dynatrace.OpenKit.Tests/Core/Objects/NullWebRequestTracerTest.cs b/tests/Dynatrace.OpenKit.Tests/Core/Objects/NullWebRequestTracerTest.cs index fd73d67..c6ba613 100644 --- a/tests/Dynatrace.OpenKit.Tests/Core/Objects/NullWebRequestTracerTest.cs +++ b/tests/Dynatrace.OpenKit.Tests/Core/Objects/NullWebRequestTracerTest.cs @@ -46,6 +46,19 @@ public void SetBytesSentReturnsSelf() Assert.That(obtained, Is.SameAs(target)); } + [Test] + public void SetBytesSentLongReturnsSelf() + { + // given + var target = NullWebRequestTracer.Instance; + + // when + var obtained = target.SetBytesSent(37L); + + // then + Assert.That(obtained, Is.SameAs(target)); + } + [Test] public void SetBytesReceivedReturnsSelf() { @@ -59,6 +72,19 @@ public void SetBytesReceivedReturnsSelf() Assert.That(obtained, Is.SameAs(target)); } + [Test] + public void SetBytesReceivedLongReturnsSelf() + { + // given + var target = NullWebRequestTracer.Instance; + + // when + var obtained = target.SetBytesReceived(73L); + + // then + Assert.That(obtained, Is.SameAs(target)); + } + [Test] public void StartReturnsSelf() { diff --git a/tests/Dynatrace.OpenKit.Tests/Core/Objects/WebRequestTracerTest.cs b/tests/Dynatrace.OpenKit.Tests/Core/Objects/WebRequestTracerTest.cs index df3f658..5ea6414 100644 --- a/tests/Dynatrace.OpenKit.Tests/Core/Objects/WebRequestTracerTest.cs +++ b/tests/Dynatrace.OpenKit.Tests/Core/Objects/WebRequestTracerTest.cs @@ -137,7 +137,7 @@ public void SetBytesSentSetsTheNumberOfSentBytes() var obtained = target.SetBytesSent(1234); // then - Assert.That(target.BytesSent, Is.EqualTo(1234)); + Assert.That(target.BytesSent, Is.EqualTo(1234L)); Assert.That(obtained, Is.SameAs(target)); } @@ -152,7 +152,36 @@ public void SetBytesSentDoesNotSetAnythingIfStoppedWithResponseCode() var obtained = target.SetBytesSent(1234); // then - Assert.That(target.BytesSent, Is.EqualTo(-1)); + Assert.That(target.BytesSent, Is.EqualTo(-1L)); + Assert.That(obtained, Is.SameAs(target)); + } + + [Test] + public void SetBytesSentLongSetsTheNumberOfSentBytes() + { + // given + var target = CreateWebRequestTracer().Build(); + + // when setting the sent bytes + var obtained = target.SetBytesSent(1234L); + + // then + Assert.That(target.BytesSent, Is.EqualTo(1234L)); + Assert.That(obtained, Is.SameAs(target)); + } + + [Test] + public void SetBytesSentLongDoesNotSetAnythingIfStoppedWithResponseCode() + { + // given + var target = CreateWebRequestTracer().Build(); + target.Stop(200); + + // when setting the sent bytes + var obtained = target.SetBytesSent(1234L); + + // then + Assert.That(target.BytesSent, Is.EqualTo(-1L)); Assert.That(obtained, Is.SameAs(target)); } @@ -166,7 +195,7 @@ public void SetBytesReceivedSetsTheNumberOfReceivedBytes() var obtained = target.SetBytesReceived(4321); // then - Assert.That(target.BytesReceived, Is.EqualTo(4321)); + Assert.That(target.BytesReceived, Is.EqualTo(4321L)); Assert.That(obtained, Is.SameAs(target)); } @@ -181,7 +210,36 @@ public void SetBytesReceivedDoesNotSetAnythingIfStoppedWithResponseCode() var obtained = target.SetBytesReceived(4321); // then - Assert.That(target.BytesReceived, Is.EqualTo(-1)); + Assert.That(target.BytesReceived, Is.EqualTo(-1L)); + Assert.That(obtained, Is.SameAs(target)); + } + + [Test] + public void SetBytesReceivedLongSetsTheNumberOfReceivedBytes() + { + // given + var target = CreateWebRequestTracer().Build(); + + // when setting the received bytes + var obtained = target.SetBytesReceived(4321L); + + // then + Assert.That(target.BytesReceived, Is.EqualTo(4321L)); + Assert.That(obtained, Is.SameAs(target)); + } + + [Test] + public void SetBytesReceivedLongDoesNotSetAnythingIfStoppedWithResponseCode() + { + // given + var target = CreateWebRequestTracer().Build(); + target.Stop(200); + + // when setting the received bytes + var obtained = target.SetBytesReceived(4321L); + + // then + Assert.That(target.BytesReceived, Is.EqualTo(-1L)); Assert.That(obtained, Is.SameAs(target)); } diff --git a/tests/Dynatrace.OpenKit.Tests/Protocol/BeaconTest.cs b/tests/Dynatrace.OpenKit.Tests/Protocol/BeaconTest.cs index e2969fb..9406233 100644 --- a/tests/Dynatrace.OpenKit.Tests/Protocol/BeaconTest.cs +++ b/tests/Dynatrace.OpenKit.Tests/Protocol/BeaconTest.cs @@ -3193,8 +3193,8 @@ public void AddWebRequest() // given var target = CreateBeacon().Build(); - const int sentBytes = 1337; - const int receivedBytes = 1447; + const long sentBytes = 1337; + const long receivedBytes = 1447; const int responseCode = 418; var tracer = Substitute.For(); tracer.Url.Returns(Url); @@ -3268,8 +3268,8 @@ public void CanAddSentBytesEqualToZeroToWebRequestTracer() // given var target = CreateBeacon().Build(); - const int sentBytes = 0; - const int receivedBytes = 1447; + const long sentBytes = 0; + const long receivedBytes = 1447; const int responseCode = 418; var tracer = Substitute.For(); tracer.Url.Returns(Url); @@ -3304,8 +3304,8 @@ public void CannnotAddSentBytesLessThanZeroToWebRequestTracer() // given var target = CreateBeacon().Build(); - const int sentBytes = -1; - const int receivedBytes = 1447; + const long sentBytes = -1; + const long receivedBytes = 1447; const int responseCode = 418; var tracer = Substitute.For(); tracer.Url.Returns(Url); @@ -3339,8 +3339,8 @@ public void CanAddReceivedBytesEqualToZeroToWebRequestTracer() // given var target = CreateBeacon().Build(); - const int sentBytes = 1337; - const int receivedBytes = 0; + const long sentBytes = 1337; + const long receivedBytes = 0; const int responseCode = 418; var tracer = Substitute.For(); tracer.Url.Returns(Url); @@ -3375,8 +3375,8 @@ public void CannnotAddReceivedBytesLessThanZeroToWebRequestTracer() // given var target = CreateBeacon().Build(); - const int sentBytes = 1337; - const int receivedBytes = -1; + const long sentBytes = 1337; + const long receivedBytes = -1; const int responseCode = 418; var tracer = Substitute.For(); tracer.Url.Returns(Url); @@ -3410,8 +3410,8 @@ public void CanAddResponseCodeEqualToZeroToWebRequestTracer() // given var target = CreateBeacon().Build(); - const int sentBytes = 1337; - const int receivedBytes = 1447; + const long sentBytes = 1337; + const long receivedBytes = 1447; const int responseCode = 0; var tracer = Substitute.For(); tracer.Url.Returns(Url); @@ -3446,8 +3446,8 @@ public void CannnotAddResponseCodeLessThanZeroToWebRequestTracer() // given var target = CreateBeacon().Build(); - const int sentBytes = 1337; - const int receivedBytes = 1447; + const long sentBytes = 1337; + const long receivedBytes = 1447; const int responseCode = -1; var tracer = Substitute.For(); tracer.Url.Returns(Url);