public async Task ItAppliesHeaders() { var headers = new Dictionary <string, string> { { "X-XSS-Protection", "1; mode=block" }, { "X-Frame-Options", "SAMEORIGIN" }, }; var headerArguments = new string[] { "X-XSS-Protection: 1; mode=block", "x-frame-options: SAMEORIGIN", }; var path = Path.Combine(AppContext.BaseDirectory, "TestAssets", "Mime"); using var ds = DotNetServe.Start(path, output: _output, headers: headerArguments); var resp = await ds.Client.GetWithRetriesAsync("/file.js"); foreach (var header in headers) { var respHeader = Assert.Single(resp.Headers, h => h.Key == header.Key); var respHeaderValue = Assert.Single(respHeader.Value); Assert.Equal(respHeaderValue, header.Value); } }
public async Task ItAppliesReverseProxies(bool enableProxy) { var backendPath = Path.Combine(AppContext.BaseDirectory, "TestAssets", "ReverseProxy", "Backend"); var frontendPath = Path.Combine(AppContext.BaseDirectory, "TestAssets", "ReverseProxy", "Frontend"); using var backendServer = DotNetServe.Start(backendPath, output: _output); string[] proxyMapping = Array.Empty <string>(); if (enableProxy) { // Proxy the path /api.json to the backend: proxyMapping = new[] { $"/api.json={backendServer.Client.BaseAddress}" }; } using var frontendServer = DotNetServe.Start(frontendPath, output: _output, reverseProxyMap: proxyMapping); // Sanity checks: Assert.Equal(System.Net.HttpStatusCode.OK, (await frontendServer.Client.GetWithRetriesAsync("/file.html")).StatusCode); Assert.Equal(System.Net.HttpStatusCode.NotFound, (await backendServer.Client.GetWithRetriesAsync("/file.html")).StatusCode); Assert.Equal(System.Net.HttpStatusCode.OK, (await backendServer.Client.GetWithRetriesAsync("/api.json")).StatusCode); // Actual proxy test: var request = await frontendServer.Client.GetWithRetriesAsync("/api.json"); if (enableProxy) { Assert.Equal(System.Net.HttpStatusCode.OK, request.StatusCode); } else { Assert.Equal(System.Net.HttpStatusCode.NotFound, request.StatusCode); } }
public async Task ItDoesNotAllowOptionsRequestIfCORSIsNotEnabled() { using var ds = DotNetServe.Start(); var result = await ds.Client.SendOptionsWithRetriesAsync(ds.Client.BaseAddress.AbsoluteUri, PrepareCORSHeaders(), output : _output); //Making sure we are getting 404 instead of 204 if CORS is not enabled Assert.Equal(System.Net.HttpStatusCode.NotFound, result.StatusCode); }
public async Task ItCompressesOutput() { var path = Path.Combine(AppContext.BaseDirectory, "TestAssets", "Mime"); using var ds = DotNetServe.Start(path, output: _output, useGzip: true); ds.Client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate"); var resp = await ds.Client.GetWithRetriesAsync("file.js"); Assert.Equal("gzip", resp.Content.Headers.ContentEncoding.First()); }
public async Task ItAllowsOptionsRequestIfCORSIsEnabled() { using var ds = DotNetServe.Start(enableCors: true, output: _output); var result = await ds.Client.SendOptionsWithRetriesAsync(ds.Client.BaseAddress.AbsoluteUri, PrepareCORSHeaders(), output : _output); //Making sure we are getting 204 and not 404 Assert.Equal(System.Net.HttpStatusCode.NoContent, result.StatusCode); Assert.Contains("*", result.Headers.First(x => x.Key == "Access-Control-Allow-Origin").Value); Assert.Contains("GET", result.Headers.First(x => x.Key == "Access-Control-Allow-Methods").Value); }
public async Task ItDoesNotServePfxFile() { var path = Path.Combine(AppContext.BaseDirectory, "TestAssets", "Https", "pfx"); using var ds = DotNetServe.Start(path, certPassword: "******", output: _output, enableTls: true); var resp = await ds.Client.GetWithRetriesAsync("/cert.pfx"); Assert.Equal(HttpStatusCode.Forbidden, resp.StatusCode); }
public async Task ItDoesNotServePemFiles(string keyFormat) { var path = Path.Combine(AppContext.BaseDirectory, "TestAssets", "Https", keyFormat); using var ds = DotNetServe.Start(path, output: _output, enableTls: true); var resp1 = await ds.Client.GetWithRetriesAsync("/cert.pem"); Assert.Equal(HttpStatusCode.Forbidden, resp1.StatusCode); var resp2 = await ds.Client.GetWithRetriesAsync("/private.key"); Assert.Equal(HttpStatusCode.Forbidden, resp2.StatusCode); }
public async Task ItAppliesMimeMappings(string file, string expectedContents, string expectedMime, params string[] mimeMap) { var path = Path.Combine(AppContext.BaseDirectory, "TestAssets", "Mime"); using var ds = DotNetServe.Start(path, output: _output, mimeMap: mimeMap); var resp = await ds.Client.GetWithRetriesAsync(file); if (expectedMime == null) { Assert.Null(resp.Content.Headers.ContentType); } else { Assert.Equal(resp.Content.Headers.ContentType.MediaType, expectedMime); } var respTxt = await resp.Content.ReadAsStringAsync(); Assert.Equal(respTxt, expectedContents); }