diff --git a/src/StatsdClient/Bufferize/BufferBuilder.cs b/src/StatsdClient/Bufferize/BufferBuilder.cs index c43d33e..da6ebcf 100644 --- a/src/StatsdClient/Bufferize/BufferBuilder.cs +++ b/src/StatsdClient/Bufferize/BufferBuilder.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.Text; namespace StatsdClient.Bufferize @@ -47,7 +48,8 @@ public void Add(SerializedMetric serializedMetric) if (length < 0) { - throw new InvalidOperationException($"The metric size exceeds the internal buffer capacity {_charsBuffers.Length}: {serializedMetric.ToString()}"); + Debug.WriteLine($"The metric size exceeds the internal buffer capacity {_charsBuffers.Length}: {serializedMetric.ToString()}"); + return; } // Heuristic to know if there is enough space without calling `GetByteCount`. @@ -59,7 +61,8 @@ public void Add(SerializedMetric serializedMetric) if (byteCount > Capacity) { - throw new InvalidOperationException($"The metric size exceeds the buffer capacity {Capacity}: {serializedMetric.ToString()}"); + Debug.WriteLine($"The metric size exceeds the buffer capacity {Capacity}: {serializedMetric.ToString()}"); + return; } // For separator diff --git a/tests/StatsdClient.Tests/Bufferize/BufferBuilderTests.cs b/tests/StatsdClient.Tests/Bufferize/BufferBuilderTests.cs index fe3708e..3b9450c 100644 --- a/tests/StatsdClient.Tests/Bufferize/BufferBuilderTests.cs +++ b/tests/StatsdClient.Tests/Bufferize/BufferBuilderTests.cs @@ -49,9 +49,6 @@ public void HandleBufferAndReset() [Test] public void AddReturnedValue() { - Assert.Throws(() => _bufferBuilder.Add(CreateSerializedMetric('1', _bufferBuilder.Capacity + 1))); - Assert.AreEqual(0, _bufferBuilder.Length); - _bufferBuilder.Add(CreateSerializedMetric('1', _bufferBuilder.Capacity - 1)); // -1 for separator Assert.AreEqual(_bufferBuilder.Capacity, _bufferBuilder.Length); } diff --git a/tests/StatsdClient.Tests/DogStatsdServiceConfigurationTest.cs b/tests/StatsdClient.Tests/DogStatsdServiceConfigurationTest.cs index 26cc553..8030fa5 100644 --- a/tests/StatsdClient.Tests/DogStatsdServiceConfigurationTest.cs +++ b/tests/StatsdClient.Tests/DogStatsdServiceConfigurationTest.cs @@ -197,6 +197,32 @@ public void Setting_tag_with_env_arg(string envVar, string tag) } } + [Test] + [Timeout(5000)] + public void Test_message_too_long() + { + using (var service = new DogStatsdService()) + { + var metricsConfig = new StatsdConfig + { + StatsdServerName = "127.0.0.1", + StatsdMaxUDPPacketSize = 10, + }; + service.Configure(metricsConfig); + + var receivedData = ReceiveData( + service, + metricsConfig.StatsdServerName, + 8125, + () => + { + service.Increment("test"); + service.Increment("too_long_message_which_will_be_dropped"); + }); + Assert.AreEqual(new List { "test:1|c\n" }, receivedData); + } + } + private List ReceiveData(DogStatsdService dogstasdService, string testServerName, int testPort, Action sendData) { using (var udpListener = new UdpListener(testServerName, testPort))