public void Get_ExpiredValue_SavesNewValueWithCorrectExpirationTime() { // this test extends just checking a new value is returned, it ensures the new value is stored in the dictionary for subsequent cached requests after initial expiration, this fixes a bug where the cache never stored the value after an initial expiration. var itemLifeSpan = TimeSpan.FromMinutes(1); var cache = new ExpiringCache <int, object>(k => null, itemLifeSpan); var key = default(int); var value = cache[key]; var expiredValue = cache.GetCurrentValue(key); expiredValue.ExpiresAt = DateTime.Now.Add(-itemLifeSpan); Expect(expiredValue.Equals(expiredValue)); Expect(expiredValue.IsExpired()); var beforeLoaded = DateTime.Now; value = cache[key]; var afterLoaded = DateTime.Now; var currentValue = cache.GetCurrentValue(key); Expect(currentValue != expiredValue); var lowerEnd = beforeLoaded.Add(itemLifeSpan); var upperEnd = afterLoaded.Add(itemLifeSpan); Expect(currentValue.ExpiresAt, Is.InRange(lowerEnd, upperEnd)); }
public void Get_ExpiredValue_SavesNewValueWithCorrectExpirationTime() { // this test extends just checking a new value is returned, it ensures the new value is stored in the dictionary for subsequent cached requests after initial expiration, this fixes a bug where the cache never stored the value after an initial expiration. var itemLifeSpan = TimeSpan.FromMinutes(1); var cache = new ExpiringCache<int, object>(k => null, itemLifeSpan); var key = default(int); var value = cache[key]; var expiredValue = cache.GetCurrentValue(key); expiredValue.ExpiresAt = DateTime.Now.Add(-itemLifeSpan); Expect(expiredValue.Equals(expiredValue)); Expect(expiredValue.IsExpired()); var beforeLoaded = DateTime.Now; value = cache[key]; var afterLoaded = DateTime.Now; var currentValue = cache.GetCurrentValue(key); Expect(currentValue != expiredValue); var lowerEnd = beforeLoaded.Add(itemLifeSpan); var upperEnd = afterLoaded.Add(itemLifeSpan); Expect(currentValue.ExpiresAt, Is.InRange(lowerEnd, upperEnd)); }