Skip to content

Commit 7c22e76

Browse files
author
Travis Whidden
committed
zzzprojects#769 - Rename Config ReturnExpiredItems; Refactor Tests
1 parent 0d63074 commit 7c22e76

File tree

3 files changed

+14
-13
lines changed

3 files changed

+14
-13
lines changed

src/System.Linq.Dynamic.Core/Util/Cache/CacheConfig.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@ public class CacheConfig
3232
/// when cached items are deterministic, ensuring consistent results even from expired entries.
3333
/// Default true;
3434
/// </summary>
35-
public bool PermitExpiredReturns { get; set; } = true;
35+
public bool ReturnExpiredItems { get; set; } = true;
3636
}

src/System.Linq.Dynamic.Core/Util/Cache/SlidingCache.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ internal class SlidingCache<TKey, TValue> where TKey : notnull where TValue : no
1212
private readonly IDateTimeUtils _dateTimeProvider;
1313
private readonly Action _deleteExpiredCachedItemsDelegate;
1414
private readonly long? _minCacheItemsBeforeCleanup;
15-
private readonly bool _permitExpiredReturns;
15+
private readonly bool _returnExpiredItems;
1616
private DateTime _lastCleanupTime;
1717
private int _cleanupLocked = 0;
1818

@@ -29,19 +29,19 @@ internal class SlidingCache<TKey, TValue> where TKey : notnull where TValue : no
2929
/// Provides the Time for the Caching object. Default will be created if not supplied. Used
3030
/// for Testing classes
3131
/// </param>
32-
/// <param name="permitExpiredReturns">If a request for an item happens to be expired, but is still
32+
/// <param name="returnExpiredItems">If a request for an item happens to be expired, but is still
3333
/// in known, don't expire it and return it instead.</param>
3434
public SlidingCache(
3535
TimeSpan timeToLive,
3636
TimeSpan? cleanupFrequency = null,
3737
long? minCacheItemsBeforeCleanup = null,
3838
IDateTimeUtils? dateTimeProvider = null,
39-
bool permitExpiredReturns = false)
39+
bool returnExpiredItems = false)
4040
{
4141
_cache = new ConcurrentDictionary<TKey, CacheEntry<TValue>>();
4242
TimeToLive = timeToLive;
4343
_minCacheItemsBeforeCleanup = minCacheItemsBeforeCleanup;
44-
_permitExpiredReturns = permitExpiredReturns;
44+
_returnExpiredItems = returnExpiredItems;
4545
_cleanupFrequency = cleanupFrequency ?? SlidingCacheConstants.DefaultCleanupFrequency;
4646
_deleteExpiredCachedItemsDelegate = Cleanup;
4747
_dateTimeProvider = dateTimeProvider ?? new DateTimeUtils();
@@ -65,7 +65,7 @@ public SlidingCache(CacheConfig cacheConfig, IDateTimeUtils? dateTimeProvider =
6565
TimeToLive = cacheConfig.TimeToLive;
6666
_minCacheItemsBeforeCleanup = cacheConfig.MinItemsTrigger;
6767
_cleanupFrequency = cacheConfig.CleanupFrequency;
68-
_permitExpiredReturns = cacheConfig.PermitExpiredReturns;
68+
_returnExpiredItems = cacheConfig.ReturnExpiredItems;
6969
_deleteExpiredCachedItemsDelegate = Cleanup;
7070
_dateTimeProvider = dateTimeProvider ?? new DateTimeUtils();
7171
// To prevent a scan on first call, set the last Cleanup to the current Provider time
@@ -114,7 +114,7 @@ public bool TryGetValue(TKey key, [NotNullWhen(true)] out TValue? value)
114114
{
115115
// Permit expired returns will return the object even if was expired
116116
// this will prevent the need to re-create the object for the caller
117-
if (_permitExpiredReturns || _dateTimeProvider.UtcNow <= valueAndExpiration.ExpirationTime)
117+
if (_returnExpiredItems || _dateTimeProvider.UtcNow <= valueAndExpiration.ExpirationTime)
118118
{
119119
value = valueAndExpiration.Value;
120120
var newExpire = _dateTimeProvider.UtcNow.Add(TimeToLive);

test/System.Linq.Dynamic.Core.Tests/Util/Cache/SlidingCacheTests.cs

+7-6
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public void SlidingCache_TestExpire()
4848
var dateTimeUtilsMock = new Mock<IDateTimeUtils>();
4949
dateTimeUtilsMock.SetupGet(d => d.UtcNow).Returns(UtcNow);
5050

51+
// Arrange
5152
var cache = new SlidingCache<int, string>(TimeSpan.FromMinutes(10),
5253
dateTimeProvider: dateTimeUtilsMock.Object);
5354

@@ -64,24 +65,24 @@ public void SlidingCache_TestExpire()
6465
}
6566

6667
[Fact]
67-
public void SlidingCache_TestExpiredReturn()
68+
public void SlidingCache_TestReturnExpiredItems()
6869
{
6970
var dateTimeUtilsMock = new Mock<IDateTimeUtils>();
7071
dateTimeUtilsMock.SetupGet(d => d.UtcNow).Returns(UtcNow);
7172

73+
// Arrange
7274
var cache = new SlidingCache<int, string>(TimeSpan.FromMinutes(10),
73-
dateTimeProvider: dateTimeUtilsMock.Object, permitExpiredReturns: true);
75+
dateTimeProvider: dateTimeUtilsMock.Object, returnExpiredItems: true);
7476

7577
// Act
7678
cache.AddOrUpdate(1, "one");
7779

80+
// move the time forward
7881
var newDateTime = dateTimeUtilsMock.Object.UtcNow.AddMinutes(11);
7982
dateTimeUtilsMock.SetupGet(d => d.UtcNow).Returns(newDateTime);
8083

81-
if (!cache.TryGetValue(1, out var value))
82-
{
83-
Assert.True(false, $"Expected to not find the value, but found {value}");
84-
}
84+
// Ensure the expired item is returned from the cache
85+
cache.TryGetValue(1, out _).Should().BeTrue($"Expected to return expired item");
8586
}
8687

8788
[Fact]

0 commit comments

Comments
 (0)