selling-partner-api-models/clients/sellingpartner-api-aa-csharp/test/Amazon.SellingPartnerAPIAAT.../AWSSigV4SignerTest.cs

89 lines
5.1 KiB
C#
Raw Normal View History

2020-08-06 08:53:39 +08:00
using Moq;
using Xunit;
using RestSharp;
using Amazon.SellingPartnerAPIAA;
using System;
namespace Amazon.SellingPartnerAPIAATests
{
public class AWSSigV4SignerTest
{
private const string TestAccessKeyId = "aKey";
private const string TestSecretKey = "sKey";
private const string TestRegion = "us-east-1";
private const string TestResourcePath = "iam/user";
private const string TestHost = "sellingpartnerapi.amazon.com";
private RestRequest request;
private AWSSigV4Signer sigV4SignerUnderTest;
private Mock<AWSSignerHelper> mockAWSSignerHelper;
public AWSSigV4SignerTest()
{
request = new RestRequest(TestResourcePath, Method.GET);
AWSAuthenticationCredentials authenticationCredentials = new AWSAuthenticationCredentials
{
AccessKeyId = TestAccessKeyId,
SecretKey = TestSecretKey,
Region = TestRegion
};
mockAWSSignerHelper = new Mock<AWSSignerHelper>();
sigV4SignerUnderTest = new AWSSigV4Signer(authenticationCredentials);
sigV4SignerUnderTest.AwsSignerHelper = mockAWSSignerHelper.Object;
}
[Fact]
public void TestSignRequest()
{
DateTime signingDate = DateTime.UtcNow;
string expectedHashedCanonicalRequest = "b7a5ea4c3179fcebed77f19ccd7d85795d4b7a1810709b55fa7ad3fd79ab6adc";
string expectedSignedHeaders = "testSignedHeaders";
string expectedSignature = "testSignature";
string expectedStringToSign = "testStringToSign";
mockAWSSignerHelper.Setup(signerHelper => signerHelper.SetDateAndHostHeaders(request, TestHost))
2020-08-06 08:53:39 +08:00
.Returns(signingDate);
mockAWSSignerHelper.Setup(signerHelper => signerHelper.ExtractCanonicalURIParameters(request.Resource))
.Returns("testURIParameters");
mockAWSSignerHelper.Setup(signerHelper => signerHelper.ExtractCanonicalQueryString(request))
.Returns("testCanonicalQueryString");
mockAWSSignerHelper.Setup(signerHelper => signerHelper.ExtractCanonicalHeaders(request))
.Returns("testCanonicalHeaders");
mockAWSSignerHelper.Setup(signerHelper => signerHelper.ExtractSignedHeaders(request))
.Returns(expectedSignedHeaders);
mockAWSSignerHelper.Setup(signerHelper => signerHelper.HashRequestBody(request))
.Returns("testHashRequestBody");
mockAWSSignerHelper.Setup(signerHelper => signerHelper.BuildStringToSign(signingDate,
expectedHashedCanonicalRequest, TestRegion))
.Returns(expectedStringToSign);
mockAWSSignerHelper.Setup(signerHelper => signerHelper.CalculateSignature(expectedStringToSign,
signingDate, TestSecretKey, TestRegion))
.Returns(expectedSignature);
IRestRequest actualRestRequest = sigV4SignerUnderTest.Sign(request, TestHost);
mockAWSSignerHelper.Verify(signerHelper => signerHelper.SetDateAndHostHeaders(request, TestHost));
2020-08-06 08:53:39 +08:00
mockAWSSignerHelper.Verify(signerHelper => signerHelper.ExtractCanonicalURIParameters(request.Resource));
mockAWSSignerHelper.Verify(signerHelper => signerHelper.ExtractCanonicalQueryString(request));
mockAWSSignerHelper.Verify(signerHelper => signerHelper.ExtractCanonicalHeaders(request));
mockAWSSignerHelper.Verify(signerHelper => signerHelper.ExtractSignedHeaders(request));
mockAWSSignerHelper.Verify(signerHelper => signerHelper.HashRequestBody(request));
mockAWSSignerHelper.Verify(signerHelper => signerHelper.BuildStringToSign(signingDate,
expectedHashedCanonicalRequest,
TestRegion));
mockAWSSignerHelper.Verify(signerHelper => signerHelper.CalculateSignature(expectedStringToSign,
signingDate,
TestSecretKey,
TestRegion));
mockAWSSignerHelper.Verify(signerHelper => signerHelper.AddSignature(request,
TestAccessKeyId,
expectedSignedHeaders,
expectedSignature,
TestRegion,
signingDate));
Assert.Equal(request, actualRestRequest);
}
}
}