using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Catel.Test
{
[TestClass]
public class RetrySafetyCounterTest
{
[TestMethod]
public void FailureBecauseTookTooLongTest()
{
RetrySafetyCounterHelperClass helper = new RetrySafetyCounterHelperClass();
RetrySafetyCounter counter = new RetrySafetyCounter(helper.WriteToConsole, helper.IsSuccessfulAfter40Retries, 25, 10);
Assert.AreEqual(false, counter.DoWork());
Assert.AreEqual(0, counter.NumberOfRetriesLeft);
Assert.AreEqual(25, counter.NumberOfRetries);
Assert.AreEqual(false, counter.IsSuccessful);
}
[TestMethod]
public void FailureBecauseDoWorkFailedTest()
{
RetrySafetyCounterHelperClass helper = new RetrySafetyCounterHelperClass();
RetrySafetyCounter counter = new RetrySafetyCounter(helper.FailedToWriteToConsole, helper.IsSuccessfulAfter40Retries, 25, 10);
Assert.AreEqual(false, counter.DoWork());
Assert.AreEqual(24, counter.NumberOfRetriesLeft);
Assert.AreEqual(1, counter.NumberOfRetries);
Assert.AreEqual(false, counter.IsSuccessful);
}
[TestMethod]
public void CountRetriesTest()
{
RetrySafetyCounterHelperClass helper = new RetrySafetyCounterHelperClass();
RetrySafetyCounter counter = new RetrySafetyCounter(helper.WriteToConsole, helper.IsSuccessfulAfter20Retries, 25, 10);
Assert.AreEqual(true, counter.DoWork());
Assert.AreEqual(20, counter.NumberOfRetries);
Assert.AreEqual(5, counter.NumberOfRetriesLeft);
Assert.AreEqual(true, counter.IsSuccessful);
Assert.AreEqual(20, helper._retries);
}
[TestMethod]
public void SucceedingAfter5Retries()
{
RetrySafetyCounterHelperClass helper = new RetrySafetyCounterHelperClass();
RetrySafetyCounter counter = new RetrySafetyCounter(helper.WriteToConsole, helper.IsSuccessfulAfter5Retries, 25, 10);
Assert.AreEqual(true, counter.DoWork());
Assert.AreEqual(5, counter.NumberOfRetries);
Assert.AreEqual(20, counter.NumberOfRetriesLeft);
Assert.AreEqual(true, counter.IsSuccessful);
}
[TestMethod]
public void ResetSafetyCounter()
{
RetrySafetyCounterHelperClass helper = new RetrySafetyCounterHelperClass();
RetrySafetyCounter counter = new RetrySafetyCounter(helper.WriteToConsole, helper.IsSuccessfulAfter5Retries, 25, 10);
Assert.AreEqual(true, counter.DoWork());
Assert.AreEqual(5, counter.NumberOfRetries);
Assert.AreEqual(20, counter.NumberOfRetriesLeft);
Assert.AreEqual(true, counter.IsSuccessful);
counter.Reset();
Assert.AreEqual(0, counter.NumberOfRetries);
Assert.AreEqual(25, counter.NumberOfRetriesLeft);
Assert.AreEqual(false, counter.IsSuccessful);
}
/// <summary>
/// Helper class.
/// </summary>
private class RetrySafetyCounterHelperClass
{
public int _retries;
public bool WriteToConsole()
{
Console.WriteLine("Doing some work");
_retries++;
return true;
}
public bool FailedToWriteToConsole() { return false; }
public bool IsSuccessfulAfter5Retries() { return (_retries >= 5); }
public bool IsSuccessfulAfter10Retries() { return (_retries >= 10); }
public bool IsSuccessfulAfter20Retries() { return (_retries >= 20); }
public bool IsSuccessfulAfter40Retries() { return (_retries >= 40); }
}
}
}