mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-09-15 23:02:34 +02:00
* Add ability to add structured deny data to NetConnectingArgs. Builds on the (horrifying) NetStructuredDisconnectMessages so that content can do more stuff. To be used by SS14 to throttle people when they try to connect to a full server. * Completely rewrite NetStructuredDisconnectMessages So this class was a mess, and it was so bad it wasn't usable from content! System.Text.Json isn't sandbox safe (and I don't want to look into that right now), so the previous API surface of "pass the JsonNode around everywhere" just didn't work at all for content. I decided the easiest solution would be to completely rewrite the entire thing to be a layer over a Dictionary<string, object> instead. This warranted a complete rewrite of the API, which should be fine as I doubt anybody was using it anyways. Also, fully tested.
114 lines
3.7 KiB
C#
114 lines
3.7 KiB
C#
using NUnit.Framework;
|
|
using Robust.Shared.Network;
|
|
|
|
namespace Robust.UnitTesting.Shared.Networking;
|
|
|
|
[TestFixture]
|
|
[Parallelizable(ParallelScope.All)]
|
|
[TestOf(typeof(NetDisconnectMessage))]
|
|
internal sealed class NetDisconnectMessageTest
|
|
{
|
|
[Test]
|
|
[TestCase("Disconnected: bye", "Disconnected: bye", NetDisconnectMessage.DefaultRedialFlag)]
|
|
[TestCase("Disconnected: {\"reason\": \"bye\"}", "bye", NetDisconnectMessage.DefaultRedialFlag)]
|
|
[TestCase("Disconnected: {}", NetDisconnectMessage.DefaultReason, NetDisconnectMessage.DefaultRedialFlag)]
|
|
[TestCase("Disconnected: {\"redial\": true}", NetDisconnectMessage.DefaultReason, true)]
|
|
[TestCase("Disconnected: {\"redial\": true, \"foobar\": 5}", NetDisconnectMessage.DefaultReason, true)]
|
|
[TestCase("Disconnected: {\"redial\": true, \"foobar\": 5, \"reason\": \"asdf\"}", "asdf", true)]
|
|
[TestCase("Disconnected: {", "Disconnected: {", NetDisconnectMessage.DefaultRedialFlag)]
|
|
[TestCase("Disconnected: {\"a\":[]}", NetDisconnectMessage.DefaultReason, NetDisconnectMessage.DefaultRedialFlag)]
|
|
[TestCase("{\"redial\": true, \"foobar\": 5, \"reason\": \"asdf\"}", "asdf", true)]
|
|
public void TestBasicDecode(string encoded, string reasonExpected, bool redialExpected)
|
|
{
|
|
var parsed = NetDisconnectMessage.Decode(encoded);
|
|
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(parsed.Reason, Is.EqualTo(reasonExpected));
|
|
Assert.That(parsed.RedialFlag, Is.EqualTo(redialExpected));
|
|
});
|
|
}
|
|
|
|
[Test]
|
|
public void TestEncode()
|
|
{
|
|
var value = new NetDisconnectMessage("foobar", true)
|
|
{
|
|
Values =
|
|
{
|
|
["asdf"] = 20.5f
|
|
}
|
|
};
|
|
|
|
var encoded = value.Encode();
|
|
TestContext.Write($"Encoded: {encoded}\n");
|
|
var decodedAgain = NetDisconnectMessage.Decode(encoded);
|
|
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(decodedAgain.Reason, Is.EqualTo("foobar"));
|
|
Assert.That(decodedAgain.RedialFlag, Is.EqualTo(true));
|
|
Assert.That(decodedAgain.SingleOf("asdf"), Is.EqualTo(20.5f));
|
|
});
|
|
}
|
|
|
|
[Test]
|
|
public void TestDefaultConstructor()
|
|
{
|
|
var value = new NetDisconnectMessage("foobar");
|
|
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(value.Reason, Is.EqualTo("foobar"));
|
|
Assert.That(value.RedialFlag, Is.EqualTo(false));
|
|
});
|
|
}
|
|
|
|
[Test]
|
|
public void TestValueOfInt()
|
|
{
|
|
var parsed = NetDisconnectMessage.Decode("{\"foobar\": 5}");
|
|
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(parsed.Int32Of("foobar"), Is.EqualTo(5));
|
|
Assert.That(parsed.Int32Of("asdf"), Is.Null);
|
|
Assert.That(parsed.Int32Of("asdf", 7), Is.EqualTo(7));
|
|
});
|
|
}
|
|
|
|
[Test]
|
|
public void TestValueOfFloat()
|
|
{
|
|
var parsed = NetDisconnectMessage.Decode("{\"foobar\": 5.5}");
|
|
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(parsed.SingleOf("foobar"), Is.EqualTo(5.5f));
|
|
Assert.That(parsed.SingleOf("asdf"), Is.Null);
|
|
Assert.That(parsed.SingleOf("asdf", 7), Is.EqualTo(7f));
|
|
});
|
|
}
|
|
|
|
[Test]
|
|
public void TestValueOfFloatInt()
|
|
{
|
|
var parsed = NetDisconnectMessage.Decode("{\"foobar\": 5}");
|
|
|
|
Assert.That(parsed.SingleOf("foobar"), Is.EqualTo(5f));
|
|
}
|
|
|
|
[Test]
|
|
public void TestValueOfString()
|
|
{
|
|
var parsed = NetDisconnectMessage.Decode("{\"foobar\": \"real\"}");
|
|
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(parsed.StringOf("foobar"), Is.EqualTo("real"));
|
|
Assert.That(parsed.StringOf("asdf"), Is.Null);
|
|
Assert.That(parsed.StringOf("asdf", "honk"), Is.EqualTo("honk"));
|
|
});
|
|
}
|
|
}
|