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));
 }
Exemple #3
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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));
        }