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