public void WebRequestTransientErrorDetectionStrategyWebExceptionTest()
        {
            WebExceptionStatus[] allWebExceptionStatusValues = (WebExceptionStatus[])Enum.GetValues(typeof(WebExceptionStatus));

            WebRequestTransientErrorDetectionStrategy strategy = new WebRequestTransientErrorDetectionStrategy();

            foreach (WebExceptionStatus status in allWebExceptionStatusValues)
            {
                if (status == WebExceptionStatus.ProtocolError)
                {
                    // This is covered in a separate test
                    continue;
                }

                WebException exception = new WebException("Simulated WebException with " + status.ToString(), status);

                if (strategy.IsTransient(exception))
                {
                    Assert.IsTrue(QueryErrorDetectionStrategyTest.SupportedRetryableWebExceptions.Contains(exception.Status), exception.Status.ToString());
                }
                else
                {
                    Assert.IsFalse(QueryErrorDetectionStrategyTest.SupportedRetryableWebExceptions.Contains(exception.Status), exception.Status.ToString());
                }
            }
        }
        public void WebRequestTransientErrorDetectionStrategyTestIOException()
        {
            var exception = new IOException();

            bool actual = new WebRequestTransientErrorDetectionStrategy().IsTransient(exception);

            Assert.IsFalse(actual);
        }
        public void WebRequestTransientErrorDetectionStrategyTestDataServiceRequestException()
        {
            // Unfortunately this exception isn't easy to Mock with an actual error code so just
            // do a basic test
            var exception = new DataServiceRequestException("Simulated DataServiceRequestException");

            bool actual = new WebRequestTransientErrorDetectionStrategy().IsTransient(exception);

            Assert.IsFalse(actual);
        }
        public void WebRequestTransientErrorDetectionStrategyDataServiceClientExceptionTest()
        {
            HttpStatusCode[] allHttpStatusCodeValues = (HttpStatusCode[])Enum.GetValues(typeof(HttpStatusCode));

            WebRequestTransientErrorDetectionStrategy strategy = new WebRequestTransientErrorDetectionStrategy();

            foreach (HttpStatusCode status in allHttpStatusCodeValues)
            {
                DataServiceClientException exception = QueryErrorDetectionStrategyTest.GetMockedClientException(status);

                Assert.IsFalse(strategy.IsTransient(exception));
            }
        }
        public void WebRequestTransientErrorDetectionStrategyWebExceptionProtocolErrorTest()
        {
            HttpStatusCode[] allHttpStatusCodeValues = (HttpStatusCode[])Enum.GetValues(typeof(HttpStatusCode));

            WebRequestTransientErrorDetectionStrategy strategy = new WebRequestTransientErrorDetectionStrategy();

            foreach (HttpStatusCode status in allHttpStatusCodeValues)
            {
                WebException exception = QueryErrorDetectionStrategyTest.GetMockedWebExceptionWithProtocolError(status);

                if (strategy.IsTransient(exception))
                {
                    Assert.IsTrue(QueryErrorDetectionStrategyTest.SupportedRetryableHttpStatusCodes.Contains(status), status.ToString());
                }
                else
                {
                    Assert.IsFalse(QueryErrorDetectionStrategyTest.SupportedRetryableHttpStatusCodes.Contains(status), status.ToString());
                }
            }
        }
        public void WebRequestTransientErrorDetectionStrategyTestGeneralException()
        {
            bool actual = new WebRequestTransientErrorDetectionStrategy().IsTransient(new Exception());

            Assert.IsFalse(actual);
        }