90 lines
2.8 KiB
C#
90 lines
2.8 KiB
C#
using System.Net;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using Xunit.Sdk;
|
|
|
|
namespace server.test;
|
|
|
|
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
|
|
public class UDPServerTest : BeforeAfterTestAttribute
|
|
{
|
|
const string address = "127.0.0.1";
|
|
const int port = 1234;
|
|
private static readonly UDPServer udpServer = new UDPServer(port);
|
|
|
|
public override void Before(MethodInfo methodUnderTest)
|
|
{
|
|
udpServer.Start();
|
|
Console.WriteLine("Start UDP Server");
|
|
}
|
|
|
|
public override void After(MethodInfo methodUnderTest)
|
|
{
|
|
udpServer.Stop();
|
|
Console.WriteLine("Stop UDP Server");
|
|
}
|
|
|
|
[Fact]
|
|
public void UDPDataDeepClone()
|
|
{
|
|
var udpData = new UDPData()
|
|
{
|
|
DateTime = DateTime.Now,
|
|
Address = "127.0.0.1",
|
|
Port = 1234,
|
|
Data = new byte[] { 0xf0, 00, 00, 00 },
|
|
HasRead = false
|
|
};
|
|
var cloneUdpData = udpData.DeepClone();
|
|
|
|
Assert.Equal(udpData.DateTime, cloneUdpData.DateTime);
|
|
Assert.Equal(udpData.Address, cloneUdpData.Address);
|
|
Assert.Equal(udpData.Port, cloneUdpData.Port);
|
|
Assert.Equal(udpData.Data, cloneUdpData.Data);
|
|
Assert.Equal(udpData.HasRead, cloneUdpData.HasRead);
|
|
|
|
udpData.DateTime = DateTime.Now;
|
|
udpData.Address = "192.168.1.1";
|
|
udpData.Port = 33000;
|
|
udpData.Data = new byte[] { 0x0f, 00, 00, 00 };
|
|
udpData.HasRead = true;
|
|
|
|
Assert.NotEqual(udpData.DateTime, cloneUdpData.DateTime);
|
|
Assert.NotEqual(udpData.Address, cloneUdpData.Address);
|
|
Assert.NotEqual(udpData.Port, cloneUdpData.Port);
|
|
Assert.NotEqual(udpData.Data, cloneUdpData.Data);
|
|
Assert.NotEqual(udpData.HasRead, cloneUdpData.HasRead);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("Hello World!")]
|
|
[InlineData("Hello Server!")]
|
|
public async Task UDPServerFind(string text)
|
|
{
|
|
var serverEP = new IPEndPoint(IPAddress.Parse(address), port);
|
|
|
|
|
|
|
|
Assert.True(UDPClientPool.SendString(serverEP, [text]));
|
|
{
|
|
var ret = udpServer.FindData(address);
|
|
Assert.True(ret.HasValue);
|
|
var data = ret.Value;
|
|
Assert.Equal(data.Address, address);
|
|
Assert.Equal(data.Port, port);
|
|
Assert.Equal(Encoding.ASCII.GetString(data.Data), text);
|
|
}
|
|
|
|
|
|
Assert.True(await UDPClientPool.SendStringAsync(serverEP, [text]));
|
|
{
|
|
var ret = await udpServer.FindDataAsync(address);
|
|
Assert.True(ret.HasValue);
|
|
var data = ret.Value;
|
|
Assert.Equal(data.Address, address);
|
|
Assert.Equal(data.Port, port);
|
|
Assert.Equal(Encoding.ASCII.GetString(data.Data), text);
|
|
}
|
|
}
|
|
}
|