Files
Telegram-Panel/tests/TelegramPanel.Web.Tests/ProxyEgressMetadataTests.cs
meoacgx 672e9d740c 完善代理管理并保护账号首次连接出口
新增代理分类、批量管理、出口元数据与全局已有代理选择;强化导入/登录代理冻结、WARP 维护租约和 Resin 生命周期,并更新文档与回归测试。
2026-07-22 05:27:29 +08:00

93 lines
2.8 KiB
C#

using System.Net;
using TelegramPanel.Core.Services.Proxy;
using Xunit;
namespace TelegramPanel.Web.Tests;
public sealed class ProxyEgressMetadataTests
{
[Fact]
public void ISP()
{
const string json = """
{
"ip": "8.8.8.8",
"success": true,
"country": "United States",
"country_code": "US",
"region": "California",
"city": "Mountain View",
"isp": "Google LLC"
}
""";
var metadata = ProxyEgressProbeService.ParseGeoMetadata(
json,
IPAddress.Parse("8.8.8.8"));
Assert.NotNull(metadata);
Assert.Equal("United States", metadata.Country);
Assert.Equal("California · Mountain View", metadata.Location);
Assert.Equal("Google LLC", metadata.Isp);
}
[Fact]
public void IP时拒绝采用结果()
{
const string json = """
{
"ip": "1.1.1.1",
"success": true,
"country": "Australia",
"city": "Sydney",
"isp": "Cloudflare"
}
""";
var metadata = ProxyEgressProbeService.ParseGeoMetadata(
json,
IPAddress.Parse("8.8.8.8"));
Assert.Null(metadata);
}
[Fact]
public void IP()
{
const string json = """
{
"ip": "8.8.8.8",
"success": false,
"message": "rate limited"
}
""";
var metadata = ProxyEgressProbeService.ParseGeoMetadata(
json,
IPAddress.Parse("8.8.8.8"));
Assert.Null(metadata);
}
[Fact]
public void ()
{
var prefix = $"cache-limit-{Guid.NewGuid():N}-";
var start = DateTime.UtcNow.AddDays(-1);
for (var index = 0;
index < ProxyEgressProbeService.MaxGeoCacheEntries + 64;
index++)
{
ProxyEgressProbeService.CacheGeoMetadata(
$"{prefix}{index}",
metadata: null,
start.AddTicks(index));
}
Assert.InRange(
ProxyEgressProbeService.GeoCacheEntryCount,
1,
ProxyEgressProbeService.MaxGeoCacheEntries);
}
}