Skip to content

Commit 56d4795

Browse files
committed
Add Redis subscription unsubscribe test
1 parent 7f45cf6 commit 56d4795

2 files changed

Lines changed: 37 additions & 3 deletions

File tree

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using StackExchange.Redis.Profiling;
2+
3+
namespace Multicaster.Distributed.Redis.Tests;
4+
5+
internal class AsyncLocalSeRedisProfiler
6+
{
7+
private readonly AsyncLocal<ProfilingSession> _asyncLocalSession = new();
8+
9+
public ProfilingSession GetSession()
10+
{
11+
var session = _asyncLocalSession.Value;
12+
if (session == null)
13+
{
14+
_asyncLocalSession.Value = session = new ProfilingSession();
15+
}
16+
17+
return session;
18+
}
19+
}

test/Multicaster.Distributed.Redis.Tests/RedisGroupTest.cs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Cysharp.Runtime.Multicast.Remoting;
77
using Multicaster.Tests;
88
using StackExchange.Redis;
9+
910
using Testcontainers.Redis;
1011

1112
namespace Multicaster.Distributed.Redis.Tests;
@@ -101,7 +102,6 @@ public async Task DisposeAndUnsubscribe()
101102
Assert.Equal([CreateJsonSerializedInvocation(nameof(ITestReceiver.Parameter_One), [1234]), CreateJsonSerializedInvocation(nameof(ITestReceiver.Parameter_One), [5678])], receiverD.Writer.Written);
102103
}
103104

104-
105105
[Fact]
106106
public async Task RemoveAllMembersAndUnsubscribe()
107107
{
@@ -113,9 +113,16 @@ public async Task RemoveAllMembersAndUnsubscribe()
113113
var receiverC = TestRedisReceiverHelper.CreateReceiverSet(proxyFactory, serializer);
114114
var receiverD = TestRedisReceiverHelper.CreateReceiverSet(proxyFactory, serializer);
115115

116-
IMulticastGroupProvider groupProvider = new RedisGroupProvider(proxyFactory, serializer, new RedisGroupOptions() { ConnectionString = _redisContainer.GetConnectionString() });
116+
var profiler = new AsyncLocalSeRedisProfiler();
117+
var conn = await ConnectionMultiplexer.ConnectAsync(_redisContainer.GetConnectionString());
118+
conn.RegisterProfiler(profiler.GetSession);
119+
IMulticastGroupProvider groupProvider = new RedisGroupProvider(proxyFactory, serializer, new RedisGroupOptions() { ConnectionMultiplexer = conn });
117120
var group = groupProvider.GetOrAddSynchronousGroup<Guid, ITestReceiver>("MyGroup");
118-
IMulticastGroupProvider groupProvider2 = new RedisGroupProvider(proxyFactory, serializer, new RedisGroupOptions() { ConnectionString = _redisContainer.GetConnectionString() });
121+
122+
var profiler2 = new AsyncLocalSeRedisProfiler();
123+
var conn2 = await ConnectionMultiplexer.ConnectAsync(_redisContainer.GetConnectionString());
124+
conn2.RegisterProfiler(profiler2.GetSession);
125+
IMulticastGroupProvider groupProvider2 = new RedisGroupProvider(proxyFactory, serializer, new RedisGroupOptions() { ConnectionMultiplexer = conn2 });
119126
using var group2 = groupProvider2.GetOrAddSynchronousGroup<Guid, ITestReceiver>("MyGroup");
120127

121128
// Act
@@ -136,11 +143,19 @@ public async Task RemoveAllMembersAndUnsubscribe()
136143
// We need to wait to receive the message from Redis.
137144
await Task.Delay(100);
138145

146+
// Get published Redis commands on `conn`.
147+
var publishedRedisCommands = profiler.GetSession().FinishProfiling().ToArray();
148+
var publishedRedisCommands2 = profiler2.GetSession().FinishProfiling().ToArray();
149+
139150
// Assert
140151
Assert.Equal([CreateJsonSerializedInvocation(nameof(ITestReceiver.Parameter_One), [1234])], receiverA.Writer.Written);
141152
Assert.Equal([CreateJsonSerializedInvocation(nameof(ITestReceiver.Parameter_One), [1234])], receiverB.Writer.Written);
142153
Assert.Equal([CreateJsonSerializedInvocation(nameof(ITestReceiver.Parameter_One), [1234]), CreateJsonSerializedInvocation(nameof(ITestReceiver.Parameter_One), [5678])], receiverC.Writer.Written);
143154
Assert.Equal([CreateJsonSerializedInvocation(nameof(ITestReceiver.Parameter_One), [1234]), CreateJsonSerializedInvocation(nameof(ITestReceiver.Parameter_One), [5678])], receiverD.Writer.Written);
155+
Assert.Equal(3, publishedRedisCommands.Length);
156+
Assert.Equal(["SUBSCRIBE", "PUBLISH", "UNSUBSCRIBE"], publishedRedisCommands.Select(x => x.Command));
157+
Assert.Equal(2, publishedRedisCommands2.Length);
158+
Assert.Equal(["SUBSCRIBE", "PUBLISH"], publishedRedisCommands2.Select(x => x.Command));
144159
}
145160

146161
[Fact]

0 commit comments

Comments
 (0)