Skip to content

Commit 87df382

Browse files
committed
Fixing : Get request on empty queue throws a null exception
1 parent facf4a9 commit 87df382

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

src/RawRabbit.Operations.Get/GetOperation.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public static class GetOperation
1919
.Use<BasicGetMiddleware>()
2020
.Use<AckableResultMiddleware>(new AckableResultOptions
2121
{
22-
DeliveryTagFunc = context => context.GetBasicGetResult().DeliveryTag,
22+
DeliveryTagFunc = context => context.GetBasicGetResult()?.DeliveryTag ?? 0,
2323
ContentFunc = context => context.GetBasicGetResult()
2424
});
2525

test/RawRabbit.IntegrationTests/GetOperation/BasicGetTests.cs

+48
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,53 @@ public async Task Should_Be_Able_To_Get_Message()
3333
TestChannel.ExchangeDelete(exchangeName);
3434
}
3535
}
36+
37+
[Fact]
38+
public async Task Should_Be_Able_To_Get_BasicGetResult_Message()
39+
{
40+
using (var client = RawRabbitFactory.CreateTestClient())
41+
{
42+
/* Setup */
43+
var message = new BasicMessage { Prop = "Get me, get it?" };
44+
var conventions = new NamingConventions();
45+
var exchangeName = conventions.ExchangeNamingConvention(message.GetType());
46+
var queueName = conventions.QueueNamingConvention(message.GetType());
47+
TestChannel.QueueDeclare(queueName, true, false, false, null);
48+
TestChannel.ExchangeDeclare(exchangeName, ExchangeType.Topic);
49+
TestChannel.QueueBind(queueName, exchangeName, conventions.RoutingKeyConvention(message.GetType()) + ".#");
50+
51+
await client.PublishAsync(message, ctx => ctx.UsePublishConfiguration(cfg => cfg.OnExchange(exchangeName)));
52+
53+
/* Test */
54+
var ackable = await client.GetAsync(cfg => cfg.FromQueue(queueName));
55+
56+
/* Assert */
57+
Assert.NotNull(ackable);
58+
Assert.NotEmpty(ackable.Content.Body);
59+
TestChannel.QueueDelete(queueName);
60+
TestChannel.ExchangeDelete(exchangeName);
61+
}
62+
}
63+
64+
[Fact]
65+
public async Task Should_Be_Able_To_Get_BasicGetResult_When_Queue_IsEmpty()
66+
{
67+
using (var client = RawRabbitFactory.CreateTestClient())
68+
{
69+
/* Setup */
70+
var message = new BasicMessage();
71+
var conventions = new NamingConventions();
72+
var queueName = conventions.QueueNamingConvention(message.GetType());
73+
TestChannel.QueueDeclare(queueName, true, false, false, null);
74+
75+
/* Test */
76+
var ackable = await client.GetAsync(cfg => cfg.FromQueue(queueName));
77+
78+
/* Assert */
79+
Assert.NotNull(ackable);
80+
Assert.Null(ackable.Content);
81+
TestChannel.QueueDelete(queueName);
82+
}
83+
}
3684
}
3785
}

0 commit comments

Comments
 (0)