using PrivaPub.Infrastructure.Geo; using PrivaPub.Infrastructure.Http; using PrivaPub.Models.Jobs; using System.Net; namespace PrivaPub.Tests.Infrastructure { public class CdnCatalogTests { static HttpResponseMessage Response(params (string Name, string Value)[] headers) { var response = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("{}") }; foreach (var (name, value) in headers) response.Headers.TryAddWithoutValidation(name, value); return response; } [Theory] [InlineData("cf-ray", "8c1f0e2b4d5a1234-FRA", "cloudflare.com")] [InlineData("server", "cloudflare", "cloudflare.com")] [InlineData("x-amz-cf-id", "abc==", "cloudfront.net")] [InlineData("via", "1.1 5a1b.cloudfront.net (CloudFront)", "cloudfront.net")] [InlineData("x-served-by", "cache-fra-eddf8230045-FRA", "fastly.com")] [InlineData("server", "BunnyCDN-DE1-1078", "bunny.net")] [InlineData("akamai-grn", "0.1234", "akamai.com")] [InlineData("x-azure-ref", "20261004T101010Z-abc", "azure.microsoft.com")] [InlineData("x-vercel-id", "fra1::abc", "vercel.com")] [InlineData("x-iinfo", "1-2-3", "imperva.com")] public void A_cdn_is_recognised_by_its_fingerprint(string header, string value, string domain) { Assert.Equal(domain, CdnCatalog.FromResponse(Response((header, value)))?.Domain); } [Fact] public void A_plain_server_has_no_cdn_and_an_unknown_cdn_names_itself() { Assert.Null(CdnCatalog.FromResponse(Response(("server", "nginx"), ("via", "1.1 varnish")))); var named = CdnCatalog.FromResponse(Response(("x-cdn", "EdgeOne"))); Assert.Equal(("EdgeOne", null, "edgeone"), (named.Name, named.Domain, named.Key)); Assert.Null(CdnCatalog.FromResponse(Response(("x-cdn", "