Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit c4a4f15

Browse files
committed
Add more tests, testing retry behavior
1 parent 51d056a commit c4a4f15

File tree

1 file changed

+104
-1
lines changed

1 file changed

+104
-1
lines changed

tests/ServiceStack.Redis.Tests/RetryCommandTests.cs

Lines changed: 104 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Linq;
1+
using System;
2+
using System.Linq;
23
using System.Net.Sockets;
34
using System.Threading;
45
using System.Timers;
@@ -16,6 +17,8 @@ public void Does_retry_failed_commands()
1617
{
1718
//LogManager.LogFactory = new ConsoleLogFactory(debugEnabled: true);
1819

20+
RedisStats.Reset();
21+
1922
var redisCtrl = new RedisClient(RedisConfig.DefaultHost);
2023
redisCtrl.FlushAll();
2124
redisCtrl.SetClient("redisCtrl");
@@ -36,6 +39,106 @@ public void Does_retry_failed_commands()
3639

3740
Assert.That(redis.IncrementValue("retryCounter"), Is.EqualTo(2));
3841
Assert.That(redis.Get<int>("retryCounter"), Is.EqualTo(2));
42+
43+
Assert.That(RedisStats.TotalRetryCount, Is.EqualTo(1));
44+
Assert.That(RedisStats.TotalRetrySuccess, Is.EqualTo(1));
45+
Assert.That(RedisStats.TotalRetryTimedout, Is.EqualTo(0));
46+
}
47+
48+
[Test]
49+
public void Does_retry_failed_commands_with_SocketException()
50+
{
51+
RedisStats.Reset();
52+
53+
var redis = new RedisClient(RedisConfig.DefaultHost);
54+
redis.FlushAll();
55+
56+
Assert.That(redis.IncrementValue("retryCounter"), Is.EqualTo(1));
57+
58+
redis.OnBeforeFlush = () =>
59+
{
60+
redis.OnBeforeFlush = null;
61+
throw new SocketException();
62+
};
63+
64+
Assert.That(redis.IncrementValue("retryCounter"), Is.EqualTo(2));
65+
Assert.That(redis.Get<int>("retryCounter"), Is.EqualTo(2));
66+
67+
Assert.That(RedisStats.TotalRetryCount, Is.EqualTo(1));
68+
Assert.That(RedisStats.TotalRetrySuccess, Is.EqualTo(1));
69+
Assert.That(RedisStats.TotalRetryTimedout, Is.EqualTo(0));
70+
}
71+
72+
[Test]
73+
public void Does_Timeout_with_repeated_SocketException()
74+
{
75+
RedisConfig.Reset();
76+
RedisConfig.DefaultRetryTimeout = 100;
77+
78+
var redis = new RedisClient(RedisConfig.DefaultHost);
79+
redis.FlushAll();
80+
81+
Assert.That(redis.IncrementValue("retryCounter"), Is.EqualTo(1));
82+
83+
redis.OnBeforeFlush = () =>
84+
{
85+
throw new SocketException();
86+
};
87+
88+
try
89+
{
90+
redis.IncrementValue("retryCounter");
91+
Assert.Fail("Should throw");
92+
}
93+
catch (RedisException ex)
94+
{
95+
Assert.That(ex.Message, Is.StringStarting("Exceeded timeout"));
96+
97+
redis.OnBeforeFlush = null;
98+
Assert.That(redis.Get<int>("retryCounter"), Is.EqualTo(1));
99+
100+
Assert.That(RedisStats.TotalRetryCount, Is.GreaterThan(1));
101+
Assert.That(RedisStats.TotalRetrySuccess, Is.EqualTo(0));
102+
Assert.That(RedisStats.TotalRetryTimedout, Is.EqualTo(1));
103+
}
104+
105+
RedisConfig.Reset();
106+
}
107+
108+
[Test]
109+
public void Does_not_retry_when_RetryTimeout_is_Zero()
110+
{
111+
RedisConfig.Reset();
112+
RedisConfig.DefaultRetryTimeout = 0;
113+
114+
var redis = new RedisClient(RedisConfig.DefaultHost);
115+
redis.FlushAll();
116+
117+
Assert.That(redis.IncrementValue("retryCounter"), Is.EqualTo(1));
118+
119+
redis.OnBeforeFlush = () =>
120+
{
121+
throw new SocketException();
122+
};
123+
124+
try
125+
{
126+
redis.IncrementValue("retryCounter");
127+
Assert.Fail("Should throw");
128+
}
129+
catch (Exception ex)
130+
{
131+
Assert.That(ex.Message, Is.StringStarting("Exceeded timeout"));
132+
133+
redis.OnBeforeFlush = null;
134+
Assert.That(redis.Get<int>("retryCounter"), Is.EqualTo(1));
135+
136+
Assert.That(RedisStats.TotalRetryCount, Is.EqualTo(0));
137+
Assert.That(RedisStats.TotalRetrySuccess, Is.EqualTo(0));
138+
Assert.That(RedisStats.TotalRetryTimedout, Is.EqualTo(1));
139+
}
140+
141+
RedisConfig.Reset();
39142
}
40143
}
41144
}

0 commit comments

Comments
 (0)