public void ShouldReturnFalseForOther() { var fault = new Fault { Message = "Other errors" }; Assert.IsFalse(fault.IsServiceUnavailable()); }
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()); }
/// <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); }
/// <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()); }