public void ShouldAuthenticate() { // Arrange IHmacConfiguration configuration = CreateConfiguration(); IRestSharpHmacSigner signer = new RestSharpHmacSigner(configuration, _keyRepository); HmacAuthenticator authenticator = new HmacAuthenticator(configuration, signer); IRestClient client = CreateClient(); IRestRequest request = CreateRequest(configuration); // Act authenticator.Authenticate(client, request); Parameter contentMd5Param = request.Parameters.FirstOrDefault(p => p.Name == "Content-MD5"); Parameter authorizationParam = request.Parameters.FirstOrDefault(p => p.Name == "Authorization"); Parameter dateParam = request.Parameters.FirstOrDefault(p => p.Name == "Date"); string dateString = dateParam != null ? dateParam.Value as string ?? string.Empty : string.Empty; DateTimeOffset parsedDate; bool isValidDate = DateTimeOffset.TryParseExact(dateString, "ddd, dd MMM yyyy HH:mm:ss G\\MT", _dateHeaderCulture, DateTimeStyles.AssumeUniversal, out parsedDate); HmacSignatureData signatureData = signer.GetSignatureDataFromRestRequest(client, request); string signature = signer.CreateSignature(signatureData); // Assert Assert.IsNotNull(contentMd5Param); Assert.AreEqual(ParameterType.HttpHeader, contentMd5Param.Type); Assert.AreEqual(_base64Md5Hash, contentMd5Param.Value); Assert.IsNotNull(authorizationParam); Assert.AreEqual(ParameterType.HttpHeader, authorizationParam.Type); Assert.IsNotNull(authorizationParam.Value); Assert.IsInstanceOfType(authorizationParam.Value, typeof(string)); Assert.AreEqual((string)authorizationParam.Value, "HMAC " + signature); Assert.IsNotNull(dateParam); Assert.AreEqual(ParameterType.HttpHeader, dateParam.Type); Assert.IsNotNull(dateParam.Value); Assert.IsTrue(isValidDate); }
public void ShouldGetSignatureDataFromRestRequest() { // Arrange IHmacConfiguration configuration = CreateConfiguration(); string dateString = CreateHttpDateString(); IRestClient client = CreateClient(); IRestRequest request = CreateRequest(configuration, dateString); RestSharpHmacSigner signer = new RestSharpHmacSigner(configuration, _keyRepository); // Act HmacSignatureData signatureData = signer.GetSignatureDataFromRestRequest(client, request); // Assert Assert.IsNotNull(signatureData); Assert.AreEqual(_keyRepository.Key, signatureData.Key); Assert.AreEqual(request.Method.ToString().ToUpperInvariant(), signatureData.HttpMethod); Assert.AreEqual(_base64Md5Hash, signatureData.ContentMd5); Assert.AreEqual(ContentType, signatureData.ContentType); Assert.AreEqual(dateString, signatureData.Date); Assert.AreEqual(_keyRepository.Username, signatureData.Username); Assert.AreEqual(Url, signatureData.RequestUri); Assert.IsNotNull(signatureData.Headers); Assert.IsTrue(signatureData.Headers.Count > 0); }