Skip to content

Commit 5863232

Browse files
authored
Add tests for SQS client config and ARN conversion (#41)
1 parent de29c49 commit 5863232

File tree

5 files changed

+122
-0
lines changed

5 files changed

+122
-0
lines changed

test/Savvyio.Extensions.NATS.Tests/Commands/NatsCommandQueueOptionsTest.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,18 @@ public void Heartbeat_Can_Be_Set_Manually()
6969
Assert.Equal(TimeSpan.FromSeconds(10), options.Heartbeat);
7070
}
7171

72+
[Fact]
73+
public void Heartbeat_Can_Be_Overridden_After_Expires()
74+
{
75+
var options = new NatsCommandQueueOptions();
76+
77+
options.Expires = TimeSpan.FromSeconds(60);
78+
Assert.Equal(TimeSpan.FromSeconds(5), options.Heartbeat);
79+
80+
options.Heartbeat = TimeSpan.FromSeconds(15);
81+
Assert.Equal(TimeSpan.FromSeconds(15), options.Heartbeat);
82+
}
83+
7284
[Fact]
7385
public void StreamName_And_ConsumerName_Can_Be_Set_And_Gotten()
7486
{

test/Savvyio.Extensions.RabbitMQ.Tests/RabbitMqMessageTest.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,33 @@ public async Task EnsureConnectivityAsync_InitializesConnectionAndChannel_Once()
101101
factoryMock.Verify(f => f.CreateConnectionAsync(It.IsAny<CancellationToken>()), Times.Once);
102102
}
103103

104+
[Fact]
105+
public async Task EnsureConnectivityAsync_IsThreadSafe_WhenCalledConcurrently()
106+
{
107+
var marshaller = new Mock<IMarshaller>().Object;
108+
var options = new RabbitMqMessageOptions { AmqpUrl = new Uri("amqp://localhost:5672") };
109+
110+
var connectionMock = new Mock<IConnection>();
111+
var channelMock = new Mock<IChannel>();
112+
connectionMock.Setup(c => c.CreateChannelAsync(It.IsAny<CreateChannelOptions?>(), It.IsAny<CancellationToken>()))
113+
.ReturnsAsync(channelMock.Object);
114+
115+
var factoryMock = new Mock<IConnectionFactory>();
116+
factoryMock.Setup(f => f.CreateConnectionAsync(It.IsAny<CancellationToken>()))
117+
.ReturnsAsync(connectionMock.Object);
118+
119+
var sut = new TestRabbitMqMessage(marshaller, options);
120+
typeof(RabbitMqMessage)
121+
.GetProperty("RabbitMqFactory", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)
122+
.SetValue(sut, factoryMock.Object);
123+
124+
await Task.WhenAll(
125+
sut.CallEnsureConnectivityAsync(),
126+
sut.CallEnsureConnectivityAsync());
127+
128+
factoryMock.Verify(f => f.CreateConnectionAsync(It.IsAny<CancellationToken>()), Times.Once);
129+
}
130+
104131
[Fact]
105132
public async Task OnDisposeManagedResourcesAsync_DisposesChannelAndConnection()
106133
{

test/Savvyio.Extensions.SimpleQueueService.Tests/AmazonMessageReceiveOptionsTest.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,17 @@ public void PollingTimeout_ShouldClampValue_WhenOutsideRangeOfAllowedLimits()
4545
sut.PollingTimeout = TimeSpan.MaxValue;
4646
Assert.Equal(TimeSpan.FromSeconds(AmazonMessageOptions.MaxPollingWaitTimeInSeconds), sut.PollingTimeout);
4747
}
48+
49+
[Fact]
50+
public void VisibilityTimeout_ShouldClampValue_WhenOutsideRangeOfAllowedLimits()
51+
{
52+
var sut = new AmazonMessageReceiveOptions();
53+
54+
sut.VisibilityTimeout = TimeSpan.MinValue;
55+
Assert.Equal(TimeSpan.Zero, sut.VisibilityTimeout);
56+
57+
sut.VisibilityTimeout = TimeSpan.FromSeconds(AmazonMessageOptions.MaxVisibilityTimeoutInSeconds + 1);
58+
Assert.Equal(TimeSpan.FromSeconds(AmazonMessageOptions.MaxVisibilityTimeoutInSeconds), sut.VisibilityTimeout);
59+
}
4860
}
4961
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using Amazon.Runtime;
2+
using Amazon.SimpleNotificationService;
3+
using Amazon.SQS;
4+
using Codebelt.Extensions.Xunit;
5+
using Xunit;
6+
using Xunit.Abstractions;
7+
8+
namespace Savvyio.Extensions.SimpleQueueService
9+
{
10+
public class ClientConfigExtensionsTest : Test
11+
{
12+
public ClientConfigExtensionsTest(ITestOutputHelper output) : base(output) { }
13+
14+
[Fact]
15+
public void IsValid_ShouldEvaluateConfigurations()
16+
{
17+
ClientConfig[] invalid = null;
18+
Assert.False(invalid.IsValid());
19+
20+
var valid = new ClientConfig[] { new AmazonSQSConfig(), new AmazonSimpleNotificationServiceConfig() };
21+
Assert.True(valid.IsValid());
22+
23+
var wrongLength = new ClientConfig[] { new AmazonSQSConfig() };
24+
Assert.False(wrongLength.IsValid());
25+
}
26+
27+
[Fact]
28+
public void ShouldResolveSpecificConfigurations()
29+
{
30+
var sqs = new AmazonSQSConfig();
31+
var sns = new AmazonSimpleNotificationServiceConfig();
32+
ClientConfig[] configs = { sqs, sns };
33+
34+
Assert.Same(sqs, configs.SimpleQueueService());
35+
Assert.Same(sns, configs.SimpleNotificationService());
36+
}
37+
}
38+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System;
2+
using Codebelt.Extensions.Xunit;
3+
using Xunit;
4+
using Xunit.Abstractions;
5+
6+
namespace Savvyio.Extensions.SimpleQueueService.EventDriven
7+
{
8+
public class StringExtensionsTest : Test
9+
{
10+
public StringExtensionsTest(ITestOutputHelper output) : base(output) { }
11+
12+
[Fact]
13+
public void ToSnsUri_ShouldBuildArnWithDefaults()
14+
{
15+
var uri = "sample-topic".ToSnsUri();
16+
17+
Assert.Equal(new Uri("arn:aws:sns:eu-west-1:000000000000:sample-topic"), uri);
18+
}
19+
20+
[Fact]
21+
public void ToSnsUri_ShouldRespectCustomOptions()
22+
{
23+
var uri = "topic".ToSnsUri(o =>
24+
{
25+
o.Partition = "aws";
26+
o.Region = "us-east-1";
27+
o.AccountId = "123456789012";
28+
});
29+
30+
Assert.Equal(new Uri("arn:aws:sns:us-east-1:123456789012:topic"), uri);
31+
}
32+
}
33+
}

0 commit comments

Comments
 (0)