218 lines
4.3 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|