public void SortQueryParameterValues(string query, string parameterName, string[] expected)
        {
            // Act
            var actual = CanonicalRequest.SortQueryParameters(query);

            // Assert
            actual[parameterName].ShouldBe(expected);
        }
        public void NotNormalizeS3RequestUri()
        {
            // Arrange
            var requestUri = new Uri("https://example.s3.amazonaws.com/resource//path");

            // Act
            var actual = CanonicalRequest.GetCanonicalResourcePath("s3", requestUri);

            // Assert
            actual.ShouldBe("/resource//path");
        }
        public void RemoveSequentialSpacesInHeaderValue(string headerValue, string expected)
        {
            // Arrange
            var headers = new HttpRequestMessage().Headers;

            headers.Add("some-header-name", headerValue);

            // Act
            var actual = CanonicalRequest.SortHeaders(headers, null);

            // Assert
            actual["some-header-name"].ShouldBe(new[] { expected });
        }
        public void TransformHeaderNamesToLowercase(string headerName, string expected)
        {
            // Arrange
            var headers = new HttpRequestMessage().Headers;

            headers.Add(headerName, "some header value");

            // Act
            var actual = CanonicalRequest.SortHeaders(headers, null);

            // Assert
            actual.Keys.ShouldBe(new[] { expected });
        }
Example #5
0
        public void RespectDefaultHeader()
        {
            // Arrange
            var headers = new HttpRequestMessage().Headers;

            var defaultHeaders = new HttpRequestMessage().Headers;

            defaultHeaders.Add("some-header-name", "some-header-value");

            // Act
            var actual = CanonicalRequest.SortHeaders(headers, defaultHeaders);

            // Assert
            actual["some-header-name"].ShouldBe(new[] { "some-header-value" });
        }
Example #6
0
        public async Task PassTestSuite(params string[] scenarioName)
        {
            // Arrange
            var scenario = context.LoadScenario(scenarioName);

            // Add header 'X-Amz-Date' since the algorithm at this point expects it on the request
            scenario.Request.AddHeader(HeaderKeys.XAmzDateHeader, context.UtcNow.ToIso8601BasicDateTime());

            // Act
            var(canonicalRequest, signedHeaders) = await CanonicalRequest.BuildAsync(scenario.Request, null);

            // Assert
            canonicalRequest.ShouldBe(scenario.ExpectedCanonicalRequest);
            signedHeaders.ShouldBe(scenario.ExpectedSignedHeaders);
        }
        public void SortHeaderNames(string[] headerNames, string[] expected)
        {
            // Arrange
            var headers = new HttpRequestMessage().Headers;

            foreach (var headerName in headerNames)
            {
                headers.Add(headerName, "some header value");
            }

            // Act
            var actual = CanonicalRequest.SortHeaders(headers, null);

            // Assert
            actual.Keys.ShouldBe(expected);
        }
        public async Task PassTestSuite(params string[] scenarioName)
        {
            // Arrange
            var scenario = context.LoadScenario(scenarioName);

            // Add header 'X-Amz-Date' since the algorithm at this point expects it on the request
            scenario.Request.AddHeader(HeaderKeys.XAmzDateHeader, context.UtcNow.ToIso8601BasicDateTime());

            // Calculate the content hash, since it's one of the parameters to the canonical request
            var contentHash = await ContentHash.CalculateAsync(scenario.Request.Content);

            // Act
            var(canonicalRequest, signedHeaders) = CanonicalRequest.Build("execute-api", scenario.Request, null, contentHash);

            // Assert
            canonicalRequest.ShouldBe(scenario.ExpectedCanonicalRequest);
            signedHeaders.ShouldBe(scenario.ExpectedSignedHeaders);
        }
Example #9
0
        public string ASV4()
        {
            // Build the canonical request
            (string canonicalRequest, string signedHeaders) = CanonicalRequest.Build("s3", _request2, null, null);

            // Build the string to sign
            (string stringToSign, string credentialScope) = StringToSign.Build(
                DateTime.UtcNow,
                "eu-west-1",
                "S3",
                canonicalRequest);

            // Build the authorization header
            string authorizationHeader = AuthorizationHeader.Build(
                DateTime.UtcNow,
                "eu-west-1",
                "S3",
                _credentials,
                signedHeaders,
                credentialScope,
                stringToSign);

            return(authorizationHeader);
        }
    public string AWS4()
    {
        // Build the canonical request
        (string canonicalRequest, string signedHeaders) = CanonicalRequest.Build("s3", _request2, new Dictionary <string, IEnumerable <string> >(), string.Empty);

        // Build the string to sign
        (string stringToSign, string credentialScope) = StringToSign.Build(
            DateTime.UtcNow,
            "eu-west-1",
            "S3",
            canonicalRequest);

        // Build the authorization header
        string authorizationHeader = AuthorizationHeader.Build(
            DateTime.UtcNow,
            "eu-west-1",
            "S3",
            _credentials,
            signedHeaders,
            credentialScope,
            stringToSign);

        return(authorizationHeader);
    }