using Omika.Core.Networking; namespace Omika.Tests.Networking; /// /// Tests de la validation stricte des endpoints HTTPS (URL licence / API Omika). /// 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); } }