FPGA_WebLab/server.test/UDPServerTest.cs

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);
}
}
}