@@ -1625,6 +1625,68 @@ public void TestTopologyRecoveryConsumerExceptionHandler()
1625
1625
}
1626
1626
}
1627
1627
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
+
1628
1690
internal bool SendAndConsumeMessage ( string queue , string exchange , string routingKey )
1629
1691
{
1630
1692
using ( var ch = Conn . CreateModel ( ) )
0 commit comments