Exemplo n.º 1
0
        public void ShouldReturnFalseForOther()
        {
            var fault = new Fault {
                Message = "Other errors"
            };

            Assert.IsFalse(fault.IsServiceUnavailable());
        }
Exemplo n.º 2
0
        public void ShouldReturnTrueForUnableToConnect()
        {
            var fault = new Fault {
                Message = "Unable to connect to the remote server CA01230"
            };

            Assert.IsTrue(fault.IsServiceUnavailable());
        }
Exemplo n.º 3
0
        public void ShouldReturnTrueForServiceUnavailable()
        {
            var fault = new Fault {
                Message = "ServiceUnavailable"
            };

            Assert.IsTrue(fault.IsServiceUnavailable());
        }
Exemplo n.º 4
0
        /// <summary>
        /// Attempt multiple calls to the MDM service until we are successful or exhaust the retries.
        /// </summary>
        /// <param name="service">MDM service to use</param>
        /// <param name="func">Function to invoke against MDM</param>
        /// <param name="logger">Logger to use</param>
        /// <param name="retries">Number of retries, defaults to 5</param>
        /// <param name="sleep">Dwell time between retries, defaults to 100 ms</param>
        /// <returns>Result of the MDM action</returns>
        public static WebResponse <T> Try <T>(this IMdmService service, Func <WebResponse <T> > func, ILogger logger, int retries = 5, int sleep = 100)
        {
            var response = new WebResponse <T> {
                IsValid = false
            };
            var   i = 0;
            var   isServiceUnvailable = false;
            Fault fault = null;

            logger.DebugFormat("Start : IMdmService.Try<{0}>", GetTypeName(typeof(T)));
            while (!response.IsValid && i++ < retries)
            {
                response = func.Invoke();
                if (response.Fault != null)
                {
                    fault = response.Fault;

                    // Logic to handle the Service Unavailable scenarios
                    if (fault.IsServiceUnavailable())
                    {
                        isServiceUnvailable = true;
                    }
                    else if (response.Code == HttpStatusCode.NotFound)
                    {
                        // NB NotFound is not an error under normal circumstances
                        response.IsValid = true;
                    }
                }
                else
                {
                    isServiceUnvailable = false;
                }

                if (!response.IsValid)
                {
                    Thread.Sleep(sleep);
                    logger.Debug("Try_" + GetTypeName(typeof(T)) + ": " + response.Code);
                }
            }

            if (isServiceUnvailable)
            {
                logger.Error("Service Call to MDM Service has failed with the error: " + fault.Message);
            }

            response.LogResponse();
            return(response);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Retry a web invocation until it works or we exhaust the retries.
        /// </summary>
        /// <typeparam name="T">Type we are trying to find</typeparam>
        /// <param name="func">Web function to invoke</param>
        /// <param name="retries">Number of retry attempts</param>
        /// <param name="sleep">Time to sleep between retries in milliseconds</param>
        /// <returns></returns>
        /// <remarks>Will also abort early if </remarks>
        public static T Retry <T>(this Func <WebResponse <T> > func, int retries = 3, int sleep = 100)
            where T : IMdmEntity
        {
            var response = new WebResponse <T> {
                IsValid = false
            };
            var   i = 0;
            var   isServiceUnvailable = false;
            Fault fault = null;

            while (!response.IsValid && i++ < retries)
            {
                response = func.Invoke();

                if (response.Fault != null)
                {
                    fault = response.Fault;

                    // Logic to handle the Service Unavailable scenarios
                    if (fault.IsServiceUnavailable())
                    {
                        isServiceUnvailable = true;
                    }
                    else if (response.Code == HttpStatusCode.NotFound)
                    {
                        // NB NotFound is not an error under normal circumstances
                        return(default(T));
                    }
                }
                else
                {
                    isServiceUnvailable = false;
                }

                if (!response.IsValid)
                {
                    Thread.Sleep(sleep);
                }
            }

            if (isServiceUnvailable)
            {
                Logger.Error("Service Call to MDM Service has failed with the error: " + fault.Message);
            }

            return(response.IsValid ? response.Message : default(T));
        }
 public void ShouldReturnTrueForUnableToConnect()
 {
     var fault = new Fault { Message = "Unable to connect to the remote server CA01230" };
     Assert.IsTrue(fault.IsServiceUnavailable());
 }
 public void ShouldReturnTrueForServiceUnavailable()
 {
     var fault = new Fault { Message = "ServiceUnavailable" };
     Assert.IsTrue(fault.IsServiceUnavailable());
 }
 public void ShouldReturnFalseForOther()
 {
     var fault = new Fault { Message = "Other errors" };
     Assert.IsFalse(fault.IsServiceUnavailable());
 }