releases/tests/Paca.Tests/Server/ServerLanBeaconGateTests.cs

58 lines
1.9 KiB
C#

using System.Net.Sockets;
using System.Threading.Tasks;
using Paca.Core.Config;
using Paca.Mobile.Core;
using Paca.Server;
using Xunit;
namespace Paca.Tests.Server;
public class ServerLanBeaconGateTests
{
[Fact]
public void Gate238_AppConfig_RemoteAccessPort_Default_52100_Audit()
{
var config = new AppConfig();
Assert.Equal(52100, config.RemoteAccessPort);
var opts = new ServerOptions();
Assert.True(opts.EnableLanBeacon);
}
[Fact]
public async Task Gate237_ServerHost_Starts_And_Stops_LanBeaconResponder_Correctly()
{
// 고유 UDP 포트를 사용하여 병렬 테스트 충돌 방지
int testUdpPort = 52199;
var options = new ServerOptions
{
Port = 0,
Token = "test_token_1234",
EnableLanBeacon = true,
BeaconPort = testUdpPort,
DeviceName = "TestHostPC"
};
await using var host = await ServerHost.StartAsync(options);
Assert.True(host.LanBeaconActive);
// UdpClient로 Ping을 보내고 Pong 응답 확인
using var client = new UdpClient();
var ping = LanDiscoveryMessage.CreatePing("TestMobileClient");
var pingBytes = System.Text.Encoding.UTF8.GetBytes(ping.ToPayload());
await client.SendAsync(pingBytes, pingBytes.Length, "127.0.0.1", testUdpPort);
var receiveTask = client.ReceiveAsync();
var completed = await Task.WhenAny(receiveTask, Task.Delay(2000));
Assert.Same(receiveTask, completed);
var response = await receiveTask;
var responseText = System.Text.Encoding.UTF8.GetString(response.Buffer);
var parsed = LanDiscoveryMessage.Parse(responseText);
Assert.NotNull(parsed);
Assert.Equal(LanDiscoveryMessageType.Pong, parsed.Type);
Assert.Equal("TestHostPC", parsed.DeviceName);
Assert.EndsWith($":{host.Port}", parsed.Endpoint);
}
}