コード例 #1
0
    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);
        }
    }
コード例 #2
0
    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);
        }
    }
コード例 #3
0
    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);
    }
コード例 #4
0
    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());
    }
コード例 #5
0
    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);
    }
コード例 #6
0
    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);
    }
コード例 #7
0
    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);
    }
コード例 #8
0
    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);
    }