Commit 83dc50e8 authored by Brickner_cp's avatar Brickner_cp

Improve Layers over IP tests.

parent 0ac5b87b
...@@ -59,12 +59,12 @@ namespace PcapDotNet.Packets.Test ...@@ -59,12 +59,12 @@ namespace PcapDotNet.Packets.Test
Console.WriteLine("Seed: " + seed); Console.WriteLine("Seed: " + seed);
random = new Random(seed); random = new Random(seed);
IpV4Layer ipV4Layer = random.NextIpV4Layer(null);
ipV4Layer.HeaderChecksum = null;
Layer ipLayer = random.NextBool() ? (Layer)ipV4Layer : random.NextIpV6Layer(IpV4Protocol.Gre, false);
for (int i = 0; i != 200; ++i) for (int i = 0; i != 200; ++i)
{ {
IpV4Layer ipV4Layer = random.NextIpV4Layer(null);
ipV4Layer.HeaderChecksum = null;
Layer ipLayer = random.NextBool() ? (Layer)ipV4Layer : random.NextIpV6Layer(IpV4Protocol.Gre, false);
GreLayer greLayer = random.NextGreLayer(); GreLayer greLayer = random.NextGreLayer();
PayloadLayer payloadLayer = random.NextPayloadLayer(random.Next(100)); PayloadLayer payloadLayer = random.NextPayloadLayer(random.Next(100));
......
...@@ -54,12 +54,16 @@ namespace PcapDotNet.Packets.Test ...@@ -54,12 +54,16 @@ namespace PcapDotNet.Packets.Test
}; };
Random random = new Random(); Random random = new Random();
int seed = random.Next();
IpV4Layer ipV4Layer = random.NextIpV4Layer(null); Console.WriteLine("Seed: " + seed);
ipV4Layer.HeaderChecksum = null; random = new Random(seed);
for (int i = 0; i != 2000; ++i) for (int i = 0; i != 2000; ++i)
{ {
IpV4Layer ipV4Layer = random.NextIpV4Layer(null);
ipV4Layer.HeaderChecksum = null;
Layer ipLayer = random.NextBool() ? (Layer)ipV4Layer : random.NextIpV6Layer(IpV4Protocol.InternetControlMessageProtocol, false);
IcmpLayer icmpLayer = random.NextIcmpLayer(); IcmpLayer icmpLayer = random.NextIcmpLayer();
icmpLayer.Checksum = null; icmpLayer.Checksum = null;
if (icmpLayer.MessageType == IcmpMessageType.DestinationUnreachable && if (icmpLayer.MessageType == IcmpMessageType.DestinationUnreachable &&
...@@ -83,45 +87,55 @@ namespace PcapDotNet.Packets.Test ...@@ -83,45 +87,55 @@ namespace PcapDotNet.Packets.Test
break; break;
} }
PacketBuilder packetBuilder = new PacketBuilder(new ILayer[] { ethernetLayer, ipV4Layer, icmpLayer }.Concat(icmpPayloadLayers)); PacketBuilder packetBuilder = new PacketBuilder(new ILayer[] { ethernetLayer, ipLayer, icmpLayer }.Concat(icmpPayloadLayers));
Packet packet = packetBuilder.Build(DateTime.Now); Packet packet = packetBuilder.Build(DateTime.Now);
Assert.IsTrue(packet.IsValid, "IsValid"); Assert.IsTrue(packet.IsValid, "IsValid");
byte[] buffer = (byte[])packet.Buffer.Clone(); byte[] buffer = (byte[])packet.Buffer.Clone();
buffer.Write(ethernetLayer.Length + ipV4Layer.Length, random.NextDatagram(icmpLayer.Length)); buffer.Write(ethernetLayer.Length + ipLayer.Length, random.NextDatagram(icmpLayer.Length));
Packet illegalPacket = new Packet(buffer, DateTime.Now, packet.DataLink); Packet illegalPacket = new Packet(buffer, DateTime.Now, packet.DataLink);
Assert.IsFalse(illegalPacket.IsValid, "IsInvalid"); Assert.IsFalse(illegalPacket.IsValid, "IsInvalid");
if (illegalPacket.Ethernet.IpV4.Icmp is IcmpUnknownDatagram) if (illegalPacket.Ethernet.Ip.Icmp is IcmpUnknownDatagram)
{ {
byte[] icmpBuffer = new byte[illegalPacket.Ethernet.IpV4.Icmp.ExtractLayer().Length]; byte[] icmpBuffer = new byte[illegalPacket.Ethernet.Ip.Icmp.ExtractLayer().Length];
ILayer layer = illegalPacket.Ethernet.IpV4.Icmp.ExtractLayer(); ILayer layer = illegalPacket.Ethernet.Ip.Icmp.ExtractLayer();
layer.Write(icmpBuffer,0,icmpBuffer.Length, null,null); layer.Write(icmpBuffer,0,icmpBuffer.Length, null,null);
layer.Finalize(icmpBuffer,0,icmpBuffer.Length,null); layer.Finalize(icmpBuffer,0,icmpBuffer.Length,null);
MoreAssert.AreSequenceEqual(illegalPacket.Ethernet.IpV4.Icmp.ToArray(), MoreAssert.AreSequenceEqual(illegalPacket.Ethernet.Ip.Icmp.ToArray(),
icmpBuffer); icmpBuffer);
Assert.AreEqual(illegalPacket, Assert.AreEqual(illegalPacket,
PacketBuilder.Build(DateTime.Now, ethernetLayer, ipV4Layer, illegalPacket.Ethernet.IpV4.Icmp.ExtractLayer())); PacketBuilder.Build(DateTime.Now, ethernetLayer, ipLayer, illegalPacket.Ethernet.Ip.Icmp.ExtractLayer()));
} }
// Ethernet // Ethernet
ethernetLayer.EtherType = EthernetType.IpV4; ethernetLayer.EtherType = ipLayer == ipV4Layer ? EthernetType.IpV4 : EthernetType.IpV6;
Assert.AreEqual(ethernetLayer, packet.Ethernet.ExtractLayer(), "Ethernet Layer"); Assert.AreEqual(ethernetLayer, packet.Ethernet.ExtractLayer(), "Ethernet Layer");
ethernetLayer.EtherType = EthernetType.None;
// IPv4 // IP.
ipV4Layer.Protocol = IpV4Protocol.InternetControlMessageProtocol; if (ipLayer == ipV4Layer)
ipV4Layer.HeaderChecksum = ((IpV4Layer)packet.Ethernet.IpV4.ExtractLayer()).HeaderChecksum; {
Assert.AreEqual(ipV4Layer, packet.Ethernet.IpV4.ExtractLayer()); // IPv4.
ipV4Layer.HeaderChecksum = null; ipV4Layer.Protocol = IpV4Protocol.InternetControlMessageProtocol;
Assert.AreEqual(ipV4Layer.Length, packet.Ethernet.IpV4.HeaderLength); ipV4Layer.HeaderChecksum = ((IpV4Layer)packet.Ethernet.IpV4.ExtractLayer()).HeaderChecksum;
Assert.IsTrue(packet.Ethernet.IpV4.IsHeaderChecksumCorrect); Assert.AreEqual(ipV4Layer, packet.Ethernet.IpV4.ExtractLayer());
Assert.AreEqual(ipV4Layer.Length + icmpLayer.Length + icmpPayloadLength, ipV4Layer.HeaderChecksum = null;
packet.Ethernet.IpV4.TotalLength); Assert.AreEqual(ipV4Layer.Length, packet.Ethernet.IpV4.HeaderLength);
Assert.AreEqual(IpV4Datagram.DefaultVersion, packet.Ethernet.IpV4.Version); Assert.IsTrue(packet.Ethernet.IpV4.IsHeaderChecksumCorrect);
Assert.AreEqual(ipV4Layer.Length + icmpLayer.Length + icmpPayloadLength,
packet.Ethernet.IpV4.TotalLength);
Assert.AreEqual(IpV4Datagram.DefaultVersion, packet.Ethernet.IpV4.Version);
}
else
{
// IPv6.
Assert.AreEqual(ipLayer, packet.Ethernet.IpV6.ExtractLayer());
}
// ICMP // ICMP
IcmpDatagram actualIcmp = packet.Ethernet.IpV4.Icmp; IcmpDatagram actualIcmp = packet.Ethernet.Ip.Icmp;
IcmpLayer actualIcmpLayer = (IcmpLayer)actualIcmp.ExtractLayer(); IcmpLayer actualIcmpLayer = (IcmpLayer)actualIcmp.ExtractLayer();
icmpLayer.Checksum = actualIcmpLayer.Checksum; icmpLayer.Checksum = actualIcmpLayer.Checksum;
Assert.AreEqual(icmpLayer, actualIcmpLayer); Assert.AreEqual(icmpLayer, actualIcmpLayer);
...@@ -135,10 +149,10 @@ namespace PcapDotNet.Packets.Test ...@@ -135,10 +149,10 @@ namespace PcapDotNet.Packets.Test
Assert.AreEqual(icmpLayer.MessageType, actualIcmp.MessageType); Assert.AreEqual(icmpLayer.MessageType, actualIcmp.MessageType);
Assert.AreEqual(icmpLayer.CodeValue, actualIcmp.Code); Assert.AreEqual(icmpLayer.CodeValue, actualIcmp.Code);
Assert.AreEqual(icmpLayer.MessageTypeAndCode, actualIcmp.MessageTypeAndCode); Assert.AreEqual(icmpLayer.MessageTypeAndCode, actualIcmp.MessageTypeAndCode);
Assert.AreEqual(packet.Length - ethernetLayer.Length - ipV4Layer.Length - IcmpDatagram.HeaderLength, actualIcmp.Payload.Length); Assert.AreEqual(packet.Length - ethernetLayer.Length - ipLayer.Length - IcmpDatagram.HeaderLength, actualIcmp.Payload.Length);
Assert.IsNotNull(icmpLayer.ToString()); Assert.IsNotNull(icmpLayer.ToString());
switch (packet.Ethernet.IpV4.Icmp.MessageType) switch (packet.Ethernet.Ip.Icmp.MessageType)
{ {
case IcmpMessageType.RouterSolicitation: case IcmpMessageType.RouterSolicitation:
case IcmpMessageType.SourceQuench: case IcmpMessageType.SourceQuench:
...@@ -169,7 +183,7 @@ namespace PcapDotNet.Packets.Test ...@@ -169,7 +183,7 @@ namespace PcapDotNet.Packets.Test
case IcmpMessageType.DomainNameReply: case IcmpMessageType.DomainNameReply:
default: default:
throw new InvalidOperationException("Invalid icmpMessageType " + packet.Ethernet.IpV4.Icmp.MessageType); throw new InvalidOperationException("Invalid icmpMessageType " + packet.Ethernet.Ip.Icmp.MessageType);
} }
} }
......
...@@ -54,54 +54,68 @@ namespace PcapDotNet.Packets.Test ...@@ -54,54 +54,68 @@ namespace PcapDotNet.Packets.Test
}; };
Random random = new Random(); Random random = new Random();
int seed = random.Next();
IpV4Layer ipV4Layer = random.NextIpV4Layer(null); Console.WriteLine("Seed: " + seed);
ipV4Layer.HeaderChecksum = null; random = new Random(seed);
for (int i = 0; i != 200; ++i) for (int i = 0; i != 200; ++i)
{ {
IpV4Layer ipV4Layer = random.NextIpV4Layer(null);
ipV4Layer.HeaderChecksum = null;
Layer ipLayer = random.NextBool() ? (Layer)ipV4Layer : random.NextIpV6Layer(IpV4Protocol.InternetGroupManagementProtocol, false);
IgmpLayer igmpLayer = random.NextIgmpLayer(); IgmpLayer igmpLayer = random.NextIgmpLayer();
Packet packet = PacketBuilder.Build(DateTime.Now, ethernetLayer, ipV4Layer, igmpLayer); Packet packet = PacketBuilder.Build(DateTime.Now, ethernetLayer, ipLayer, igmpLayer);
Assert.IsTrue(packet.IsValid, "IsValid"); Assert.IsTrue(packet.IsValid, "IsValid");
// Ethernet // Ethernet
ethernetLayer.EtherType = EthernetType.IpV4; ethernetLayer.EtherType = ipLayer == ipV4Layer ? EthernetType.IpV4 : EthernetType.IpV6;
Assert.AreEqual(ethernetLayer, packet.Ethernet.ExtractLayer(), "Ethernet Layer"); Assert.AreEqual(ethernetLayer, packet.Ethernet.ExtractLayer(), "Ethernet Layer");
ethernetLayer.EtherType = EthernetType.None;
// IPv4 // IP.
ipV4Layer.Protocol = IpV4Protocol.InternetGroupManagementProtocol; if (ipV4Layer == ipLayer)
ipV4Layer.HeaderChecksum = ((IpV4Layer)packet.Ethernet.IpV4.ExtractLayer()).HeaderChecksum; {
Assert.AreEqual(ipV4Layer, packet.Ethernet.IpV4.ExtractLayer(), "IPv4 Layer"); // IPv4.
ipV4Layer.HeaderChecksum = null; ipV4Layer.Protocol = IpV4Protocol.InternetGroupManagementProtocol;
ipV4Layer.HeaderChecksum = ((IpV4Layer)packet.Ethernet.IpV4.ExtractLayer()).HeaderChecksum;
Assert.AreEqual(ipV4Layer, packet.Ethernet.IpV4.ExtractLayer(), "IPv4 Layer");
ipV4Layer.HeaderChecksum = null;
}
else
{
// IPv6.
Assert.AreEqual(ipLayer, packet.Ethernet.IpV6.ExtractLayer(), "IPv6 Layer");
}
// IGMP // IGMP
Assert.IsTrue(packet.Ethernet.IpV4.Igmp.IsChecksumCorrect); Assert.IsTrue(packet.Ethernet.Ip.Igmp.IsChecksumCorrect);
Assert.AreEqual(igmpLayer, packet.Ethernet.IpV4.Igmp.ExtractLayer(), "IGMP Layer"); Assert.AreEqual(igmpLayer, packet.Ethernet.Ip.Igmp.ExtractLayer(), "IGMP Layer");
Assert.AreEqual(igmpLayer.GetHashCode(), packet.Ethernet.IpV4.Igmp.ExtractLayer().GetHashCode(), "IGMP Layer"); Assert.AreEqual(igmpLayer.GetHashCode(), packet.Ethernet.Ip.Igmp.ExtractLayer().GetHashCode(), "IGMP Layer");
Assert.AreNotEqual(igmpLayer, null); Assert.AreNotEqual(igmpLayer, null);
Assert.AreNotEqual(igmpLayer, random.NextPayloadLayer(igmpLayer.Length)); Assert.AreNotEqual(igmpLayer, random.NextPayloadLayer(igmpLayer.Length));
Assert.AreNotEqual(igmpLayer.GetHashCode(), random.NextPayloadLayer(igmpLayer.Length).GetHashCode()); Assert.AreNotEqual(igmpLayer.GetHashCode(), random.NextPayloadLayer(igmpLayer.Length).GetHashCode());
if (packet.Ethernet.IpV4.Igmp.QueryVersion != IgmpQueryVersion.Version3) if (packet.Ethernet.Ip.Igmp.QueryVersion != IgmpQueryVersion.Version3)
MoreAssert.IsSmallerOrEqual(IgmpDatagram.MaxMaxResponseTime, packet.Ethernet.IpV4.Igmp.MaxResponseTime); MoreAssert.IsSmallerOrEqual(IgmpDatagram.MaxMaxResponseTime, packet.Ethernet.Ip.Igmp.MaxResponseTime);
if (packet.Ethernet.IpV4.Igmp.MessageType != IgmpMessageType.MembershipQuery) if (packet.Ethernet.Ip.Igmp.MessageType != IgmpMessageType.MembershipQuery)
Assert.AreEqual(IgmpQueryVersion.None, packet.Ethernet.IpV4.Igmp.QueryVersion); Assert.AreEqual(IgmpQueryVersion.None, packet.Ethernet.Ip.Igmp.QueryVersion);
switch (igmpLayer.MessageType) switch (igmpLayer.MessageType)
{ {
case IgmpMessageType.MembershipQuery: case IgmpMessageType.MembershipQuery:
switch (igmpLayer.QueryVersion) switch (igmpLayer.QueryVersion)
{ {
case IgmpQueryVersion.Version1: case IgmpQueryVersion.Version1:
Assert.AreEqual(1, packet.Ethernet.IpV4.Igmp.Version); Assert.AreEqual(1, packet.Ethernet.Ip.Igmp.Version);
break; break;
case IgmpQueryVersion.Version2: case IgmpQueryVersion.Version2:
Assert.AreEqual(2, packet.Ethernet.IpV4.Igmp.Version); Assert.AreEqual(2, packet.Ethernet.Ip.Igmp.Version);
break; break;
case IgmpQueryVersion.Version3: case IgmpQueryVersion.Version3:
Assert.AreEqual(3, packet.Ethernet.IpV4.Igmp.Version); Assert.AreEqual(3, packet.Ethernet.Ip.Igmp.Version);
break; break;
default: default:
...@@ -111,23 +125,23 @@ namespace PcapDotNet.Packets.Test ...@@ -111,23 +125,23 @@ namespace PcapDotNet.Packets.Test
break; break;
case IgmpMessageType.MembershipReportVersion1: case IgmpMessageType.MembershipReportVersion1:
Assert.AreEqual(1, packet.Ethernet.IpV4.Igmp.Version); Assert.AreEqual(1, packet.Ethernet.Ip.Igmp.Version);
break; break;
case IgmpMessageType.MembershipReportVersion2: case IgmpMessageType.MembershipReportVersion2:
case IgmpMessageType.LeaveGroupVersion2: case IgmpMessageType.LeaveGroupVersion2:
Assert.AreEqual(2, packet.Ethernet.IpV4.Igmp.Version); Assert.AreEqual(2, packet.Ethernet.Ip.Igmp.Version);
break; break;
case IgmpMessageType.MembershipReportVersion3: case IgmpMessageType.MembershipReportVersion3:
Assert.AreEqual(3, packet.Ethernet.IpV4.Igmp.Version); Assert.AreEqual(3, packet.Ethernet.Ip.Igmp.Version);
break; break;
default: default:
Assert.Fail(igmpLayer.MessageType.ToString()); Assert.Fail(igmpLayer.MessageType.ToString());
break; break;
} }
foreach (IgmpGroupRecordDatagram groupRecord in packet.Ethernet.IpV4.Igmp.GroupRecords) foreach (IgmpGroupRecordDatagram groupRecord in packet.Ethernet.Ip.Igmp.GroupRecords)
Assert.IsNotNull(groupRecord.ToString()); Assert.IsNotNull(groupRecord.ToString());
} }
} }
......
...@@ -58,15 +58,14 @@ namespace PcapDotNet.Packets.Test ...@@ -58,15 +58,14 @@ namespace PcapDotNet.Packets.Test
Random random = new Random(); Random random = new Random();
int seed = random.Next(); int seed = random.Next();
Console.WriteLine("Seed: {0}", seed); Console.WriteLine("Seed: {0}", seed);
random = new Random(830476811); random = new Random(seed);
IpV4Layer ipV4Layer = random.NextIpV4Layer(null);
ipV4Layer.HeaderChecksum = null;
IpV6Layer ipV6Layer = random.NextIpV6Layer(IpV4Protocol.Tcp, false);
for (int i = 0; i != 1000; ++i) for (int i = 0; i != 1000; ++i)
{ {
IpV4Layer ipV4Layer = random.NextIpV4Layer(null);
ipV4Layer.HeaderChecksum = null;
IpV6Layer ipV6Layer = random.NextIpV6Layer(IpV4Protocol.Tcp, false);
EthernetType ethernetType = random.NextBool() ? EthernetType.IpV4 : EthernetType.IpV6; EthernetType ethernetType = random.NextBool() ? EthernetType.IpV4 : EthernetType.IpV6;
Layer ipLayer = (ethernetType == EthernetType.IpV4 ? (Layer)ipV4Layer : ipV6Layer); Layer ipLayer = (ethernetType == EthernetType.IpV4 ? (Layer)ipV4Layer : ipV6Layer);
TcpLayer tcpLayer = random.NextTcpLayer(); TcpLayer tcpLayer = random.NextTcpLayer();
......
...@@ -57,12 +57,12 @@ namespace PcapDotNet.Packets.Test ...@@ -57,12 +57,12 @@ namespace PcapDotNet.Packets.Test
Console.WriteLine("Seed: " + seed); Console.WriteLine("Seed: " + seed);
random = new Random(seed); random = new Random(seed);
IpV4Layer ipV4Layer = random.NextIpV4Layer(null);
ipV4Layer.HeaderChecksum = null;
IpV6Layer ipV6Layer = random.NextIpV6Layer(IpV4Protocol.Udp, false);
for (int i = 0; i != 1000; ++i) for (int i = 0; i != 1000; ++i)
{ {
IpV4Layer ipV4Layer = random.NextIpV4Layer(null);
ipV4Layer.HeaderChecksum = null;
IpV6Layer ipV6Layer = random.NextIpV6Layer(IpV4Protocol.Udp, false);
EthernetType ethernetType = random.NextBool() ? EthernetType.IpV4 : EthernetType.IpV6; EthernetType ethernetType = random.NextBool() ? EthernetType.IpV4 : EthernetType.IpV6;
Layer ipLayer = (ethernetType == EthernetType.IpV4 ? (Layer)ipV4Layer : ipV6Layer); Layer ipLayer = (ethernetType == EthernetType.IpV4 ? (Layer)ipV4Layer : ipV6Layer);
UdpLayer udpLayer = random.NextUdpLayer(); UdpLayer udpLayer = random.NextUdpLayer();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment