Skip to content

Commit c4a2f79

Browse files
Fixed default cache duration not getting applied to instance methods
Added unit tests
1 parent 633b570 commit c4a2f79

File tree

6 files changed

+252
-2
lines changed

6 files changed

+252
-2
lines changed

LazyCache.UnitTestsCore21/CachingServiceTests.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using LazyCache.Providers;
22
using Microsoft.Extensions.Caching.Memory;
33
using NUnit.Framework;
4+
using System.Threading.Tasks;
5+
using System;
46

57
namespace LazyCache.UnitTestsCore21
68
{
@@ -32,5 +34,53 @@ public void GetOrAddOnCore21ReturnsTheCachedItem()
3234
Assert.IsNotNull(cachedResult);
3335
Assert.AreEqual("SomeValue", cachedResult.SomeProperty);
3436
}
37+
38+
[Test]
39+
public async Task GetOrAddAsyncOnCore21DefaultCacheDurationHonoured()
40+
{
41+
sut.DefaultCachePolicy.DefaultCacheDurationSeconds = 1;
42+
43+
int value = DateTime.UtcNow.Second;
44+
int result = await sut.GetOrAddAsync("foo", x => Task.FromResult(value));
45+
46+
Assert.AreEqual(value, result);
47+
48+
// wait for the item to expire
49+
await Task.Delay(TimeSpan.FromSeconds(2));
50+
51+
// same key
52+
value = DateTime.UtcNow.Second;
53+
result = await sut.GetOrAddAsync("foo", x => Task.FromResult(value));
54+
Assert.AreEqual(value, result);
55+
56+
// new key
57+
value = DateTime.UtcNow.Second;
58+
result = await sut.GetOrAddAsync("bar", x => Task.FromResult(value));
59+
Assert.AreEqual(value, result);
60+
}
61+
62+
[Test]
63+
public async Task GetOrAddOnCore21DefaultCacheDurationHonoured()
64+
{
65+
sut.DefaultCachePolicy.DefaultCacheDurationSeconds = 1;
66+
67+
int value = DateTime.UtcNow.Second;
68+
int result = await sut.GetOrAdd("foo", x => Task.FromResult(value));
69+
70+
Assert.AreEqual(value, result);
71+
72+
// wait for the item to expire
73+
await Task.Delay(TimeSpan.FromSeconds(2));
74+
75+
// same key
76+
value = DateTime.UtcNow.Second;
77+
result = await sut.GetOrAdd("foo", x => Task.FromResult(value));
78+
Assert.AreEqual(value, result);
79+
80+
// new key
81+
value = DateTime.UtcNow.Second;
82+
result = await sut.GetOrAdd("bar", x => Task.FromResult(value));
83+
Assert.AreEqual(value, result);
84+
}
3585
}
3686
}

LazyCache.UnitTestsCore22/CachingServiceTests.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using LazyCache.Providers;
22
using Microsoft.Extensions.Caching.Memory;
33
using NUnit.Framework;
4+
using System.Threading.Tasks;
5+
using System;
46

57
namespace LazyCache.UnitTestsCore22
68
{
@@ -32,5 +34,53 @@ public void GetOrAddOnCore22ReturnsTheCachedItem()
3234
Assert.IsNotNull(cachedResult);
3335
Assert.AreEqual("SomeValue", cachedResult.SomeProperty);
3436
}
37+
38+
[Test]
39+
public async Task GetOrAddAsyncOnCore21DefaultCacheDurationHonoured()
40+
{
41+
sut.DefaultCachePolicy.DefaultCacheDurationSeconds = 1;
42+
43+
int value = DateTime.UtcNow.Second;
44+
int result = await sut.GetOrAddAsync("foo", x => Task.FromResult(value));
45+
46+
Assert.AreEqual(value, result);
47+
48+
// wait for the item to expire
49+
await Task.Delay(TimeSpan.FromSeconds(2));
50+
51+
// same key
52+
value = DateTime.UtcNow.Second;
53+
result = await sut.GetOrAddAsync("foo", x => Task.FromResult(value));
54+
Assert.AreEqual(value, result);
55+
56+
// new key
57+
value = DateTime.UtcNow.Second;
58+
result = await sut.GetOrAddAsync("bar", x => Task.FromResult(value));
59+
Assert.AreEqual(value, result);
60+
}
61+
62+
[Test]
63+
public async Task GetOrAddOnCore21DefaultCacheDurationHonoured()
64+
{
65+
sut.DefaultCachePolicy.DefaultCacheDurationSeconds = 1;
66+
67+
int value = DateTime.UtcNow.Second;
68+
int result = await sut.GetOrAdd("foo", x => Task.FromResult(value));
69+
70+
Assert.AreEqual(value, result);
71+
72+
// wait for the item to expire
73+
await Task.Delay(TimeSpan.FromSeconds(2));
74+
75+
// same key
76+
value = DateTime.UtcNow.Second;
77+
result = await sut.GetOrAdd("foo", x => Task.FromResult(value));
78+
Assert.AreEqual(value, result);
79+
80+
// new key
81+
value = DateTime.UtcNow.Second;
82+
result = await sut.GetOrAdd("bar", x => Task.FromResult(value));
83+
Assert.AreEqual(value, result);
84+
}
3585
}
3686
}

LazyCache.UnitTestsCore30/CachingServiceTests.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using LazyCache.Providers;
22
using Microsoft.Extensions.Caching.Memory;
33
using NUnit.Framework;
4+
using System.Threading.Tasks;
5+
using System;
46

57
namespace LazyCache.UnitTestsCore30
68
{
@@ -32,5 +34,53 @@ public void GetOrAddOnCore30ReturnsTheCachedItem()
3234
Assert.IsNotNull(cachedResult);
3335
Assert.AreEqual("SomeValue", cachedResult.SomeProperty);
3436
}
37+
38+
[Test]
39+
public async Task GetOrAddAsyncOnCore21DefaultCacheDurationHonoured()
40+
{
41+
sut.DefaultCachePolicy.DefaultCacheDurationSeconds = 1;
42+
43+
int value = DateTime.UtcNow.Second;
44+
int result = await sut.GetOrAddAsync("foo", x => Task.FromResult(value));
45+
46+
Assert.AreEqual(value, result);
47+
48+
// wait for the item to expire
49+
await Task.Delay(TimeSpan.FromSeconds(2));
50+
51+
// same key
52+
value = DateTime.UtcNow.Second;
53+
result = await sut.GetOrAddAsync("foo", x => Task.FromResult(value));
54+
Assert.AreEqual(value, result);
55+
56+
// new key
57+
value = DateTime.UtcNow.Second;
58+
result = await sut.GetOrAddAsync("bar", x => Task.FromResult(value));
59+
Assert.AreEqual(value, result);
60+
}
61+
62+
[Test]
63+
public async Task GetOrAddOnCore21DefaultCacheDurationHonoured()
64+
{
65+
sut.DefaultCachePolicy.DefaultCacheDurationSeconds = 1;
66+
67+
int value = DateTime.UtcNow.Second;
68+
int result = await sut.GetOrAdd("foo", x => Task.FromResult(value));
69+
70+
Assert.AreEqual(value, result);
71+
72+
// wait for the item to expire
73+
await Task.Delay(TimeSpan.FromSeconds(2));
74+
75+
// same key
76+
value = DateTime.UtcNow.Second;
77+
result = await sut.GetOrAdd("foo", x => Task.FromResult(value));
78+
Assert.AreEqual(value, result);
79+
80+
// new key
81+
value = DateTime.UtcNow.Second;
82+
result = await sut.GetOrAdd("bar", x => Task.FromResult(value));
83+
Assert.AreEqual(value, result);
84+
}
3585
}
3686
}

LazyCache.UnitTestsCore31/CachingServiceTests.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using LazyCache.Providers;
22
using Microsoft.Extensions.Caching.Memory;
33
using NUnit.Framework;
4+
using System.Threading.Tasks;
5+
using System;
46

57
namespace LazyCache.UnitTestsCore31
68
{
@@ -32,5 +34,53 @@ public void GetOrAddOnCore31ReturnsTheCachedItem()
3234
Assert.IsNotNull(cachedResult);
3335
Assert.AreEqual("SomeValue", cachedResult.SomeProperty);
3436
}
37+
38+
[Test]
39+
public async Task GetOrAddAsyncOnCore21DefaultCacheDurationHonoured()
40+
{
41+
sut.DefaultCachePolicy.DefaultCacheDurationSeconds = 1;
42+
43+
int value = DateTime.UtcNow.Second;
44+
int result = await sut.GetOrAddAsync("foo", x => Task.FromResult(value));
45+
46+
Assert.AreEqual(value, result);
47+
48+
// wait for the item to expire
49+
await Task.Delay(TimeSpan.FromSeconds(2));
50+
51+
// same key
52+
value = DateTime.UtcNow.Second;
53+
result = await sut.GetOrAddAsync("foo", x => Task.FromResult(value));
54+
Assert.AreEqual(value, result);
55+
56+
// new key
57+
value = DateTime.UtcNow.Second;
58+
result = await sut.GetOrAddAsync("bar", x => Task.FromResult(value));
59+
Assert.AreEqual(value, result);
60+
}
61+
62+
[Test]
63+
public async Task GetOrAddOnCore21DefaultCacheDurationHonoured()
64+
{
65+
sut.DefaultCachePolicy.DefaultCacheDurationSeconds = 1;
66+
67+
int value = DateTime.UtcNow.Second;
68+
int result = await sut.GetOrAdd("foo", x => Task.FromResult(value));
69+
70+
Assert.AreEqual(value, result);
71+
72+
// wait for the item to expire
73+
await Task.Delay(TimeSpan.FromSeconds(2));
74+
75+
// same key
76+
value = DateTime.UtcNow.Second;
77+
result = await sut.GetOrAdd("foo", x => Task.FromResult(value));
78+
Assert.AreEqual(value, result);
79+
80+
// new key
81+
value = DateTime.UtcNow.Second;
82+
result = await sut.GetOrAdd("bar", x => Task.FromResult(value));
83+
Assert.AreEqual(value, result);
84+
}
3585
}
3686
}

