Skip to content

Commit 31e9925

Browse files
committed
fix
1 parent 96dea7c commit 31e9925

File tree

3 files changed

+76
-8
lines changed

3 files changed

+76
-8
lines changed

Eocron.DependencyInjection.Interceptors/DecoratorChainExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public static DecoratorChain AddCache(this DecoratorChain decoratorChain,
120120
return decoratorChain;
121121
}
122122

123-
public static DecoratorChain AddSlidingTimeoutCache(this DecoratorChain decoratorChain,
123+
public static DecoratorChain AddSlidingExpirationCache(this DecoratorChain decoratorChain,
124124
TimeSpan cacheDuration,
125125
Func<MethodInfo, object[], object> keyProvider = null)
126126
{
@@ -133,7 +133,7 @@ public static DecoratorChain AddSlidingTimeoutCache(this DecoratorChain decorato
133133
return decoratorChain;
134134
}
135135

136-
public static DecoratorChain AddAbsoluteTimeoutCache(this DecoratorChain decoratorChain,
136+
public static DecoratorChain AddAbsoluteExpirationCache(this DecoratorChain decoratorChain,
137137
TimeSpan cacheDuration,
138138
Func<MethodInfo, object[], object> keyProvider = null)
139139
{

Eocron.DependencyInjection.Tests/DependencyInjectionTests/CacheTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public async Task ConstantCache()
1616
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>())).ReturnsAsync(1);
1717
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>())).ReturnsAsync(2);
1818

19-
var proxy = CreateTestObject(x => x.AddAbsoluteTimeoutCache(Expiration));
19+
var proxy = CreateTestObject(x => x.AddAbsoluteExpirationCache(Expiration));
2020
await Parallel.ForAsync(0, 100, async (_, _) =>
2121
{
2222
(await proxy.WorkWithResultAsync(1, Ct)).Should().Be(1);
@@ -30,7 +30,7 @@ public async Task AbsoluteExpirationErrorNotCached()
3030
Instance.Setup(x => x.WorkWithResultAsync(It.IsAny<int>(), It.IsAny<CancellationToken>()))
3131
.ThrowsAsync(new InvalidOperationException());
3232

33-
var proxy = CreateTestObject(x => x.AddAbsoluteTimeoutCache(Expiration));
33+
var proxy = CreateTestObject(x => x.AddAbsoluteExpirationCache(Expiration));
3434

3535
var func = async () => await proxy.WorkWithResultAsync(1, Ct);
3636
await func.Should().ThrowAsync<InvalidOperationException>();
@@ -45,7 +45,7 @@ public async Task SlidingExpirationErrorNotCached()
4545
Instance.Setup(x => x.WorkWithResultAsync(It.IsAny<int>(), It.IsAny<CancellationToken>()))
4646
.ThrowsAsync(new InvalidOperationException());
4747

48-
var proxy = CreateTestObject(x => x.AddSlidingTimeoutCache(Expiration));
48+
var proxy = CreateTestObject(x => x.AddSlidingExpirationCache(Expiration));
4949

5050
var func = async () => await proxy.WorkWithResultAsync(1, Ct);
5151
await func.Should().ThrowAsync<InvalidOperationException>();
@@ -60,7 +60,7 @@ public async Task AbsoluteExpiration()
6060
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>())).ReturnsAsync(1);
6161
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>())).ReturnsAsync(2);
6262

63-
var proxy = CreateTestObject(x => x.AddAbsoluteTimeoutCache(Expiration));
63+
var proxy = CreateTestObject(x => x.AddAbsoluteExpirationCache(Expiration));
6464

6565
//first pass
6666
await Parallel.ForAsync(0, 100, async (_, _) =>
@@ -87,7 +87,7 @@ public async Task SlidingExpiration()
8787
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>())).ReturnsAsync(1);
8888
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>())).ReturnsAsync(2);
8989

90-
var proxy = CreateTestObject(x => x.AddSlidingTimeoutCache(Expiration));
90+
var proxy = CreateTestObject(x => x.AddSlidingExpirationCache(Expiration));
9191

9292
//first pass
9393
await Parallel.ForAsync(0, 100, async (_, _) =>
@@ -114,7 +114,7 @@ public async Task SlidingExpirationOverlap()
114114
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>())).ReturnsAsync(1);
115115
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>())).ReturnsAsync(2);
116116

117-
var proxy = CreateTestObject(x => x.AddSlidingTimeoutCache(Expiration));
117+
var proxy = CreateTestObject(x => x.AddSlidingExpirationCache(Expiration));
118118

119119
//first pass
120120
await Parallel.ForAsync(0, 100, async (_, _) =>
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
using System;
2+
using System.Threading;
3+
using System.Threading.Tasks;
4+
using Eocron.DependencyInjection.Interceptors;
5+
using FluentAssertions;
6+
using Moq;
7+
using NUnit.Framework;
8+
9+
namespace Eocron.DependencyInjection.Tests.DependencyInjectionTests
10+
{
11+
public class TimeoutTests : BaseDependencyInjectionTests
12+
{
13+
[Test]
14+
public async Task Pessimistic()
15+
{
16+
long counter = 0;
17+
Instance.Setup(x => x.WorkWithResultAsync(It.IsAny<int>(), It.IsAny<CancellationToken>()))
18+
.Returns<int, CancellationToken>(async (_,ct) =>
19+
{
20+
while (true)
21+
{
22+
Interlocked.Increment(ref counter);
23+
await Task.Delay(10);
24+
}
25+
26+
return 111;
27+
});
28+
29+
var proxy = CreateTestObject(x=> x.AddTimeout(Timeout));
30+
var func = async () => await proxy.WorkWithResultAsync(11, Ct);
31+
await func.Should().ThrowAsync<TimeoutException>();
32+
var p1 = counter;
33+
await Task.Delay(200);
34+
var p2 = counter;
35+
36+
p2.Should().BeGreaterThan(p1);
37+
}
38+
39+
[Test]
40+
public async Task Optimistic()
41+
{
42+
long counter = 0;
43+
Instance.Setup(x => x.WorkWithResultAsync(It.IsAny<int>(), It.IsAny<CancellationToken>()))
44+
.Returns<int, CancellationToken>(async (_,ct) =>
45+
{
46+
while (true)
47+
{
48+
Interlocked.Increment(ref counter);
49+
await Task.Delay(10, ct);
50+
}
51+
52+
return 111;
53+
});
54+
55+
var proxy = CreateTestObject(x=> x.AddTimeout(Timeout));
56+
var func = async () => await proxy.WorkWithResultAsync(11, Ct);
57+
await func.Should().ThrowAsync<TimeoutException>();
58+
var p1 = counter;
59+
await Task.Delay(200);
60+
var p2 = counter;
61+
await Task.Delay(200);
62+
var p3 = counter;
63+
new []{p1,p2,p3}.Should().Equal(new []{p1,p1,p1});
64+
}
65+
66+
public TimeSpan Timeout = TimeSpan.FromSeconds(1);
67+
}
68+
}

0 commit comments

Comments
 (0)