feat(ads/seo/release): v1.2.0 with live Google Ads, isolated ad profile, ads.txt, and SEO/AEO/GEO optimization
This commit is contained in:
parent
a88aafa1e5
commit
0e568f1f0a
975 changed files with 130593 additions and 16783 deletions
68
tests/Paca.Tests/Core/WanReachabilityProberGateTests.cs
Normal file
68
tests/Paca.Tests/Core/WanReachabilityProberGateTests.cs
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue