protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { ActualRequestMessage = request; if (ExceptionToThrow != null) { throw ExceptionToThrow; } var uri = request.RequestUri; if (!string.IsNullOrEmpty(ExpectedUrl)) { Assert.AreEqual( ExpectedUrl, uri.AbsoluteUri.Split( new[] { '?' })[0]); } Assert.AreEqual(ExpectedMethod, request.Method); // Match QP passed in for validation. if (ExpectedQueryParams != null) { Assert.IsFalse( string.IsNullOrEmpty(uri.Query), string.Format( CultureInfo.InvariantCulture, "provided url ({0}) does not contain query parameters, as expected", uri.AbsolutePath)); IDictionary <string, string> inputQp = CoreHelpers.ParseKeyValueList(uri.Query.Substring(1), '&', false, null); Assert.AreEqual(ExpectedQueryParams.Count, inputQp.Count, "Different number of query params`"); foreach (string key in ExpectedQueryParams.Keys) { Assert.IsTrue( inputQp.ContainsKey(key), string.Format( CultureInfo.InvariantCulture, "expected QP ({0}) not found in the url ({1})", key, uri.AbsolutePath)); Assert.AreEqual(ExpectedQueryParams[key], inputQp[key]); } } if (ExpectedPostData != null) { string postData = request.Content.ReadAsStringAsync().Result; Dictionary <string, string> requestPostDataPairs = CoreHelpers.ParseKeyValueList(postData, '&', true, null); foreach (string key in ExpectedPostData.Keys) { Assert.IsTrue(requestPostDataPairs.ContainsKey(key)); if (key.Equals(OAuth2Parameter.Scope, StringComparison.OrdinalIgnoreCase)) { CoreAssert.AreScopesEqual(ExpectedPostData[key], requestPostDataPairs[key]); } else { Assert.AreEqual(ExpectedPostData[key], requestPostDataPairs[key]); } } } if (HttpTelemetryHeaders != null) { if (ActualRequestMessage.Headers.Contains(TelemetryConstants.XClientLastTelemetry)) { Assert.AreEqual(HttpTelemetryHeaders[TelemetryConstants.XClientLastTelemetry], ReturnValueFromRequestHeader(TelemetryConstants.XClientLastTelemetry)); Assert.AreEqual(HttpTelemetryHeaders[TelemetryConstants.XClientCurrentTelemetry], ReturnValueFromRequestHeader(TelemetryConstants.XClientCurrentTelemetry)); } } AdditionalRequestValidation?.Invoke(request); return(new TaskFactory().StartNew(() => ResponseMessage, cancellationToken)); }
protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { ActualRequestMessage = request; if (ExceptionToThrow != null) { throw ExceptionToThrow; } var uri = request.RequestUri; if (!string.IsNullOrEmpty(ExpectedUrl)) { Assert.AreEqual( ExpectedUrl, uri.AbsoluteUri.Split( new[] { '?' })[0]); } Assert.AreEqual(ExpectedMethod, request.Method); // Match QP passed in for validation. if (ExpectedQueryParams != null) { Assert.IsFalse( string.IsNullOrEmpty(uri.Query), string.Format( CultureInfo.InvariantCulture, "provided url ({0}) does not contain query parameters, as expected", uri.AbsolutePath)); IDictionary <string, string> inputQp = CoreHelpers.ParseKeyValueList(uri.Query.Substring(1), '&', false, null); Assert.AreEqual(ExpectedQueryParams.Count, inputQp.Count, "Different number of query params`"); foreach (string key in ExpectedQueryParams.Keys) { Assert.IsTrue( inputQp.ContainsKey(key), string.Format( CultureInfo.InvariantCulture, "expected QP ({0}) not found in the url ({1})", key, uri.AbsolutePath)); Assert.AreEqual(ExpectedQueryParams[key], inputQp[key]); } } if (request.Method != HttpMethod.Get && request.Content != null) { string postData = request.Content.ReadAsStringAsync().Result; ActualRequestPostData = CoreHelpers.ParseKeyValueList(postData, '&', true, null); } if (ExpectedPostData != null) { foreach (string key in ExpectedPostData.Keys) { Assert.IsTrue(ActualRequestPostData.ContainsKey(key)); if (key.Equals(OAuth2Parameter.Scope, StringComparison.OrdinalIgnoreCase)) { CoreAssert.AreScopesEqual(ExpectedPostData[key], ActualRequestPostData[key]); } else { Assert.AreEqual(ExpectedPostData[key], ActualRequestPostData[key]); } } } if (ExpectedRequestHeaders != null) { foreach (var kvp in ExpectedRequestHeaders) { Assert.IsTrue( request.Headers.Any(h => string.Equals(h.Key, kvp.Key, StringComparison.OrdinalIgnoreCase) && string.Equals(h.Value.AsSingleString(), kvp.Value, StringComparison.OrdinalIgnoreCase)) , $"Expecting a request header {kvp.Key}: {kvp.Value} but did not find in the actual request: {request}"); } } if (UnexpectedRequestHeaders != null) { foreach (var item in UnexpectedRequestHeaders) { Assert.IsTrue( !request.Headers.Any(h => string.Equals(h.Key, item, StringComparison.OrdinalIgnoreCase)) , $"Not expecting a request header with key={item} but it was found in the actual request: {request}"); } } AdditionalRequestValidation?.Invoke(request); return(new TaskFactory().StartNew(() => ResponseMessage, cancellationToken)); }