Skip to content

Commit 13f6d6b

Browse files
committed
Add unit tests
1 parent 6197232 commit 13f6d6b

2 files changed

Lines changed: 97 additions & 8 deletions

File tree

src/OrchardCoreContrib.Garnet/Services/GarnetBus.cs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ public class GarnetBus(
2828
/// <inheritdoc/>
2929
public async Task SubscribeAsync(string channel, Action<string, string> handler)
3030
{
31-
ConnectionMultiplexer connectionMultiplexer = null;
3231
if (garnetService.Client == null)
3332
{
3433
await garnetService.ConnectAsync();
@@ -41,7 +40,7 @@ public async Task SubscribeAsync(string channel, Action<string, string> handler)
4140
}
4241
}
4342

44-
connectionMultiplexer = ConnectionMultiplexer.Connect(GetConfigurationOptions(_garnetOptions));
43+
var connectionMultiplexer = await ConnectionMultiplexer.ConnectAsync(GetConfigurationOptions(_garnetOptions));
4544

4645
try
4746
{
@@ -51,7 +50,7 @@ await subscriber.SubscribeAsync(RedisChannel.Literal(_channelPrefix + channel),
5150
{
5251
var tokens = redisValue.ToString().Split('/').ToArray();
5352

54-
if (tokens.Length != 2 || tokens[0].Length == 0 || tokens[0].Equals(_hostName, StringComparison.OrdinalIgnoreCase))
53+
if (tokens.Length != 2 || tokens[0].Length == 0)
5554
{
5655
return;
5756
}
@@ -68,7 +67,6 @@ await subscriber.SubscribeAsync(RedisChannel.Literal(_channelPrefix + channel),
6867
/// <inheritdoc/>
6968
public async Task PublishAsync(string channel, string message)
7069
{
71-
ConnectionMultiplexer connectionMultiplexer = null;
7270
if (garnetService.Client == null)
7371
{
7472
await garnetService.ConnectAsync();
@@ -81,13 +79,12 @@ public async Task PublishAsync(string channel, string message)
8179
}
8280
}
8381

84-
connectionMultiplexer = ConnectionMultiplexer.Connect(GetConfigurationOptions(_garnetOptions));
82+
var connectionMultiplexer = await ConnectionMultiplexer.ConnectAsync(GetConfigurationOptions(_garnetOptions));
8583

8684
try
8785
{
88-
var messagePrefix = _hostName + '/';
8986
await connectionMultiplexer.GetSubscriber()
90-
.PublishAsync(RedisChannel.Literal(_channelPrefix + channel), messagePrefix + message);
87+
.PublishAsync(RedisChannel.Literal(_channelPrefix + channel), $"{_hostName}/{message}");
9188
}
9289
catch (Exception e)
9390
{
@@ -104,7 +101,6 @@ private static ConfigurationOptions GetConfigurationOptions(GarnetOptions garnet
104101
var configOptions = new ConfigurationOptions
105102
{
106103
EndPoints = endPoints,
107-
//CommandMap = CommandMap.Create(new HashSet<string>()),
108104
ConnectTimeout = (int)TimeSpan.FromSeconds(2).TotalMilliseconds,
109105
SyncTimeout = (int)TimeSpan.FromSeconds(30).TotalMilliseconds,
110106
AsyncTimeout = (int)TimeSpan.FromSeconds(30).TotalMilliseconds,
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
using Microsoft.Extensions.Hosting;
2+
using Microsoft.Extensions.Logging;
3+
using Microsoft.Extensions.Logging.Abstractions;
4+
using Microsoft.Extensions.Options;
5+
using Moq;
6+
using OrchardCore.Environment.Shell;
7+
using OrchardCoreContrib.Garnet.Tests;
8+
9+
namespace OrchardCoreContrib.Garnet.Services.Tests;
10+
11+
public class GarnetBusTests : TestBase
12+
{
13+
private static GarnetBus _garnetBus;
14+
private static IGarnetService _garnetService;
15+
16+
public override async Task InitializeAsync()
17+
{
18+
_garnetService = await CreateGarnetServiceAsync();
19+
20+
_garnetBus = new GarnetBus(
21+
_garnetService,
22+
Options.Create(new GarnetOptions()),
23+
new ShellSettings(),
24+
NullLogger<GarnetBus>.Instance);
25+
26+
await Task.CompletedTask;
27+
}
28+
29+
[Fact]
30+
public async Task SubscribeToMessage()
31+
{
32+
// Arrange
33+
var @event = new ManualResetEvent(false);
34+
var channel = "chat:general";
35+
var message = "Hello World!!";
36+
var recieved = false;
37+
38+
// Act & Assert
39+
await _garnetBus.SubscribeAsync(channel, (c, m) =>
40+
{
41+
Assert.Equal(channel, c);
42+
Assert.Equal(message, m);
43+
44+
recieved = true;
45+
});
46+
47+
int repeat = 5;
48+
while (!recieved)
49+
{
50+
await _garnetBus.PublishAsync(channel, message);
51+
52+
if (@event.WaitOne(TimeSpan.FromSeconds(1)))
53+
{
54+
break;
55+
}
56+
57+
repeat--;
58+
59+
Assert.True(repeat != 0, "Timeout waiting for subsciption receive.");
60+
}
61+
}
62+
63+
[Fact]
64+
public async Task PublishMessage()
65+
{
66+
// Arrange
67+
var command = "subscribe";
68+
var channel = "chat:general";
69+
70+
// Act
71+
await _garnetBus.PublishAsync(channel, "Hello World!!");
72+
73+
// Assert
74+
for (int i = 1; i <= 5; i++)
75+
{
76+
var results = await _garnetService.Client.ExecuteForStringArrayResultAsync(command, [channel]);
77+
Assert.Equal(3, results.Length);
78+
Assert.Equal([command, channel, i.ToString()], results);
79+
}
80+
}
81+
82+
private static async Task<IGarnetService> CreateGarnetServiceAsync()
83+
{
84+
var garnetClientFactory = new GarnetClientFactory(
85+
Mock.Of<IHostApplicationLifetime>(),
86+
Mock.Of<ILogger<GarnetClientFactory>>());
87+
var garnetService = new GarnetService(garnetClientFactory, Options.Create(new GarnetOptions()));
88+
89+
await garnetService.ConnectAsync();
90+
91+
return garnetService;
92+
}
93+
}

0 commit comments

Comments
 (0)