forked from madelson/DistributedLock
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTestingRedisDatabaseProvider.cs
More file actions
62 lines (49 loc) · 2.07 KB
/
TestingRedisDatabaseProvider.cs
File metadata and controls
62 lines (49 loc) · 2.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using NUnit.Framework;
using StackExchange.Redis;
using StackExchange.Redis.KeyspaceIsolation;
using System.Diagnostics;
namespace Medallion.Threading.Tests.Redis;
public abstract class TestingRedisDatabaseProvider
{
protected TestingRedisDatabaseProvider(IEnumerable<IDatabase> databases)
{
this.Databases = databases.ToArray();
}
protected TestingRedisDatabaseProvider(int count)
: this(Enumerable.Range(0, count).Select(i => RedisServer.GetDefaultServer(i).Multiplexer.GetDatabase()))
{
}
// publicly settable so that callers can alter the dbs in use
public IReadOnlyList<IDatabase> Databases { get; set; }
public virtual string CrossProcessLockTypeSuffix => this.Databases.Count.ToString();
}
public sealed class TestingRedisSingleDatabaseProvider : TestingRedisDatabaseProvider
{
public TestingRedisSingleDatabaseProvider() : base(count: 1) { }
}
public sealed class TestingRedisWithKeyPrefixSingleDatabaseProvider : TestingRedisDatabaseProvider
{
public TestingRedisWithKeyPrefixSingleDatabaseProvider()
: base(new[] { RedisServer.GetDefaultServer(0).Multiplexer.GetDatabase().WithKeyPrefix("distributed_locks:") }) { }
public override string CrossProcessLockTypeSuffix => "1WithPrefix";
}
public sealed class TestingRedis3DatabaseProvider : TestingRedisDatabaseProvider
{
public TestingRedis3DatabaseProvider() : base(count: 3) { }
}
public sealed class TestingRedis2x1DatabaseProvider : TestingRedisDatabaseProvider
{
private static readonly IDatabase DeadDatabase;
static TestingRedis2x1DatabaseProvider()
{
var server = new RedisServer(allowAdmin: true);
DeadDatabase = server.Multiplexer.GetDatabase();
server.Multiplexer.GetServer($"localhost:{server.Port}").Shutdown(ShutdownMode.Never);
server.Dispose();
}
public TestingRedis2x1DatabaseProvider()
: base(Enumerable.Range(0, 2).Select(i => RedisServer.GetDefaultServer(i).Multiplexer.GetDatabase()).Append(DeadDatabase))
{
}
public override string CrossProcessLockTypeSuffix => "2x1";
}