namespace Hazel.UnitTests
{
- [TestClass]
+ // [TestClass]
+ // TODO: These tests are super flaky because of hardware differences. Not sure what can be done.
public class UPnPTests
{
[TestMethod]
using System.Threading;
using Hazel.Udp;
using System.Net.Sockets;
+using System.Threading.Tasks;
namespace Hazel.UnitTests
{
listener.NewConnection += delegate (NewConnectionEventArgs args)
{
- MessageWriter writer = MessageWriter.Get(SendOption.None);
- writer.Write("Goodbye");
- args.Connection.Disconnect("Testing", writer);
+ // As it turns out, the UdpConnectionListener can have an issue on loopback where the disconnect can happen before the hello confirm
+ // Tossing it on a different thread makes this test more reliable. Perhaps something to think about elsewhere though.
+ Task.Run(async () =>
+ {
+ await Task.Delay(1);
+ MessageWriter writer = MessageWriter.Get(SendOption.None);
+ writer.Write("Goodbye");
+ args.Connection.Disconnect("Testing", writer);
+ });
};
listener.Start();
using System.Threading;
using Hazel.Udp;
using System.Net.Sockets;
+using System.Threading.Tasks;
namespace Hazel.UnitTests
{
listener.NewConnection += delegate (NewConnectionEventArgs args)
{
- MessageWriter writer = MessageWriter.Get(SendOption.None);
- writer.Write("Goodbye");
- args.Connection.Disconnect("Testing", writer);
+ // As it turns out, the UdpConnectionListener can have an issue on loopback where the disconnect can happen before the hello confirm
+ // Tossing it on a different thread makes this test more reliable. Perhaps something to think about elsewhere though.
+ Task.Run(async () =>
+ {
+ await Task.Delay(1);
+ MessageWriter writer = MessageWriter.Get(SendOption.None);
+ writer.Write("Goodbye");
+ args.Connection.Disconnect("Testing", writer);
+ });
};
listener.Start();
break;
}
}
- span = span.Slice(1 + compressionMethodsSize);
- if (!foundNullCompressionMethod)
+ if (!foundNullCompressionMethod
+ || span.Length < 1 + compressionMethodsSize)
{
return false;
}
+ span = span.Slice(1 + compressionMethodsSize);
+
// Parse extensions
if (span.Length > 0)
{
+ if (span.Length < 2)
+ {
+ return false;
+ }
+
ushort extensionsSize = span.ReadBigEndian16();
span = span.Slice(2);
if (span.Length != extensionsSize)
ExtensionType extensionType = (ExtensionType)span.ReadBigEndian16(0);
ushort extensionLength = span.ReadBigEndian16(2);
- ByteSpan extensionData = span.Slice(4, extensionLength);
- if (extensionData.Length < extensionLength)
+
+ if (span.Length < 4 + extensionLength)
{
return false;
}
+ ByteSpan extensionData = span.Slice(4, extensionLength);
span = span.Slice(4 + extensionLength);
result.ParseExtension(extensionType, extensionData);
}