Skip to content

Commit f9ca554

Browse files
committed
more tests
1 parent 5c76238 commit f9ca554

File tree

2 files changed

+135
-95
lines changed

2 files changed

+135
-95
lines changed
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
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 CacheTests : BaseDependencyInjectionTests
12+
{
13+
[Test]
14+
public async Task AbsoluteExpirationErrorNotCached()
15+
{
16+
Instance.Setup(x => x.WorkWithResultAsync(It.IsAny<int>(), It.IsAny<CancellationToken>()))
17+
.ThrowsAsync(new InvalidOperationException());
18+
19+
var proxy = CreateTestObject(x => x.AddAbsoluteTimeoutCache(Expiration, (method, args) => args[0]));
20+
21+
var func = async () => await proxy.WorkWithResultAsync(1, Ct);
22+
await func.Should().ThrowAsync<InvalidOperationException>();
23+
await func.Should().ThrowAsync<InvalidOperationException>();
24+
await func.Should().ThrowAsync<InvalidOperationException>();
25+
Instance.Verify(x=> x.WorkWithResultAsync(It.IsAny<int>(), It.IsAny<CancellationToken>()), Times.Exactly(3));
26+
}
27+
28+
[Test]
29+
public async Task SlidingExpirationErrorNotCached()
30+
{
31+
Instance.Setup(x => x.WorkWithResultAsync(It.IsAny<int>(), It.IsAny<CancellationToken>()))
32+
.ThrowsAsync(new InvalidOperationException());
33+
34+
var proxy = CreateTestObject(x => x.AddSlidingTimeoutCache(Expiration, (method, args) => args[0]));
35+
36+
var func = async () => await proxy.WorkWithResultAsync(1, Ct);
37+
await func.Should().ThrowAsync<InvalidOperationException>();
38+
await func.Should().ThrowAsync<InvalidOperationException>();
39+
await func.Should().ThrowAsync<InvalidOperationException>();
40+
Instance.Verify(x=> x.WorkWithResultAsync(It.IsAny<int>(), It.IsAny<CancellationToken>()), Times.Exactly(3));
41+
}
42+
43+
[Test]
44+
public async Task AbsoluteExpiration()
45+
{
46+
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>())).ReturnsAsync(1);
47+
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>())).ReturnsAsync(2);
48+
49+
var proxy = CreateTestObject(x => x.AddAbsoluteTimeoutCache(Expiration, (method, args) => args[0]));
50+
51+
//first pass
52+
await Parallel.ForAsync(0, 100, async (_, _) =>
53+
{
54+
(await proxy.WorkWithResultAsync(1, Ct)).Should().Be(1);
55+
});
56+
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>()), Times.Exactly(1));
57+
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>()), Times.Never);
58+
59+
await Task.Delay(Expiration);
60+
61+
//second pass
62+
await Parallel.ForAsync(0, 100, async (_, _) =>
63+
{
64+
(await proxy.WorkWithResultAsync(1, Ct)).Should().Be(1);
65+
});
66+
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>()), Times.Exactly(2));
67+
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>()), Times.Never);
68+
}
69+
70+
[Test]
71+
public async Task SlidingExpiration()
72+
{
73+
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>())).ReturnsAsync(1);
74+
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>())).ReturnsAsync(2);
75+
76+
var proxy = CreateTestObject(x => x.AddSlidingTimeoutCache(Expiration, (method, args) => args[0]));
77+
78+
//first pass
79+
await Parallel.ForAsync(0, 100, async (_, _) =>
80+
{
81+
(await proxy.WorkWithResultAsync(1, Ct)).Should().Be(1);
82+
});
83+
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>()), Times.Exactly(1));
84+
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>()), Times.Never);
85+
86+
await Task.Delay(Expiration);
87+
88+
//second pass
89+
await Parallel.ForAsync(0, 100, async (_, _) =>
90+
{
91+
(await proxy.WorkWithResultAsync(1, Ct)).Should().Be(1);
92+
});
93+
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>()), Times.Exactly(2));
94+
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>()), Times.Never);
95+
}
96+
97+
[Test]
98+
public async Task SlidingExpirationOverlap()
99+
{
100+
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>())).ReturnsAsync(1);
101+
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>())).ReturnsAsync(2);
102+
103+
var proxy = CreateTestObject(x => x.AddSlidingTimeoutCache(Expiration, (method, args) => args[0]));
104+
105+
//first pass
106+
await Parallel.ForAsync(0, 100, async (_, _) =>
107+
{
108+
(await proxy.WorkWithResultAsync(1, Ct)).Should().Be(1);
109+
});
110+
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>()), Times.Exactly(1));
111+
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>()), Times.Never);
112+
113+
await Task.Delay(Expiration/2);
114+
115+
//second pass
116+
await Parallel.ForAsync(0, 100, async (_, _) =>
117+
{
118+
(await proxy.WorkWithResultAsync(1, Ct)).Should().Be(1);
119+
});
120+
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>()), Times.Exactly(1));
121+
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>()), Times.Never);
122+
123+
await Task.Delay(Expiration/2);
124+
125+
//third pass
126+
await Parallel.ForAsync(0, 100, async (_, _) =>
127+
{
128+
(await proxy.WorkWithResultAsync(1, Ct)).Should().Be(1);
129+
});
130+
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>()), Times.Exactly(1));
131+
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>()), Times.Never);
132+
}
133+
public TimeSpan Expiration = TimeSpan.FromSeconds(3);
134+
}
135+
}

