|
3 | 3 | using System.Threading.Tasks; |
4 | 4 | using Xunit; |
5 | 5 |
|
6 | | -namespace StackExchange.Redis.Tests.Issues |
| 6 | +namespace StackExchange.Redis.Tests.Issues; |
| 7 | + |
| 8 | +[Collection(NonParallelCollection.Name)] |
| 9 | +public class Issue2507(ITestOutputHelper output, SharedConnectionFixture? fixture = null) : TestBase(output, fixture) |
7 | 10 | { |
8 | | - [Collection(NonParallelCollection.Name)] |
9 | | - public class Issue2507(ITestOutputHelper output, SharedConnectionFixture? fixture = null) : TestBase(output, fixture) |
| 11 | + [Fact] |
| 12 | + public async Task Execute() |
10 | 13 | { |
11 | | - [Fact] |
12 | | - public async Task Execute() |
13 | | - { |
14 | | - await using var conn = Create(shared: false); |
15 | | - var db = conn.GetDatabase(); |
16 | | - var pubsub = conn.GetSubscriber(); |
17 | | - var queue = await pubsub.SubscribeAsync(RedisChannel.Literal("__redis__:invalidate")); |
18 | | - await Task.Delay(100); |
19 | | - var connectionId = conn.GetConnectionId(conn.GetEndPoints().Single(), ConnectionType.Subscription); |
20 | | - if (connectionId is null) Assert.Skip("Connection id not available"); |
| 14 | + await using var conn = Create(shared: false); |
| 15 | + var db = conn.GetDatabase(); |
| 16 | + var pubsub = conn.GetSubscriber(); |
| 17 | + var queue = await pubsub.SubscribeAsync(RedisChannel.Literal("__redis__:invalidate")); |
| 18 | + await Task.Delay(100); |
| 19 | + var connectionId = conn.GetConnectionId(conn.GetEndPoints().Single(), ConnectionType.Subscription); |
| 20 | + if (connectionId is null) Assert.Skip("Connection id not available"); |
21 | 21 |
|
22 | | - string baseKey = Me(); |
23 | | - RedisKey key1 = baseKey + "abc", |
24 | | - key2 = baseKey + "ghi", |
25 | | - key3 = baseKey + "mno"; |
| 22 | + string baseKey = Me(); |
| 23 | + RedisKey key1 = baseKey + "abc", |
| 24 | + key2 = baseKey + "ghi", |
| 25 | + key3 = baseKey + "mno"; |
26 | 26 |
|
27 | | - await db.StringSetAsync(new KeyValuePair<RedisKey, RedisValue>[] { new(key1, "def"), new(key2, "jkl"), new(key3, "pqr") }); |
28 | | - // this is not supported, but: we want it to at least not fail |
29 | | - await db.ExecuteAsync("CLIENT", "TRACKING", "on", "REDIRECT", connectionId!.Value, "BCAST"); |
30 | | - await db.KeyDeleteAsync(new RedisKey[] { key1, key2, key3 }); |
31 | | - await Task.Delay(100); |
32 | | - queue.Unsubscribe(); |
33 | | - Assert.True(queue.TryRead(out var message)); |
34 | | - Assert.Equal(key1, message.Message); |
35 | | - Assert.True(queue.TryRead(out message)); |
36 | | - Assert.Equal(key2, message.Message); |
37 | | - Assert.True(queue.TryRead(out message)); |
38 | | - Assert.Equal(key3, message.Message); |
39 | | - Assert.False(queue.TryRead(out message)); |
40 | | - } |
| 27 | + await db.StringSetAsync([new(key1, "def"), new(key2, "jkl"), new(key3, "pqr")]); |
| 28 | + // this is not supported, but: we want it to at least not fail |
| 29 | + await db.ExecuteAsync("CLIENT", "TRACKING", "on", "REDIRECT", connectionId!.Value, "BCAST"); |
| 30 | + await db.KeyDeleteAsync([key1, key2, key3]); |
| 31 | + await Task.Delay(100); |
| 32 | + queue.Unsubscribe(); |
| 33 | + Assert.True(queue.TryRead(out var message), "Queue 1 Read failed"); |
| 34 | + Assert.Equal(key1, message.Message); |
| 35 | + Assert.True(queue.TryRead(out message), "Queue 2 Read failed"); |
| 36 | + Assert.Equal(key2, message.Message); |
| 37 | + Assert.True(queue.TryRead(out message), "Queue 3 Read failed"); |
| 38 | + Assert.Equal(key3, message.Message); |
| 39 | + // Paralle test suites can be invalidating at the same time, so this is not guaranteed to be empty |
| 40 | + // Assert.False(queue.TryRead(out message), "Queue 4 Read succeeded"); |
41 | 41 | } |
42 | 42 | } |
0 commit comments