Files
2026-10-23 18:46:50 +02:00

39 lines
1.6 KiB
C#

using Omika.Core.Networking;
namespace Omika.Tests.Networking;
/// <summary>
/// Tests de la validation stricte des endpoints HTTPS (URL licence / API Omika).
/// </summary>
public class EndpointValidatorTests
{
[Theory]
[InlineData("http://api.example.com")] // HTTP → refus
[InlineData("https://localhost/api")] // localhost → refus
[InlineData("https://127.0.0.1/api")] // loopback IPv4 → refus
[InlineData("https://127.0.0.2/api")] // plage 127.0.0.0/8 → refus
[InlineData("https://[::1]/api")] // loopback IPv6 → refus
[InlineData("https://user:pass@example.com")] // credentials dans l'URL → refus
[InlineData("file:///etc/passwd")] // schéma non HTTPS → refus
[InlineData("javascript:alert(1)")] // schéma non HTTPS → refus
[InlineData("data:text/plain,hello")] // schéma non HTTPS → refus
[InlineData("/api/relative")] // URI relative → refus
[InlineData("not-a-url")] // non absolue → refus
[InlineData("")] // vide → refus
public void UrlNonConforme_Refusee(string? url)
{
Assert.False(EndpointValidator.TryValidateHttpsEndpoint(url, out _));
}
[Theory]
[InlineData("https://api.example.com")]
[InlineData("https://omika.example.com/api")]
[InlineData("https://licence.example.com:443")]
public void UrlHttpsValide_Acceptee(string url)
{
Assert.True(EndpointValidator.TryValidateHttpsEndpoint(url, out Uri? uri));
Assert.NotNull(uri);
Assert.Equal(Uri.UriSchemeHttps, uri.Scheme);
}
}