public void RemoveTelemetryDataTest() { IdentityModelTelemetryUtil.AddTelemetryData("parameter1", "value1"); Assert.True(IdentityModelTelemetryUtil.telemetryData.ContainsKey("parameter1") && IdentityModelTelemetryUtil.telemetryData["parameter1"] == "value1"); IdentityModelTelemetryUtil.RemoveTelemetryData("parameter1"); Assert.True(!IdentityModelTelemetryUtil.telemetryData.ContainsKey("parameter1")); Assert.False(IdentityModelTelemetryUtil.RemoveTelemetryData(null)); Assert.False(IdentityModelTelemetryUtil.RemoveTelemetryData(IdentityModelTelemetryUtil.skuTelemetry)); Assert.False(IdentityModelTelemetryUtil.RemoveTelemetryData(IdentityModelTelemetryUtil.versionTelemetry)); }
public void UpdateTelemetryDataTest() { IdentityModelTelemetryUtil.UpdateDefaultTelemetryData("parameter1", "value1"); Assert.True(IdentityModelTelemetryUtil.telemetryData.ContainsKey("parameter1") && IdentityModelTelemetryUtil.telemetryData["parameter1"] == "value1"); IdentityModelTelemetryUtil.UpdateDefaultTelemetryData("parameter1", "value2"); Assert.True(IdentityModelTelemetryUtil.telemetryData.ContainsKey("parameter1") && IdentityModelTelemetryUtil.telemetryData["parameter1"] == "value2"); IdentityModelTelemetryUtil.UpdateDefaultTelemetryData(IdentityModelTelemetryUtil.skuTelemetry, "value1"); Assert.True(IdentityModelTelemetryUtil.telemetryData.ContainsKey(IdentityModelTelemetryUtil.skuTelemetry) && IdentityModelTelemetryUtil.telemetryData[IdentityModelTelemetryUtil.skuTelemetry] == "value1"); Assert.False(IdentityModelTelemetryUtil.UpdateDefaultTelemetryData(IdentityModelTelemetryUtil.skuTelemetry, null)); Assert.False(IdentityModelTelemetryUtil.UpdateDefaultTelemetryData(null, "value1")); }
/// <summary> /// Returns a task which contains a string converted from remote document when completed, by using the provided address. /// </summary> /// <param name="address">Location of document</param> /// <param name="cancel">A cancellation token that can be used by other objects or threads to receive notice of cancellation. <see cref="CancellationToken"/></param> /// <returns>Document as a string</returns> public async Task <string> GetDocumentAsync(string address, CancellationToken cancel) { if (string.IsNullOrWhiteSpace(address)) { throw LogHelper.LogArgumentNullException("address"); } if (!Utility.IsHttps(address) && RequireHttps) { throw LogHelper.LogExceptionMessage(new ArgumentException(LogHelper.FormatInvariant(LogMessages.IDX20108, address), nameof(address))); } Exception unsuccessfulHttpResponseException; HttpResponseMessage response; try { LogHelper.LogVerbose(LogMessages.IDX20805, address); var httpClient = _httpClient ?? _defaultHttpClient; var uri = new Uri(address, UriKind.RelativeOrAbsolute); using (var message = new HttpRequestMessage(HttpMethod.Get, uri)) { if (SendAdditionalHeaderData) { IdentityModelTelemetryUtil.SetTelemetryData(message); } response = await httpClient.SendAsync(message).ConfigureAwait(false); } var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false); if (response.IsSuccessStatusCode) { return(responseContent); } unsuccessfulHttpResponseException = new IOException(LogHelper.FormatInvariant(LogMessages.IDX20807, address, response, responseContent)); } catch (Exception ex) { throw LogHelper.LogExceptionMessage(new IOException(LogHelper.FormatInvariant(LogMessages.IDX20804, address), ex)); } throw LogHelper.LogExceptionMessage(unsuccessfulHttpResponseException); }
public void SetTelemetry(TelemetryTheoryData theoryData) { var testContext = new CompareContext(); try { IdentityModelTelemetryUtil.SetTelemetryData(theoryData.HttpRequestMessage); // check if the resulting headers are as expected if (!IdentityComparer.AreEqual(theoryData.ExpectedHeaders, theoryData.HttpRequestMessage?.Headers)) { throw new ArgumentException("resulting headers do not match the expected headers."); } theoryData.ExpectedException.ProcessNoException(testContext); } catch (Exception ex) { theoryData.ExpectedException.ProcessException(ex, testContext); } TestUtilities.AssertFailIfErrors(testContext); }
private async Task <HttpResponseMessage> SendAsyncAndRetryOnNetworkError(HttpClient httpClient, Uri uri) { int maxAttempt = 2; HttpResponseMessage response = null; for (int i = 1; i <= maxAttempt; i++) { // need to create a new message each time since you cannot send the same message twice using (var message = new HttpRequestMessage(HttpMethod.Get, uri)) { if (SendAdditionalHeaderData) { IdentityModelTelemetryUtil.SetTelemetryData(message, AdditionalHeaderData); } response = await httpClient.SendAsync(message).ConfigureAwait(false); if (response.IsSuccessStatusCode) { return(response); } if (response.StatusCode.Equals(HttpStatusCode.RequestTimeout) || response.StatusCode.Equals(HttpStatusCode.ServiceUnavailable)) { if (i < maxAttempt) // logging exception details and that we will attempt to retry document retrieval { LogHelper.LogInformation(LogHelper.FormatInvariant(LogMessages.IDX20808, response.StatusCode, await response.Content.ReadAsStringAsync().ConfigureAwait(false), message.RequestUri)); } } else // if the exception type does not indicate the need to retry we should break { LogHelper.LogWarning(LogHelper.FormatInvariant(LogMessages.IDX20809, message.RequestUri, response.StatusCode, await response.Content.ReadAsStringAsync().ConfigureAwait(false))); break; } } } return(response); }