Commit 274e1c7d authored by Brickner_cp's avatar Brickner_cp

Code coverage 96.33%

parent 40982c0c
......@@ -24,7 +24,16 @@ namespace PcapDotNet.Core.Test
if (field.Show() == "0")
return false; // TODO: support IGMP version 0.
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;
case "igmp.type":
......
......@@ -517,6 +517,7 @@ namespace PcapDotNet.Packets.Test
byte[] badPacketBuffer = new byte[packet.Length - 5];
packet.Buffer.BlockCopy(0, badPacketBuffer, 0, badPacketBuffer.Length);
Packet badPacket = new Packet(badPacketBuffer, DateTime.Now, packet.DataLink);
Assert.IsNull(badPacket.Ethernet.IpV4.Icmp);
Assert.IsFalse(badPacket.IsValid, "badPacket.IsValid");
}
......
......@@ -250,6 +250,7 @@ namespace PcapDotNet.Packets.Test
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(0, invalidPacket.Ethernet.IpV6.RealPayloadLength);
Assert.IsNull(invalidPacket.Ethernet.IpV6.Icmp);
Assert.IsFalse(invalidPacket.IsValid);
}
......@@ -296,38 +297,6 @@ namespace PcapDotNet.Packets.Test
// 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]
public void IpV6ExtensionHeaderAuthenticationBadPayloadLength()
{
......@@ -559,6 +528,38 @@ namespace PcapDotNet.Packets.Test
// 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]
public void IpV6ExtensionHeadersConstructors()
{
......
using System;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using PcapDotNet.Packets.Ethernet;
using PcapDotNet.Packets.IpV4;
......@@ -131,6 +132,17 @@ namespace PcapDotNet.Packets.Test
}
}
[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]
public void TcpOptionSelectiveAcknowledgmentBlockTest()
{
......
......@@ -116,7 +116,7 @@ namespace PcapDotNet.Packets.Test
}
[TestMethod]
public void UdpZeroChecksumTest()
public void UdpOverIpV4ZeroChecksumTest()
{
byte[] payload = new byte[2];
payload.Write(0, (ushort)65498, Endianity.Big);
......@@ -132,5 +132,23 @@ namespace PcapDotNet.Packets.Test
Assert.IsTrue(packet.Ethernet.IpV4.IsTransportChecksumCorrect);
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
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) +
Sum16Bits(destination) +
buffer[offset + Offset.Protocol] + transportLength +
Sum16Bits(buffer, offset + headerLength, transportChecksumOffset) +
Sum16Bits(buffer, offsetAfterChecksum, transportLength - transportChecksumOffset - 2);
Sum16Bits(buffer, offsetAfterChecksum, transportLength - transportChecksumOffset - sizeof(ushort));
ushort checksumResult = Sum16BitsToChecksum(sum);
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