diff --git a/src/TickerQ.Utilities/TickerHelper.cs b/src/TickerQ.Utilities/TickerHelper.cs index e4456e07..41681334 100644 --- a/src/TickerQ.Utilities/TickerHelper.cs +++ b/src/TickerQ.Utilities/TickerHelper.cs @@ -73,8 +73,14 @@ public static byte[] CreateTickerRequest(T data) public static T ReadTickerRequest(byte[] gzipBytes) { + if (gzipBytes == null || gzipBytes.Length == 0) + return default; + var serializedObject = ReadTickerRequestAsString(gzipBytes); - + + if (string.IsNullOrWhiteSpace(serializedObject)) + return default; + return JsonSerializer.Deserialize(serializedObject, RequestJsonSerializerOptions); } diff --git a/tests/TickerQ.Tests/TickerHelperTests.cs b/tests/TickerQ.Tests/TickerHelperTests.cs index 56936dbb..bd122f55 100644 --- a/tests/TickerQ.Tests/TickerHelperTests.cs +++ b/tests/TickerQ.Tests/TickerHelperTests.cs @@ -151,6 +151,70 @@ public void ReadTickerRequestAsString_WithCompression_ThrowsForNonGzipBytes() #endregion + #region ReadTickerRequest - Null/Empty Input + + [Fact] + public void ReadTickerRequest_NullBytes_ReturnsDefault() + { + TickerHelper.UseGZipCompression = false; + + var result = TickerHelper.ReadTickerRequest(null); + + Assert.Null(result); + } + + [Fact] + public void ReadTickerRequest_EmptyBytes_ReturnsDefault() + { + TickerHelper.UseGZipCompression = false; + + var result = TickerHelper.ReadTickerRequest(Array.Empty()); + + Assert.Null(result); + } + + [Fact] + public void ReadTickerRequest_NullBytes_NullableValueType_ReturnsDefault() + { + TickerHelper.UseGZipCompression = false; + + var result = TickerHelper.ReadTickerRequest(null); + + Assert.Null(result); + } + + [Fact] + public void ReadTickerRequest_EmptyBytes_WithCompression_ReturnsDefault() + { + TickerHelper.UseGZipCompression = true; + + var result = TickerHelper.ReadTickerRequest(Array.Empty()); + + Assert.Null(result); + } + + [Fact] + public void ReadTickerRequest_WhitespaceBytes_ReturnsDefault() + { + TickerHelper.UseGZipCompression = false; + + var result = TickerHelper.ReadTickerRequest(Encoding.UTF8.GetBytes(" ")); + + Assert.Null(result); + } + + [Fact] + public void ReadTickerRequest_WhitespaceBytes_ReferenceType_ReturnsDefault() + { + TickerHelper.UseGZipCompression = false; + + var result = TickerHelper.ReadTickerRequest(Encoding.UTF8.GetBytes("")); + + Assert.Null(result); + } + + #endregion + #region Round-Trip Tests [Fact]