58 lines
1.9 KiB
C#
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);
|
|
}
|
|
}
|