releases/tests/Paca.Tests/Core/WanReachabilityProberGateTests.cs

68 lines
2.3 KiB
C#

using System;
using System.IO;
using System.Net;
using Paca.Mobile.Core;
using Paca.Tests.Infrastructure;
using Xunit;
namespace Paca.Tests.Core;
/// <summary>
/// Gate 183 ~ 186: 스마트 WAN 연결성 진단 및 CGNAT 자동 판정 엔진 기계적 검증
/// </summary>
public class WanReachabilityProberGateTests
{
[Theory]
[InlineData("192.168.0.15", true)]
[InlineData("10.0.1.20", true)]
[InlineData("172.20.5.1", true)]
[InlineData("127.0.0.1", true)]
[InlineData("8.8.8.8", false)]
[InlineData("1.1.1.1", false)]
public void Gate183_WanReachabilityProber_Detects_PrivateIp(string ipString, bool expectedPrivate)
{
var ip = IPAddress.Parse(ipString);
var isPrivate = WanReachabilityProber.IsPrivateOrLoopback(ip);
Assert.Equal(expectedPrivate, isPrivate);
}
[Theory]
[InlineData("100.64.0.1", true)]
[InlineData("100.127.255.254", true)]
[InlineData("100.128.0.1", false)]
[InlineData("192.168.1.1", false)]
public void Gate184_WanReachabilityProber_Detects_Cgnat(string ipString, bool expectedCgnat)
{
var ip = IPAddress.Parse(ipString);
var isCgnat = WanReachabilityProber.IsCgnatAddress(ip);
Assert.Equal(expectedCgnat, isCgnat);
}
[Fact]
public void Gate185_WanReachabilityProber_Generates_Actionable_Advice()
{
// CGNAT 환경이고 UPnP 미지원인 환경 시뮬레이션
var report = WanReachabilityProber.Diagnose(
localIp: IPAddress.Parse("100.64.5.10"),
upnpSuccess: false,
tunnelActive: true
);
Assert.Equal(ReachabilityLevel.RelayTunnelRequired, report.Level);
Assert.Contains("CGNAT", report.AdviceMessage);
Assert.Contains("ConnectCode", report.AdviceMessage);
}
[Fact]
public void Gate186_PairingWindow_WanBadge_Integration()
{
var pairingWindowPath = Path.Combine(SourceTree.Root, "src", "Paca.App", "Browser", "PairingWindow.cs");
Assert.True(File.Exists(pairingWindowPath), "PairingWindow.cs must exist");
var code = File.ReadAllText(pairingWindowPath);
// 3G/4G/5G WAN 배지 및 ConnectCode UI 확인
Assert.Contains("3G / 4G / 5G", code);
Assert.Contains("ConnectCode", code);
}
}