public async void TestDiskCache() { using (var contentRoot = new TempContentRoot() .AddResource("images/fire.jpg", "TestFiles.fire-umbrella-small.jpg") .AddResource("images/logo.png", "TestFiles.imazen_400.png")) { var diskCacheDir = Path.Combine(contentRoot.PhysicalPath, "diskcache"); var hostBuilder = new HostBuilder() .ConfigureServices(services => { services.AddImageflowDiskCache( new DiskCacheOptions(diskCacheDir) { AsyncWrites = false }); }) .ConfigureWebHost(webHost => { // Add TestServer webHost.UseTestServer(); webHost.Configure(app => { app.UseImageflow(new ImageflowMiddlewareOptions() .SetMapWebRoot(false) .SetAllowDiskCaching(true) // Maps / to ContentRootPath/images .MapPath("/", Path.Combine(contentRoot.PhysicalPath, "images"))); }); }); // Build and start the IHost using var host = await hostBuilder.StartAsync(); // Create an HttpClient to send requests to the TestServer using var client = host.GetTestClient(); using var response = await client.GetAsync("/not_there.jpg"); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); using var response2 = await client.GetAsync("/fire.jpg?width=1"); response2.EnsureSuccessStatusCode(); var responseBytes = await response2.Content.ReadAsByteArrayAsync(); Assert.True(responseBytes.Length < 1000); using var response3 = await client.GetAsync("/fire.jpg"); response3.EnsureSuccessStatusCode(); responseBytes = await response3.Content.ReadAsByteArrayAsync(); Assert.Equal(contentRoot.GetResourceBytes("TestFiles.fire-umbrella-small.jpg"), responseBytes); await host.StopAsync(CancellationToken.None); var cacheFiles = Directory.GetFiles(diskCacheDir, "*.jpg", SearchOption.AllDirectories); Assert.Single(cacheFiles); } }
public async void TestLocalFiles() { using (var contentRoot = new TempContentRoot() .AddResource("images/fire.jpg", "TestFiles.fire-umbrella-small.jpg") .AddResource("images/logo.png", "TestFiles.imazen_400.png")) { var hostBuilder = new HostBuilder() .ConfigureWebHost(webHost => { // Add TestServer webHost.UseTestServer(); webHost.Configure(app => { app.UseImageflow(new ImageflowMiddlewareOptions() .SetMapWebRoot(false) // Maps / to ContentRootPath/images .MapPath("/", Path.Combine(contentRoot.PhysicalPath, "images")) .AddWatermark(new NamedWatermark("imazen", "/logo.png", new WatermarkOptions())) .AddWatermark(new NamedWatermark("broken", "/not_there.png", new WatermarkOptions()))); }); }); // Build and start the IHost using var host = await hostBuilder.StartAsync(); // Create an HttpClient to send requests to the TestServer using var client = host.GetTestClient(); using var notFoundResponse = await client.GetAsync("/not_there.jpg"); Assert.Equal(HttpStatusCode.NotFound, notFoundResponse.StatusCode); using var watermarkBrokenResponse = await client.GetAsync("/fire.jpg?watermark=broken"); Assert.Equal(HttpStatusCode.NotFound, watermarkBrokenResponse.StatusCode); await Assert.ThrowsAsync <InvalidOperationException>(async() => { using var watermarkInvalidResponse = await client.GetAsync("/fire.jpg?watermark=not-a-watermark"); }); using var watermarkResponse = await client.GetAsync("/fire.jpg?watermark=imazen"); watermarkResponse.EnsureSuccessStatusCode(); using var response2 = await client.GetAsync("/fire.jpg?width=1"); response2.EnsureSuccessStatusCode(); var responseBytes = await response2.Content.ReadAsByteArrayAsync(); Assert.True(responseBytes.Length < 1000); using var response3 = await client.GetAsync("/fire.jpg"); response3.EnsureSuccessStatusCode(); responseBytes = await response3.Content.ReadAsByteArrayAsync(); Assert.Equal(contentRoot.GetResourceBytes("TestFiles.fire-umbrella-small.jpg"), responseBytes); await host.StopAsync(CancellationToken.None); } }
public async void TestLocalFiles() { using (var contentRoot = new TempContentRoot() .AddResource("images/fire.jpg", "TestFiles.fire-umbrella-small.jpg") .AddResource("images/fire.jfif", "TestFiles.fire-umbrella-small.jpg") .AddResource("images/fire umbrella.jpg", "TestFiles.fire-umbrella-small.jpg") .AddResource("images/logo.png", "TestFiles.imazen_400.png") .AddResource("images/wrong.webp", "TestFiles.imazen_400.png") .AddResource("images/wrong.jpg", "TestFiles.imazen_400.png") .AddResource("images/extensionless/file", "TestFiles.imazen_400.png")) { var hostBuilder = new HostBuilder() .ConfigureWebHost(webHost => { // Add TestServer webHost.UseTestServer(); webHost.Configure(app => { app.UseImageflow(new ImageflowMiddlewareOptions() .SetMapWebRoot(false) // Maps / to ContentRootPath/images .MapPath("/", Path.Combine(contentRoot.PhysicalPath, "images")) .MapPath("/insensitive", Path.Combine(contentRoot.PhysicalPath, "images"), true) .MapPath("/sensitive", Path.Combine(contentRoot.PhysicalPath, "images"), false) .HandleExtensionlessRequestsUnder("/extensionless/") .AddWatermark(new NamedWatermark("imazen", "/logo.png", new WatermarkOptions())) .AddWatermark(new NamedWatermark("broken", "/not_there.png", new WatermarkOptions())) .AddWatermarkingHandler("/", args => { if (args.Query.TryGetValue("water", out var value) && value == "mark") { args.AppliedWatermarks.Add(new NamedWatermark(null, "/logo.png", new WatermarkOptions())); } })); }); }); // Build and start the IHost using var host = await hostBuilder.StartAsync(); // Create an HttpClient to send requests to the TestServer using var client = host.GetTestClient(); using var notFoundResponse = await client.GetAsync("/not_there.jpg"); Assert.Equal(HttpStatusCode.NotFound, notFoundResponse.StatusCode); using var watermarkBrokenResponse = await client.GetAsync("/fire.jpg?watermark=broken"); Assert.Equal(HttpStatusCode.NotFound, watermarkBrokenResponse.StatusCode); await Assert.ThrowsAsync <InvalidOperationException>(async() => { using var watermarkInvalidResponse = await client.GetAsync("/fire.jpg?watermark=not-a-watermark"); }); using var watermarkResponse = await client.GetAsync("/fire.jpg?watermark=imazen"); watermarkResponse.EnsureSuccessStatusCode(); using var watermarkResponse2 = await client.GetAsync("/fire.jpg?water=mark"); watermarkResponse2.EnsureSuccessStatusCode(); using var wrongImageExtension1 = await client.GetAsync("/wrong.webp"); wrongImageExtension1.EnsureSuccessStatusCode(); Assert.Equal("image/png", wrongImageExtension1.Content.Headers.ContentType.MediaType); using var wrongImageExtension2 = await client.GetAsync("/wrong.jpg"); wrongImageExtension2.EnsureSuccessStatusCode(); Assert.Equal("image/png", wrongImageExtension2.Content.Headers.ContentType.MediaType); using var extensionlessRequest = await client.GetAsync("/extensionless/file"); extensionlessRequest.EnsureSuccessStatusCode(); Assert.Equal("image/png", extensionlessRequest.Content.Headers.ContentType.MediaType); using var response2 = await client.GetAsync("/fire.jpg?width=1"); response2.EnsureSuccessStatusCode(); var responseBytes = await response2.Content.ReadAsByteArrayAsync(); Assert.True(responseBytes.Length < 1000); using var response3 = await client.GetAsync("/fire%20umbrella.jpg"); response3.EnsureSuccessStatusCode(); responseBytes = await response3.Content.ReadAsByteArrayAsync(); Assert.Equal(contentRoot.GetResourceBytes("TestFiles.fire-umbrella-small.jpg"), responseBytes); using var response4 = await client.GetAsync("/inSenSitive/fire.jpg?width=1"); response4.EnsureSuccessStatusCode(); using var response5 = await client.GetAsync("/senSitive/fire.jpg?width=1"); Assert.Equal(HttpStatusCode.NotFound, response5.StatusCode); using var response6 = await client.GetAsync("/sensitive/fire.jpg?width=1"); response6.EnsureSuccessStatusCode(); using var response7 = await client.GetAsync("/fire.jfif?width=1"); response7.EnsureSuccessStatusCode(); var responseBytes7 = await response7.Content.ReadAsByteArrayAsync(); Assert.True(responseBytes7.Length < 1000); using var response8 = await client.GetAsync("/imageflow.health"); response8.EnsureSuccessStatusCode(); using var response9 = await client.GetAsync("/imageflow.ready"); response9.EnsureSuccessStatusCode(); await host.StopAsync(CancellationToken.None); } }