1
0
Files
common/test/AMWD.Common.Tests/Extensions/IPAddressExtensionsTest.cs

218 lines
4.3 KiB
C#

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<ArgumentOutOfRangeException>(() => 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);
}
}
}