Skip to content

Commit 51c602d

Browse files
authored
Merge pull request #1465 from rabbitmq/rabbitmq-dotnet-client-1035-6.x
Add test to prove bindings are restored by topology recovery
2 parents 8bc16b8 + 3f87ecc commit 51c602d

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

projects/Unit/TestConnectionRecovery.cs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1625,6 +1625,68 @@ public void TestTopologyRecoveryConsumerExceptionHandler()
16251625
}
16261626
}
16271627

1628+
[Test]
1629+
public void TestBindingRecovery_GH1035()
1630+
{
1631+
var waitSpan = TimeSpan.FromSeconds(35); // Note: conn recovery waits 30 secs
1632+
const string routingKey = "unused";
1633+
byte[] body = Encoding.UTF8.GetBytes(Guid.NewGuid().ToString());
1634+
1635+
using (var receivedMessageEvent = new AutoResetEvent(initialState: false))
1636+
{
1637+
1638+
void MessageReceived(object sender, BasicDeliverEventArgs e)
1639+
{
1640+
receivedMessageEvent.Set();
1641+
}
1642+
1643+
string exchangeName = $"ex-gh-1035-{Guid.NewGuid()}";
1644+
string queueName = $"q-gh-1035-{Guid.NewGuid()}";
1645+
1646+
Model.ExchangeDeclare(exchange: exchangeName,
1647+
type: "fanout", durable: false, autoDelete: true,
1648+
arguments: null);
1649+
1650+
RabbitMQ.Client.QueueDeclareOk q0 = Model.QueueDeclare(queue: queueName, exclusive: true);
1651+
Assert.AreEqual(queueName, q0.QueueName);
1652+
1653+
Model.QueueBind(queue: queueName, exchange: exchangeName, routingKey: routingKey);
1654+
1655+
Model.Dispose();
1656+
1657+
Model = Conn.CreateModel();
1658+
1659+
Model.ExchangeDeclare(exchange: exchangeName,
1660+
type: "fanout", durable: false, autoDelete: true,
1661+
arguments: null);
1662+
1663+
RabbitMQ.Client.QueueDeclareOk q1 = Model.QueueDeclare(queue: queueName, exclusive: true);
1664+
Assert.AreEqual(queueName, q1.QueueName);
1665+
1666+
Model.QueueBind(queue: queueName, exchange: exchangeName, routingKey: routingKey);
1667+
1668+
var c = new EventingBasicConsumer(Model);
1669+
c.Received += MessageReceived;
1670+
Model.BasicConsume(queue: queueName, autoAck: true, consumer: c);
1671+
1672+
using (IModel pubCh = Conn.CreateModel())
1673+
{
1674+
pubCh.BasicPublish(exchange: exchangeName, routingKey: routingKey, body: body);
1675+
}
1676+
1677+
Assert.True(receivedMessageEvent.WaitOne(waitSpan));
1678+
1679+
CloseAndWaitForRecovery();
1680+
1681+
using (IModel pubCh = Conn.CreateModel())
1682+
{
1683+
pubCh.BasicPublish(exchange: exchangeName, routingKey: "unused", body: body);
1684+
}
1685+
1686+
Assert.True(receivedMessageEvent.WaitOne(waitSpan));
1687+
}
1688+
}
1689+
16281690
internal bool SendAndConsumeMessage(string queue, string exchange, string routingKey)
16291691
{
16301692
using (var ch = Conn.CreateModel())

0 commit comments

Comments
 (0)