LazyCache.UnitTestsNet50/CachingServiceTests.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using LazyCache.Providers;
22
using Microsoft.Extensions.Caching.Memory;
33
using NUnit.Framework;
4+
using System.Threading.Tasks;
5+
using System;
46

57
namespace LazyCache.UnitTestsNet50
68
{
@@ -32,5 +34,53 @@ public void GetOrAddOnNet50ReturnsTheCachedItem()
3234
Assert.IsNotNull(cachedResult);
3335
Assert.AreEqual("SomeValue", cachedResult.SomeProperty);
3436
}
37+
38+
[Test]
39+
public async Task GetOrAddAsyncOnCore21DefaultCacheDurationHonoured()
40+
{
41+
sut.DefaultCachePolicy.DefaultCacheDurationSeconds = 1;
42+
43+
int value = DateTime.UtcNow.Second;
44+
int result = await sut.GetOrAddAsync("foo", x => Task.FromResult(value));
45+
46+
Assert.AreEqual(value, result);
47+
48+
// wait for the item to expire
49+
await Task.Delay(TimeSpan.FromSeconds(2));
50+
51+
// same key
52+
value = DateTime.UtcNow.Second;
53+
result = await sut.GetOrAddAsync("foo", x => Task.FromResult(value));
54+
Assert.AreEqual(value, result);
55+
56+
// new key
57+
value = DateTime.UtcNow.Second;
58+
result = await sut.GetOrAddAsync("bar", x => Task.FromResult(value));
59+
Assert.AreEqual(value, result);
60+
}
61+
62+
[Test]
63+
public async Task GetOrAddOnCore21DefaultCacheDurationHonoured()
64+
{
65+
sut.DefaultCachePolicy.DefaultCacheDurationSeconds = 1;
66+
67+
int value = DateTime.UtcNow.Second;
68+
int result = await sut.GetOrAdd("foo", x => Task.FromResult(value));
69+
70+
Assert.AreEqual(value, result);
71+
72+
// wait for the item to expire
73+
await Task.Delay(TimeSpan.FromSeconds(2));
74+
75+
// same key
76+
value = DateTime.UtcNow.Second;
77+
result = await sut.GetOrAdd("foo", x => Task.FromResult(value));
78+
Assert.AreEqual(value, result);
79+
80+
// new key
81+
value = DateTime.UtcNow.Second;
82+
result = await sut.GetOrAdd("bar", x => Task.FromResult(value));
83+
Assert.AreEqual(value, result);
84+
}
3585
}
3686
}

LazyCache/CachingService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public virtual bool TryGetValue<T>(string key, out T value)
9797

9898
public virtual T GetOrAdd<T>(string key, Func<ICacheEntry, T> addItemFactory)
9999
{
100-
return GetOrAdd(key, addItemFactory, null);
100+
return GetOrAdd(key, addItemFactory, DefaultCachePolicy.BuildOptions());
101101
}
102102

103103
public virtual T GetOrAdd<T>(string key, Func<ICacheEntry, T> addItemFactory, MemoryCacheEntryOptions policy)
@@ -180,7 +180,7 @@ public virtual void Remove(string key)
180180

181181
public virtual Task<T> GetOrAddAsync<T>(string key, Func<ICacheEntry, Task<T>> addItemFactory)
182182
{
183-
return GetOrAddAsync(key, addItemFactory, null);
183+
return GetOrAddAsync(key, addItemFactory, DefaultCachePolicy.BuildOptions());
184184
}
185185

186186
public virtual async Task<T> GetOrAddAsync<T>(string key, Func<ICacheEntry, Task<T>> addItemFactory,

0 commit comments

Comments
 (0)