Commit 274e1c7d authored by Brickner_cp's avatar Brickner_cp

Code coverage 96.33%

parent 40982c0c
...@@ -24,7 +24,16 @@ namespace PcapDotNet.Core.Test ...@@ -24,7 +24,16 @@ namespace PcapDotNet.Core.Test
if (field.Show() == "0") if (field.Show() == "0")
return false; // TODO: support IGMP version 0. return false; // TODO: support IGMP version 0.
field.AssertShowDecimal(igmpDatagram.Version); if (field.Show() == "3" && igmpDatagram.Version == 1)
{
// TODO: Fix following https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=10526
Assert.AreEqual(IgmpMessageType.MembershipQuery, igmpDatagram.MessageType);
Assert.AreEqual(8, igmpDatagram.Length);
}
else
{
field.AssertShowDecimal(igmpDatagram.Version);
}
break; break;
case "igmp.type": case "igmp.type":
......
...@@ -517,6 +517,7 @@ namespace PcapDotNet.Packets.Test ...@@ -517,6 +517,7 @@ namespace PcapDotNet.Packets.Test
byte[] badPacketBuffer = new byte[packet.Length - 5]; byte[] badPacketBuffer = new byte[packet.Length - 5];
packet.Buffer.BlockCopy(0, badPacketBuffer, 0, badPacketBuffer.Length); packet.Buffer.BlockCopy(0, badPacketBuffer, 0, badPacketBuffer.Length);
Packet badPacket = new Packet(badPacketBuffer, DateTime.Now, packet.DataLink); Packet badPacket = new Packet(badPacketBuffer, DateTime.Now, packet.DataLink);
Assert.IsNull(badPacket.Ethernet.IpV4.Icmp);
Assert.IsFalse(badPacket.IsValid, "badPacket.IsValid"); Assert.IsFalse(badPacket.IsValid, "badPacket.IsValid");
} }
......
...@@ -250,6 +250,7 @@ namespace PcapDotNet.Packets.Test ...@@ -250,6 +250,7 @@ namespace PcapDotNet.Packets.Test
Packet invalidPacket = new Packet(packet.Buffer.Take(packet.Length - 1).ToArray(), DateTime.Now, DataLinkKind.Ethernet); Packet invalidPacket = new Packet(packet.Buffer.Take(packet.Length - 1).ToArray(), DateTime.Now, DataLinkKind.Ethernet);
Assert.AreEqual(IpV6ExtensionHeaders.Empty, invalidPacket.Ethernet.IpV6.ExtensionHeaders); Assert.AreEqual(IpV6ExtensionHeaders.Empty, invalidPacket.Ethernet.IpV6.ExtensionHeaders);
Assert.AreEqual(0, invalidPacket.Ethernet.IpV6.RealPayloadLength); Assert.AreEqual(0, invalidPacket.Ethernet.IpV6.RealPayloadLength);
Assert.IsNull(invalidPacket.Ethernet.IpV6.Icmp);
Assert.IsFalse(invalidPacket.IsValid); Assert.IsFalse(invalidPacket.IsValid);
} }
...@@ -296,38 +297,6 @@ namespace PcapDotNet.Packets.Test ...@@ -296,38 +297,6 @@ namespace PcapDotNet.Packets.Test
// IpV6ExtensionHeader tests. // IpV6ExtensionHeader tests.
[TestMethod]
public void IpV6ExtensionHeadersAutomaticNextHeaderByNextExtensionHeader()
{
Packet packet = PacketBuilder.Build(
DateTime.Now,
new EthernetLayer(),
new IpV6Layer
{
ExtensionHeaders = new IpV6ExtensionHeaders(
new IpV6ExtensionHeaderDestinationOptions(null, IpV6Options.Empty),
new IpV6ExtensionHeaderDestinationOptions(IpV4Protocol.Skip, IpV6Options.Empty))
});
Assert.IsTrue(packet.IsValid);
Assert.AreEqual(IpV4Protocol.IpV6Opts, packet.Ethernet.IpV6.ExtensionHeaders[0].NextHeader);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException), AllowDerivedTypes = false)]
public void IpV6ExtensionHeadersAutomaticNextHeaderFailure()
{
Assert.IsNull(PacketBuilder.Build(
DateTime.Now,
new EthernetLayer(),
new IpV6Layer
{
ExtensionHeaders = new IpV6ExtensionHeaders(
new IpV6ExtensionHeaderDestinationOptions(null, IpV6Options.Empty))
}));
Assert.Fail();
}
[TestMethod] [TestMethod]
public void IpV6ExtensionHeaderAuthenticationBadPayloadLength() public void IpV6ExtensionHeaderAuthenticationBadPayloadLength()
{ {
...@@ -559,6 +528,38 @@ namespace PcapDotNet.Packets.Test ...@@ -559,6 +528,38 @@ namespace PcapDotNet.Packets.Test
// IpV6ExtensionHeaders tests. // IpV6ExtensionHeaders tests.
[TestMethod]
public void IpV6ExtensionHeadersAutomaticNextHeaderByNextExtensionHeader()
{
Packet packet = PacketBuilder.Build(
DateTime.Now,
new EthernetLayer(),
new IpV6Layer
{
ExtensionHeaders = new IpV6ExtensionHeaders(
new IpV6ExtensionHeaderDestinationOptions(null, IpV6Options.Empty),
new IpV6ExtensionHeaderDestinationOptions(IpV4Protocol.Skip, IpV6Options.Empty))
});
Assert.IsTrue(packet.IsValid);
Assert.AreEqual(IpV4Protocol.IpV6Opts, packet.Ethernet.IpV6.ExtensionHeaders[0].NextHeader);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException), AllowDerivedTypes = false)]
public void IpV6ExtensionHeadersAutomaticNextHeaderFailure()
{
Assert.IsNull(PacketBuilder.Build(
DateTime.Now,
new EthernetLayer(),
new IpV6Layer
{
ExtensionHeaders = new IpV6ExtensionHeaders(
new IpV6ExtensionHeaderDestinationOptions(null, IpV6Options.Empty))
}));
Assert.Fail();
}
[TestMethod] [TestMethod]
public void IpV6ExtensionHeadersConstructors() public void IpV6ExtensionHeadersConstructors()
{ {
......
using System; using System;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
using PcapDotNet.Packets.Ethernet; using PcapDotNet.Packets.Ethernet;
using PcapDotNet.Packets.IpV4; using PcapDotNet.Packets.IpV4;
...@@ -130,6 +131,17 @@ namespace PcapDotNet.Packets.Test ...@@ -130,6 +131,17 @@ namespace PcapDotNet.Packets.Test
Assert.AreEqual(payloadLayer.Data, packet.Ethernet.Ip.Tcp.Payload, "Payload"); Assert.AreEqual(payloadLayer.Data, packet.Ethernet.Ip.Tcp.Payload, "Payload");
} }
} }
[TestMethod]
public void TcpTooShort()
{
Packet packet = PacketBuilder.Build(DateTime.Now, new EthernetLayer(), new IpV4Layer(), new TcpLayer());
Assert.IsTrue(packet.IsValid);
Assert.IsNotNull(packet.Ethernet.IpV4.Tcp.Payload);
packet = new Packet(packet.Take(packet.Length - 1).ToArray(), DateTime.Now, DataLinkKind.Ethernet);
Assert.IsFalse(packet.IsValid);
Assert.IsNull(packet.Ethernet.IpV4.Tcp.Payload);
}
[TestMethod] [TestMethod]
public void TcpOptionSelectiveAcknowledgmentBlockTest() public void TcpOptionSelectiveAcknowledgmentBlockTest()
......
...@@ -116,7 +116,7 @@ namespace PcapDotNet.Packets.Test ...@@ -116,7 +116,7 @@ namespace PcapDotNet.Packets.Test
} }
[TestMethod] [TestMethod]
public void UdpZeroChecksumTest() public void UdpOverIpV4ZeroChecksumTest()
{ {
byte[] payload = new byte[2]; byte[] payload = new byte[2];
payload.Write(0, (ushort)65498, Endianity.Big); payload.Write(0, (ushort)65498, Endianity.Big);
...@@ -132,5 +132,23 @@ namespace PcapDotNet.Packets.Test ...@@ -132,5 +132,23 @@ namespace PcapDotNet.Packets.Test
Assert.IsTrue(packet.Ethernet.IpV4.IsTransportChecksumCorrect); Assert.IsTrue(packet.Ethernet.IpV4.IsTransportChecksumCorrect);
Assert.AreEqual(0xFFFF, packet.Ethernet.IpV4.Udp.Checksum); Assert.AreEqual(0xFFFF, packet.Ethernet.IpV4.Udp.Checksum);
} }
[TestMethod]
public void UdpOverIpV6ZeroChecksumTest()
{
byte[] payload = new byte[2];
payload.Write(0, (ushort)65498, Endianity.Big);
Packet packet = PacketBuilder.Build(DateTime.Now, new EthernetLayer(), new IpV6Layer(),
new UdpLayer
{
CalculateChecksumValue = true
},
new PayloadLayer
{
Data = new Datagram(payload)
});
Assert.IsTrue(packet.Ethernet.IpV6.IsTransportChecksumCorrect);
Assert.AreEqual(0xFFFF, packet.Ethernet.IpV6.Udp.Checksum);
}
} }
} }
\ No newline at end of file
...@@ -329,12 +329,12 @@ namespace PcapDotNet.Packets.IpV4 ...@@ -329,12 +329,12 @@ namespace PcapDotNet.Packets.IpV4
private static ushort CalculateTransportChecksum(byte[] buffer, int offset, int headerLength, ushort transportLength, int transportChecksumOffset, bool isChecksumOptional, IpV4Address destination) private static ushort CalculateTransportChecksum(byte[] buffer, int offset, int headerLength, ushort transportLength, int transportChecksumOffset, bool isChecksumOptional, IpV4Address destination)
{ {
int offsetAfterChecksum = offset + headerLength + transportChecksumOffset + 2; int offsetAfterChecksum = offset + headerLength + transportChecksumOffset + sizeof(ushort);
uint sum = Sum16Bits(buffer, offset + Offset.Source, IpV4Address.SizeOf) + uint sum = Sum16Bits(buffer, offset + Offset.Source, IpV4Address.SizeOf) +
Sum16Bits(destination) + Sum16Bits(destination) +
buffer[offset + Offset.Protocol] + transportLength + buffer[offset + Offset.Protocol] + transportLength +
Sum16Bits(buffer, offset + headerLength, transportChecksumOffset) + Sum16Bits(buffer, offset + headerLength, transportChecksumOffset) +
Sum16Bits(buffer, offsetAfterChecksum, transportLength - transportChecksumOffset - 2); Sum16Bits(buffer, offsetAfterChecksum, transportLength - transportChecksumOffset - sizeof(ushort));
ushort checksumResult = Sum16BitsToChecksum(sum); ushort checksumResult = Sum16BitsToChecksum(sum);
if (checksumResult == 0 && isChecksumOptional) if (checksumResult == 0 && isChecksumOptional)
......
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