using System; using System.Net; namespace AMWD.Common.Tests.Extensions { [TestClass] public class IPAddressExtensionsTest { [TestMethod] public void ShouldIncrementLastByte() { // arrange var ipAddress = IPAddress.Parse("192.168.178.22"); // act var incremented = ipAddress.Increment(); // assert Assert.AreEqual("192.168.178.23", incremented.ToString()); } [TestMethod] public void ShouldIncrementAllBytes() { // arrange var ipAddress = IPAddress.Parse("192.255.255.255"); // act var incremented = ipAddress.Increment(); // assert Assert.AreEqual("193.0.0.0", incremented.ToString()); } [TestMethod] public void ShouldIncrementOverflow() { // arrange var ipAddress = IPAddress.Parse("255.255.255.255"); // act var incremented = ipAddress.Increment(); // assert Assert.AreEqual("0.0.0.0", incremented.ToString()); } [TestMethod] public void ShouldDecrementLastByte() { // arrange var ipAddress = IPAddress.Parse("192.168.178.22"); // act var decremented = ipAddress.Decrement(); // assert Assert.AreEqual("192.168.178.21", decremented.ToString()); } [TestMethod] public void ShouldDecrementAllBytes() { // arrange var ipAddress = IPAddress.Parse("192.0.0.0"); // act var decremented = ipAddress.Decrement(); // assert Assert.AreEqual("191.255.255.255", decremented.ToString()); } [TestMethod] public void ShouldDecrementUnderflow() { // arrange var ipAddress = IPAddress.Parse("0.0.0.0"); // act var decremented = ipAddress.Decrement(); // assert Assert.AreEqual("255.255.255.255", decremented.ToString()); } [TestMethod] public void ShouldReturnCleanMappedIPAddressString() { // arrange var mapped = IPAddress.Parse("::ffff:192.168.0.1"); // act string cleaned = mapped.ToCleanString(); // assert Assert.AreEqual("192.168.0.1", cleaned); } [TestMethod] public void ShouldReturnCleanIPv6String() { // arrange var ipv6 = IPAddress.Parse("2001:db8::1"); // act / assert Assert.AreEqual("2001:db8::1", ipv6.ToCleanString()); } [TestMethod] [DataRow(0, "0.0.0.0")] [DataRow(32, "255.255.255.255")] [DataRow(8, "255.0.0.0")] [DataRow(12, "255.240.0.0")] [DataRow(24, "255.255.255.0")] [DataRow(23, "255.255.254.0")] public void ShouldReturnSubnetMask(int cidr, string expected) { // arrange // act string mask = cidr.ToSubnetMask().ToString(); // assert Assert.AreEqual(expected, mask); } [TestMethod] [DataRow(-1)] [DataRow(33)] public void ShouldThrowArgumentOutOfRangeExceptionForInvalidSubnetMask(int cidr) { // arrange // act & assert Assert.ThrowsExactly(() => cidr.ToSubnetMask()); } [TestMethod] public void ShouldObfuscateIPv4() { // arrange var ip = IPAddress.Parse("192.168.0.100"); // act string ob = ip.ObfuscateIpAddress(); // assert Assert.AreEqual("•.168.•.100", ob); } [TestMethod] public void ShouldObfuscateIpAddressWithCustomString() { // arrange var ip = IPAddress.Parse("10.0.0.5"); // act string ob = ip.ObfuscateIpAddress("X"); // assert Assert.AreEqual("X.0.X.5", ob); } [TestMethod] public void ShouldNotObfuscateLocalhostIPv4() { // arrange var ip = IPAddress.Parse("127.0.0.1"); // act string ob = ip.ObfuscateIpAddress(); // assert Assert.AreEqual("127.0.0.1", ob); } [TestMethod] public void ShouldObfuscatedMappedIP() { // arrange var ip = IPAddress.Parse("::ffff:10.0.0.5"); // act string ob = ip.ObfuscateIpAddress("X"); // assert Assert.AreEqual("X.0.X.5", ob); } [TestMethod] public void ShouldObfuscateIPv6() { // arrange var ip = IPAddress.Parse("2001:0db8:85a3:0000:0000:8a2e:0370:7334"); // act string ob = ip.ObfuscateIpAddress(); // assert Assert.AreEqual("•:db8:•::•:370:•", ob); } [TestMethod] public void ShouldNotObfuscateLocalhostIPv6() { // arrange var ip = IPAddress.Parse("::1"); // act string ob = ip.ObfuscateIpAddress(); // assert Assert.AreEqual("::1", ob); } } }