public void ValidateExceptionStackTraceHandling() { CosmosException cosmosException = CosmosExceptionFactory.CreateNotFoundException("TestMessage"); Assert.AreEqual(null, cosmosException.StackTrace); Assert.IsFalse(cosmosException.ToString().Contains(nameof(ValidateExceptionStackTraceHandling))); try { throw cosmosException; } catch (CosmosException ce) { Assert.IsTrue(ce.StackTrace.Contains(nameof(ValidateExceptionStackTraceHandling)), ce.StackTrace); } string stackTrace = "OriginalDocumentClientExceptionStackTrace"; try { throw CosmosExceptionFactory.CreateNotFoundException("TestMessage", stackTrace: stackTrace); } catch (CosmosException ce) { Assert.AreEqual(stackTrace, ce.StackTrace); } }
private void ValidateExceptionInfo( CosmosException exception, HttpStatusCode httpStatusCode, string message) { Assert.AreEqual(httpStatusCode, exception.StatusCode); Assert.IsTrue(exception.ToString().Contains(message)); }
public void VerifyDiagnosticsInTimeoutAndServerError() { ITrace trace = NoOpTrace.Singleton; string diagnosticString = new Diagnostics.CosmosTraceDiagnostics(trace).ToString(); CosmosException cosmosException = new CosmosException( statusCode: HttpStatusCode.RequestTimeout, message: "Test", stackTrace: null, headers: null, trace: trace, error: null, innerException: null); Assert.IsTrue(cosmosException.Message.EndsWith(diagnosticString)); Assert.IsTrue(cosmosException.ToString().Contains(diagnosticString)); cosmosException = new CosmosException( statusCode: HttpStatusCode.InternalServerError, message: "Test", stackTrace: null, headers: null, trace: trace, error: null, innerException: null); Assert.IsTrue(cosmosException.Message.EndsWith(diagnosticString)); Assert.IsTrue(cosmosException.ToString().Contains(diagnosticString)); cosmosException = new CosmosException( statusCode: HttpStatusCode.ServiceUnavailable, message: "Test", stackTrace: null, headers: null, trace: trace, error: null, innerException: null); Assert.IsTrue(cosmosException.Message.EndsWith(diagnosticString)); Assert.IsTrue(cosmosException.ToString().Contains(diagnosticString)); cosmosException = new CosmosException( statusCode: HttpStatusCode.NotFound, message: "Test", stackTrace: null, headers: null, trace: trace, error: null, innerException: null); Assert.IsFalse(cosmosException.Message.Contains(diagnosticString)); Assert.IsTrue(cosmosException.ToString().Contains(diagnosticString)); }
private void ValidateExceptionInfo( CosmosException exception, HttpStatusCode httpStatusCode, string message) { Assert.AreEqual(message, exception.ResponseBody); Assert.AreEqual(httpStatusCode, exception.StatusCode); Assert.IsTrue(exception.ToString().Contains(message)); string expectedMessage = $"Response status code does not indicate success: {httpStatusCode} ({(int)httpStatusCode}); Substatus: 0; ActivityId: {exception.ActivityId}; Reason: ({message});"; Assert.AreEqual(expectedMessage, exception.Message); }
private void ValidateExceptionInfo( CosmosException exception, HttpStatusCode httpStatusCode, string substatus, string message, string activityId, double requestCharge, double retryAfter) { Assert.AreEqual(message, exception.ResponseBody); Assert.AreEqual(httpStatusCode, exception.StatusCode); Assert.AreEqual(int.Parse(substatus), exception.SubStatusCode); Assert.AreEqual(substatus, exception.Headers.SubStatusCodeLiteral); Assert.AreEqual(activityId, exception.ActivityId); Assert.AreEqual(activityId, exception.Headers.ActivityId); Assert.AreEqual(requestCharge, exception.RequestCharge); Assert.AreEqual(requestCharge, exception.Headers.RequestCharge); Assert.AreEqual(TimeSpan.FromMilliseconds(retryAfter), exception.RetryAfter); Assert.AreEqual(TimeSpan.FromMilliseconds(retryAfter), exception.Headers.RetryAfter); Assert.IsTrue(exception.ToString().Contains(message)); string expectedMessage = $"Response status code does not indicate success: {httpStatusCode} ({(int)httpStatusCode}); Substatus: {substatus}; ActivityId: {exception.ActivityId}; Reason: ({message});"; if (httpStatusCode == HttpStatusCode.RequestTimeout || httpStatusCode == HttpStatusCode.InternalServerError || httpStatusCode == HttpStatusCode.ServiceUnavailable || (httpStatusCode == HttpStatusCode.NotFound && exception.Headers.SubStatusCode == SubStatusCodes.ReadSessionNotAvailable)) { expectedMessage += "; Diagnostics:" + new Diagnostics.CosmosTraceDiagnostics(NoOpTrace.Singleton).ToString(); } Assert.AreEqual(expectedMessage, exception.Message); // Verify updating the header updates the exception info exception.Headers.SubStatusCodeLiteral = "1234"; Assert.AreEqual(1234, exception.SubStatusCode); Assert.AreEqual("1234", exception.Headers.SubStatusCodeLiteral); activityId = Guid.NewGuid().ToString(); exception.Headers.ActivityId = activityId; Assert.AreEqual(activityId, exception.ActivityId); Assert.AreEqual(activityId, exception.Headers.ActivityId); requestCharge = 4321.09; exception.Headers.RequestCharge = requestCharge; Assert.AreEqual(requestCharge, exception.RequestCharge); Assert.AreEqual(requestCharge, exception.Headers.RequestCharge); retryAfter = 98754; exception.Headers.RetryAfterLiteral = retryAfter.ToString(); Assert.AreEqual(TimeSpan.FromMilliseconds(retryAfter), exception.RetryAfter); Assert.AreEqual(TimeSpan.FromMilliseconds(retryAfter), exception.Headers.RetryAfter); }
private void ValidateExceptionInfo( CosmosException exception, HttpStatusCode httpStatusCode, string substatus, string message, string activityId, double requestCharge, double retryAfter) { Assert.AreEqual(message, exception.ResponseBody); Assert.AreEqual(httpStatusCode, exception.StatusCode); Assert.AreEqual(int.Parse(substatus), exception.SubStatusCode); Assert.AreEqual(substatus, exception.Headers.SubStatusCodeLiteral); Assert.AreEqual(activityId, exception.ActivityId); Assert.AreEqual(activityId, exception.Headers.ActivityId); Assert.AreEqual(requestCharge, exception.RequestCharge); Assert.AreEqual(requestCharge, exception.Headers.RequestCharge); Assert.AreEqual(TimeSpan.FromMilliseconds(retryAfter), exception.RetryAfter); Assert.AreEqual(TimeSpan.FromMilliseconds(retryAfter), exception.Headers.RetryAfter); Assert.IsTrue(exception.ToString().Contains(message)); string expectedMessage = $"Response status code does not indicate success: {httpStatusCode} ({(int)httpStatusCode}); Substatus: {substatus}; ActivityId: {exception.ActivityId}; Reason: ({message});"; Assert.AreEqual(expectedMessage, exception.Message); // Verify updating the header updates the exception info exception.Headers.SubStatusCodeLiteral = "1234"; Assert.AreEqual(1234, exception.SubStatusCode); Assert.AreEqual("1234", exception.Headers.SubStatusCodeLiteral); activityId = Guid.NewGuid().ToString(); exception.Headers.ActivityId = activityId; Assert.AreEqual(activityId, exception.ActivityId); Assert.AreEqual(activityId, exception.Headers.ActivityId); requestCharge = 4321.09; exception.Headers.RequestCharge = requestCharge; Assert.AreEqual(requestCharge, exception.RequestCharge); Assert.AreEqual(requestCharge, exception.Headers.RequestCharge); retryAfter = 98754; exception.Headers.RetryAfterLiteral = retryAfter.ToString(); Assert.AreEqual(TimeSpan.FromMilliseconds(retryAfter), exception.RetryAfter); Assert.AreEqual(TimeSpan.FromMilliseconds(retryAfter), exception.Headers.RetryAfter); }
public void VerifyNullHeaderLogic() { string testMessage = "Test" + Guid.NewGuid().ToString(); CosmosException exception = new CosmosException( statusCode: HttpStatusCode.BadRequest, message: testMessage, stackTrace: null, headers: null, trace: NoOpTrace.Singleton, error: null, innerException: null); Assert.IsNotNull(exception.Headers, "Header should always be created to avoid null refs caused by users always expecting it to be there"); Assert.AreEqual(HttpStatusCode.BadRequest, exception.StatusCode); Assert.IsTrue(exception.ToString().Contains(testMessage)); exception = new CosmosException( statusCode: HttpStatusCode.BadRequest, message: testMessage, subStatusCode: 42, activityId: "test", requestCharge: 4); Assert.IsNotNull(exception.Headers, "Header should always be created to avoid null refs caused by users always expecting it to be there"); Assert.AreEqual(HttpStatusCode.BadRequest, exception.StatusCode); Assert.AreEqual(testMessage, exception.ResponseBody); Assert.AreEqual(HttpStatusCode.BadRequest, exception.StatusCode); Assert.AreEqual(42, exception.SubStatusCode); Assert.AreEqual("42", exception.Headers.SubStatusCodeLiteral); Assert.AreEqual("test", exception.ActivityId); Assert.AreEqual("test", exception.Headers.ActivityId); Assert.AreEqual(4, exception.RequestCharge); Assert.AreEqual(4, exception.Headers.RequestCharge); Assert.IsTrue(exception.ToString().Contains(testMessage)); }