184 lines
5.2 KiB
C#
184 lines
5.2 KiB
C#
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Microsoft Research Singularity / Netstack
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//
|
|
// File: TestIPv4Network.cs
|
|
//
|
|
|
|
using System;
|
|
|
|
#if !SINGULARITY
|
|
using System.Net;
|
|
#endif // !SINGULARITY
|
|
|
|
namespace System.Net.IP
|
|
{
|
|
internal class TestFailedException : Exception
|
|
{
|
|
internal TestFailedException(string msg)
|
|
: base(String.Format("TestFailedException \"{0}\"", msg))
|
|
{
|
|
}
|
|
}
|
|
|
|
public class TestIPv4Network
|
|
{
|
|
private static void TestBasics()
|
|
{
|
|
IPv4 address = IPv4.Parse("192.168.0.100");
|
|
IPv4 mask = IPv4.Parse("255.255.255.254");
|
|
int masklen = 31;
|
|
|
|
if (new IPv4Network(address, masklen) !=
|
|
new IPv4Network(address, mask))
|
|
{
|
|
throw new TestFailedException("Constructors");
|
|
}
|
|
|
|
if (IPv4Network.Parse("10.0.0.0/24") !=
|
|
new IPv4Network(new IPv4(0x0a000000), 24))
|
|
{
|
|
throw new TestFailedException("10/24");
|
|
}
|
|
|
|
if (IPv4Network.Parse("10.0.0.0/32") !=
|
|
new IPv4Network(new IPv4(0x0a000000), 32))
|
|
{
|
|
throw new TestFailedException("10/32");
|
|
}
|
|
|
|
if (IPv4Network.Parse("10.0.0.0/1") !=
|
|
new IPv4Network(new IPv4(0x0a000000), 1))
|
|
{
|
|
throw new TestFailedException("10/1");
|
|
}
|
|
|
|
try
|
|
{
|
|
IPv4Network.Parse("10.0.0.1//2");
|
|
throw new TestFailedException("double slash");
|
|
}
|
|
catch (FormatException)
|
|
{
|
|
}
|
|
|
|
try
|
|
{
|
|
IPv4Network.Parse("10.0.0.0/33");
|
|
throw new TestFailedException("netmask length");
|
|
}
|
|
catch (ArgumentException)
|
|
{
|
|
}
|
|
|
|
try
|
|
{
|
|
IPv4Network.Parse("10.0.0.0/xx");
|
|
throw new TestFailedException("netmask content");
|
|
}
|
|
catch (FormatException)
|
|
{
|
|
}
|
|
|
|
try
|
|
{
|
|
IPv4Network.Parse("10.x.0.0/10");
|
|
throw new TestFailedException("network content");
|
|
}
|
|
catch (FormatException)
|
|
{
|
|
}
|
|
|
|
try
|
|
{
|
|
IPv4Network.Parse("10.0.0.0/3333333333333333333333333333");
|
|
throw new TestFailedException("netmask overflow");
|
|
}
|
|
catch (OverflowException)
|
|
{
|
|
}
|
|
}
|
|
|
|
public static void TestCompare()
|
|
{
|
|
IPv4 address = IPv4.Parse("10.1.1.0");
|
|
IPv4Network outer = new IPv4Network(address, 24);
|
|
IPv4Network inner = new IPv4Network(address, 26);
|
|
|
|
if (outer.Contains(outer) == false)
|
|
{
|
|
throw new TestFailedException("outer.Contains(outer)");
|
|
}
|
|
|
|
if (outer.Contains(inner) == false)
|
|
{
|
|
throw new TestFailedException("outer.Contains(inner)");
|
|
}
|
|
|
|
if (inner.Contains(outer) == true)
|
|
{
|
|
throw new TestFailedException("inner.Contains(outer)");
|
|
}
|
|
|
|
if (outer.Contains(address) == false)
|
|
{
|
|
throw new TestFailedException("outer.Contains(address)");
|
|
}
|
|
|
|
if (inner.Contains(address) == false)
|
|
{
|
|
throw new TestFailedException("inner.Contains(address)");
|
|
}
|
|
|
|
if (outer.IsMoreSpecificThan(inner) == true)
|
|
{
|
|
throw new TestFailedException("outer.IsMoreSpecificThan(inner)");
|
|
}
|
|
|
|
if (outer.IsLessSpecificThan(inner) == false)
|
|
{
|
|
throw new TestFailedException("outer.IsLessSpecificThan(inner)");
|
|
}
|
|
|
|
if ((outer == outer) == false)
|
|
{
|
|
throw new TestFailedException("operator==");
|
|
}
|
|
|
|
if ((outer != inner) == false)
|
|
{
|
|
throw new TestFailedException("operator!=");
|
|
}
|
|
|
|
if (outer.Contains(outer.UpperBound) == false)
|
|
{
|
|
throw new TestFailedException("outer.Contains(outer.UpperBound)");
|
|
}
|
|
|
|
if (outer.Contains(outer.LowerBound) == false)
|
|
{
|
|
throw new TestFailedException("outer.Contains(outer.LowerBound)");
|
|
}
|
|
}
|
|
|
|
public static int Main()
|
|
{
|
|
try
|
|
{
|
|
TestBasics();
|
|
TestCompare();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine("FAILED\nException {0}\nStack:\n{1}",
|
|
e.Message, e.StackTrace);
|
|
return 1;
|
|
}
|
|
Console.WriteLine("Passed.");
|
|
return 0;
|
|
}
|
|
}
|
|
} // namespace System.Net.IP
|