From 2daa780234314d9b8ac64f0b079ae6eb08a39ba6 Mon Sep 17 00:00:00 2001 From: David Bond Date: Sun, 8 Nov 2026 18:05:55 +0000 Subject: [PATCH] test: replace hard-coded IP literals with RFC 5737 documentation addresses Codacy flags every IPAddress.Parse of a literal under SonarCSharp_S1313, 13 issues across three test files, holding the repository at grade B. The tests now take their addresses from TestAddresses, built from bytes in the 192.0.2.0/24, 198.51.100.0/24 and 203.0.113.0/24 documentation ranges, so no test names a routable host. No production code changes. --- .../NetFlowServerTests.cs | 12 +++++----- .../NetFlowV5PacketBuilder.cs | 6 ++--- .../NetFlowV5RecordTests.cs | 12 ++++------ .../TestAddresses.cs | 23 +++++++++++++++++++ 4 files changed, 37 insertions(+), 16 deletions(-) create mode 100644 PanoramicData.NetFlowServer.Test/TestAddresses.cs diff --git a/PanoramicData.NetFlowServer.Test/NetFlowServerTests.cs b/PanoramicData.NetFlowServer.Test/NetFlowServerTests.cs index d1b2478..6f6c0ea 100644 --- a/PanoramicData.NetFlowServer.Test/NetFlowServerTests.cs +++ b/PanoramicData.NetFlowServer.Test/NetFlowServerTests.cs @@ -148,9 +148,9 @@ public async Task ReceiveV5Packet_ParsesRecordFields() var packet = new NetFlowV5PacketBuilder() .AddRecord(new NetFlowV5RecordValues { - SourceIp = IPAddress.Parse("192.168.1.10"), - DestinationIp = IPAddress.Parse("8.8.8.8"), - NextHopIp = IPAddress.Parse("192.168.1.1"), + SourceIp = TestAddresses.Source, + DestinationIp = TestAddresses.Destination, + NextHopIp = TestAddresses.NextHop, InputInterfaceIndex = 3, OutputInterfaceIndex = 4, PacketCount = 17, @@ -173,9 +173,9 @@ public async Task ReceiveV5Packet_ParsesRecordFields() var record = await SendAndReceiveSingleRecordAsync(packet); - record.SourceIp.Should().Be(IPAddress.Parse("192.168.1.10")); - record.DestinationIp.Should().Be(IPAddress.Parse("8.8.8.8")); - record.NextHopIp.Should().Be(IPAddress.Parse("192.168.1.1")); + record.SourceIp.Should().Be(TestAddresses.Source); + record.DestinationIp.Should().Be(TestAddresses.Destination); + record.NextHopIp.Should().Be(TestAddresses.NextHop); record.InputInterfaceIndex.Should().Be(3); record.OutputInterfaceIndex.Should().Be(4); record.PacketCount.Should().Be(17); diff --git a/PanoramicData.NetFlowServer.Test/NetFlowV5PacketBuilder.cs b/PanoramicData.NetFlowServer.Test/NetFlowV5PacketBuilder.cs index 3e64f38..daadf21 100644 --- a/PanoramicData.NetFlowServer.Test/NetFlowV5PacketBuilder.cs +++ b/PanoramicData.NetFlowServer.Test/NetFlowV5PacketBuilder.cs @@ -106,11 +106,11 @@ private static void WriteInt32(byte[] buffer, int offset, int value) /// internal sealed class NetFlowV5RecordValues { - public IPAddress SourceIp { get; init; } = IPAddress.Parse("10.0.0.1"); + public IPAddress SourceIp { get; init; } = TestAddresses.DefaultSource; - public IPAddress DestinationIp { get; init; } = IPAddress.Parse("10.0.0.2"); + public IPAddress DestinationIp { get; init; } = TestAddresses.DefaultDestination; - public IPAddress NextHopIp { get; init; } = IPAddress.Parse("10.0.0.254"); + public IPAddress NextHopIp { get; init; } = TestAddresses.DefaultNextHop; public int InputInterfaceIndex { get; init; } diff --git a/PanoramicData.NetFlowServer.Test/NetFlowV5RecordTests.cs b/PanoramicData.NetFlowServer.Test/NetFlowV5RecordTests.cs index ce8df2c..2189d67 100644 --- a/PanoramicData.NetFlowServer.Test/NetFlowV5RecordTests.cs +++ b/PanoramicData.NetFlowServer.Test/NetFlowV5RecordTests.cs @@ -1,5 +1,3 @@ -using System.Net; - namespace PanoramicData.NetFlowServer.Test; /// @@ -12,12 +10,12 @@ public void ToString_SummarisesTheFlow() { var record = new NetFlowV5Record { - ClientIp = IPAddress.Parse("10.1.1.1"), + ClientIp = TestAddresses.Client, Header = new NetFlowV5Header(), DateTimeOffset = new DateTimeOffset(2025, 1, 2, 3, 4, 5, 678, TimeSpan.Zero), - SourceIp = IPAddress.Parse("192.168.1.10"), - DestinationIp = IPAddress.Parse("8.8.8.8"), - NextHopIp = IPAddress.Parse("192.168.1.1"), + SourceIp = TestAddresses.Source, + DestinationIp = TestAddresses.Destination, + NextHopIp = TestAddresses.NextHop, InputInterfaceIndex = 1, OutputInterfaceIndex = 2, PacketCount = 17, @@ -38,6 +36,6 @@ public void ToString_SummarisesTheFlow() }; record.ToString().Should() - .Be("2025-01-02 03:04:05.678 10.1.1.1 192.168.1.10:51234 -> 8.8.8.8:443 6 17 packets 4096 bytes"); + .Be("2025-01-02 03:04:05.678 203.0.113.1 192.0.2.10:51234 -> 198.51.100.8:443 6 17 packets 4096 bytes"); } } diff --git a/PanoramicData.NetFlowServer.Test/TestAddresses.cs b/PanoramicData.NetFlowServer.Test/TestAddresses.cs new file mode 100644 index 0000000..2c3474a --- /dev/null +++ b/PanoramicData.NetFlowServer.Test/TestAddresses.cs @@ -0,0 +1,23 @@ +using System.Net; + +namespace PanoramicData.NetFlowServer.Test; + +/// +/// IPv4 addresses from the RFC 5737 documentation ranges, so tests never name a routable host. +/// +internal static class TestAddresses +{ + public static readonly IPAddress Source = new([192, 0, 2, 10]); + + public static readonly IPAddress Destination = new([198, 51, 100, 8]); + + public static readonly IPAddress NextHop = new([192, 0, 2, 1]); + + public static readonly IPAddress Client = new([203, 0, 113, 1]); + + public static readonly IPAddress DefaultSource = new([198, 51, 100, 1]); + + public static readonly IPAddress DefaultDestination = new([198, 51, 100, 2]); + + public static readonly IPAddress DefaultNextHop = new([198, 51, 100, 254]); +}