Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        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);
            }
        }