Eocron.DependencyInjection.Tests/DependencyInjectionTests/RetryTests.cs

Lines changed: 0 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -77,99 +77,4 @@ public async Task ExponentialRetryJittered()
7777
public TimeSpan MaxDelay = TimeSpan.FromSeconds(1);
7878
public TimeSpan MinDelay = TimeSpan.FromMilliseconds(20);
7979
}
80-
81-
public class CacheTests : BaseDependencyInjectionTests
82-
{
83-
[Test]
84-
public async Task AbsoluteExpiration()
85-
{
86-
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>())).ReturnsAsync(1);
87-
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>())).ReturnsAsync(2);
88-
89-
var proxy = CreateTestObject(x => x.AddAbsoluteTimeoutCache(Expiration, (method, args) => args[0]));
90-
91-
//first pass
92-
await Parallel.ForAsync(0, 100, async (_, _) =>
93-
{
94-
(await proxy.WorkWithResultAsync(1, Ct)).Should().Be(1);
95-
});
96-
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>()), Times.Exactly(1));
97-
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>()), Times.Never);
98-
99-
await Task.Delay(Expiration);
100-
101-
//second pass
102-
await Parallel.ForAsync(0, 100, async (_, _) =>
103-
{
104-
(await proxy.WorkWithResultAsync(1, Ct)).Should().Be(1);
105-
});
106-
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>()), Times.Exactly(2));
107-
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>()), Times.Never);
108-
}
109-
110-
[Test]
111-
public async Task SlidingExpiration()
112-
{
113-
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>())).ReturnsAsync(1);
114-
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>())).ReturnsAsync(2);
115-
116-
var proxy = CreateTestObject(x => x.AddSlidingTimeoutCache(Expiration, (method, args) => args[0]));
117-
118-
//first pass
119-
await Parallel.ForAsync(0, 100, async (_, _) =>
120-
{
121-
(await proxy.WorkWithResultAsync(1, Ct)).Should().Be(1);
122-
});
123-
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>()), Times.Exactly(1));
124-
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>()), Times.Never);
125-
126-
await Task.Delay(Expiration);
127-
128-
//second pass
129-
await Parallel.ForAsync(0, 100, async (_, _) =>
130-
{
131-
(await proxy.WorkWithResultAsync(1, Ct)).Should().Be(1);
132-
});
133-
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>()), Times.Exactly(2));
134-
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>()), Times.Never);
135-
}
136-
137-
[Test]
138-
public async Task SlidingExpirationOverlap()
139-
{
140-
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>())).ReturnsAsync(1);
141-
Instance.Setup(x => x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>())).ReturnsAsync(2);
142-
143-
var proxy = CreateTestObject(x => x.AddSlidingTimeoutCache(Expiration, (method, args) => args[0]));
144-
145-
//first pass
146-
await Parallel.ForAsync(0, 100, async (_, _) =>
147-
{
148-
(await proxy.WorkWithResultAsync(1, Ct)).Should().Be(1);
149-
});
150-
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>()), Times.Exactly(1));
151-
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>()), Times.Never);
152-
153-
await Task.Delay(Expiration/2);
154-
155-
//second pass
156-
await Parallel.ForAsync(0, 100, async (_, _) =>
157-
{
158-
(await proxy.WorkWithResultAsync(1, Ct)).Should().Be(1);
159-
});
160-
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>()), Times.Exactly(1));
161-
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>()), Times.Never);
162-
163-
await Task.Delay(Expiration/2);
164-
165-
//third pass
166-
await Parallel.ForAsync(0, 100, async (_, _) =>
167-
{
168-
(await proxy.WorkWithResultAsync(1, Ct)).Should().Be(1);
169-
});
170-
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==1), It.IsAny<CancellationToken>()), Times.Exactly(1));
171-
Instance.Verify(x=> x.WorkWithResultAsync(It.Is<int>(i=> i==2), It.IsAny<CancellationToken>()), Times.Never);
172-
}
173-
public TimeSpan Expiration = TimeSpan.FromSeconds(3);
174-
}
17580
}

0 commit comments

Comments
 (0)