using System; using System.Net; using System.Net.Http.Json; using System.Threading.Tasks; using StellaOps.Scanner.WebService.Contracts; using Xunit; namespace StellaOps.Scanner.WebService.Tests; public sealed partial class ScansEndpointsTests { [Fact] public async Task EntropyEndpoint_AttachesSnapshot_AndSurfacesInStatus() { using var secrets = new TestSurfaceSecretsScope(); using var factory = new ScannerApplicationFactory().WithOverrides(cfg => { cfg["scanner:authority:enabled"] = "false"; cfg["scanner:authority:allowAnonymousFallback"] = "true"; }); using var client = factory.CreateClient(); var submitResponse = await client.PostAsJsonAsync("/api/v1/scans", new { image = new { digest = "sha256:image-demo" } }); submitResponse.EnsureSuccessStatusCode(); var submit = await submitResponse.Content.ReadFromJsonAsync(); Assert.NotNull(submit); var entropyPayload = new EntropyIngestRequest( ImageOpaqueRatio: 0.42, Layers: new[] { new EntropyLayerRequest("sha256:layer-demo", 0.35, 3500, 10_000) }); var attachResponse = await client.PostAsJsonAsync($"/api/v1/scans/{submit!.ScanId}/entropy", entropyPayload); Assert.Equal(HttpStatusCode.Accepted, attachResponse.StatusCode); var status = await client.GetFromJsonAsync($"/api/v1/scans/{submit.ScanId}"); Assert.NotNull(status); Assert.NotNull(status!.Entropy); Assert.Equal(0.42, status.Entropy!.ImageOpaqueRatio, 3); Assert.Single(status.Entropy!.Layers); var layer = status.Entropy!.Layers[0]; Assert.Equal("sha256:layer-demo", layer.LayerDigest); Assert.Equal(0.35, layer.OpaqueRatio, 3); Assert.Equal(3500, layer.OpaqueBytes); Assert.Equal(10_000, layer.TotalBytes); } }