@@ -113,7 +113,9 @@ all_tests() ->
113
113
cancel_sync_queue ,
114
114
basic_recover ,
115
115
idempotent_recover ,
116
- vhost_with_quorum_queue_is_deleted
116
+ vhost_with_quorum_queue_is_deleted ,
117
+ consume_redelivery_count ,
118
+ subscribe_redelivery_count
117
119
].
118
120
119
121
% % -------------------------------------------------------------------
@@ -1820,6 +1822,99 @@ basic_recover(Config) ->
1820
1822
amqp_channel :cast (Ch , # 'basic.recover' {requeue = true }),
1821
1823
wait_for_messages_ready (Servers , RaName , 1 ),
1822
1824
wait_for_messages_pending_ack (Servers , RaName , 0 ).
1825
+
1826
+ subscribe_redelivery_count (Config ) ->
1827
+ [Server | _ ] = Servers = rabbit_ct_broker_helpers :get_node_configs (Config , nodename ),
1828
+
1829
+ Ch = rabbit_ct_client_helpers :open_channel (Config , Server ),
1830
+ QQ = ? config (queue_name , Config ),
1831
+ ? assertEqual ({'queue.declare_ok' , QQ , 0 , 0 },
1832
+ declare (Ch , QQ , [{<<" x-queue-type" >>, longstr , <<" quorum" >>}])),
1833
+
1834
+ RaName = ra_name (QQ ),
1835
+ publish (Ch , QQ ),
1836
+ wait_for_messages_ready (Servers , RaName , 1 ),
1837
+ wait_for_messages_pending_ack (Servers , RaName , 0 ),
1838
+ subscribe (Ch , QQ , false ),
1839
+
1840
+ DTag = <<" x-delivery-count" >>,
1841
+ receive
1842
+ {# 'basic.deliver' {delivery_tag = DeliveryTag ,
1843
+ redelivered = false },
1844
+ # amqp_msg {props = # 'P_basic' {headers = H0 }}} ->
1845
+ ? assertMatch ({DTag , _ , 0 }, rabbit_basic :header (DTag , H0 )),
1846
+ amqp_channel :cast (Ch , # 'basic.nack' {delivery_tag = DeliveryTag ,
1847
+ multiple = false ,
1848
+ requeue = true })
1849
+ end ,
1850
+
1851
+ receive
1852
+ {# 'basic.deliver' {delivery_tag = DeliveryTag1 ,
1853
+ redelivered = true },
1854
+ # amqp_msg {props = # 'P_basic' {headers = H1 }}} ->
1855
+ ? assertMatch ({DTag , _ , 1 }, rabbit_basic :header (DTag , H1 )),
1856
+ amqp_channel :cast (Ch , # 'basic.nack' {delivery_tag = DeliveryTag1 ,
1857
+ multiple = false ,
1858
+ requeue = true })
1859
+ end ,
1860
+
1861
+ receive
1862
+ {# 'basic.deliver' {delivery_tag = DeliveryTag2 ,
1863
+ redelivered = true },
1864
+ # amqp_msg {props = # 'P_basic' {headers = H2 }}} ->
1865
+ ? assertMatch ({DTag , _ , 2 }, rabbit_basic :header (DTag , H2 )),
1866
+ amqp_channel :cast (Ch , # 'basic.ack' {delivery_tag = DeliveryTag2 ,
1867
+ multiple = false }),
1868
+ wait_for_messages_ready (Servers , RaName , 0 ),
1869
+ wait_for_messages_pending_ack (Servers , RaName , 0 )
1870
+ end .
1871
+
1872
+ consume_redelivery_count (Config ) ->
1873
+ [Server | _ ] = Servers = rabbit_ct_broker_helpers :get_node_configs (Config , nodename ),
1874
+
1875
+ Ch = rabbit_ct_client_helpers :open_channel (Config , Server ),
1876
+ QQ = ? config (queue_name , Config ),
1877
+ ? assertEqual ({'queue.declare_ok' , QQ , 0 , 0 },
1878
+ declare (Ch , QQ , [{<<" x-queue-type" >>, longstr , <<" quorum" >>}])),
1879
+
1880
+ RaName = ra_name (QQ ),
1881
+ publish (Ch , QQ ),
1882
+ wait_for_messages_ready (Servers , RaName , 1 ),
1883
+ wait_for_messages_pending_ack (Servers , RaName , 0 ),
1884
+
1885
+ DTag = <<" x-delivery-count" >>,
1886
+
1887
+ {# 'basic.get_ok' {delivery_tag = DeliveryTag ,
1888
+ redelivered = false },
1889
+ # amqp_msg {props = # 'P_basic' {headers = H0 }}} =
1890
+ amqp_channel :call (Ch , # 'basic.get' {queue = QQ ,
1891
+ no_ack = false }),
1892
+ ? assertMatch ({DTag , _ , 0 }, rabbit_basic :header (DTag , H0 )),
1893
+ amqp_channel :cast (Ch , # 'basic.nack' {delivery_tag = DeliveryTag ,
1894
+ multiple = false ,
1895
+ requeue = true }),
1896
+
1897
+ {# 'basic.get_ok' {delivery_tag = DeliveryTag1 ,
1898
+ redelivered = true },
1899
+ # amqp_msg {props = # 'P_basic' {headers = H1 }}} =
1900
+ amqp_channel :call (Ch , # 'basic.get' {queue = QQ ,
1901
+ no_ack = false }),
1902
+ ? assertMatch ({DTag , _ , 1 }, rabbit_basic :header (DTag , H1 )),
1903
+ amqp_channel :cast (Ch , # 'basic.nack' {delivery_tag = DeliveryTag1 ,
1904
+ multiple = false ,
1905
+ requeue = true }),
1906
+
1907
+ {# 'basic.get_ok' {delivery_tag = DeliveryTag2 ,
1908
+ redelivered = true },
1909
+ # amqp_msg {props = # 'P_basic' {headers = H2 }}} =
1910
+ amqp_channel :call (Ch , # 'basic.get' {queue = QQ ,
1911
+ no_ack = false }),
1912
+ ? assertMatch ({DTag , _ , 2 }, rabbit_basic :header (DTag , H2 )),
1913
+ amqp_channel :cast (Ch , # 'basic.nack' {delivery_tag = DeliveryTag2 ,
1914
+ multiple = false ,
1915
+ requeue = true }).
1916
+
1917
+
1823
1918
% %----------------------------------------------------------------------------
1824
1919
1825
1920
declare (Ch , Q ) ->
0 commit comments