1313-include_lib (" amqp_client/include/amqp_client.hrl" ).
1414
1515-import (rabbit_ct_broker_helpers ,
16- [rpc /4 ]).
16+ [rpc /4 , rpc / 5 ]).
1717
1818all () ->
1919 [
@@ -22,9 +22,11 @@ all() ->
2222
2323groups () ->
2424 [
25- {tests , [shuffle ],
26- [message_size ,
27- over_max_message_size ]}
25+ {tests , [],
26+ [summary , % % needs to run first
27+ message_size ,
28+ over_max_message_size ]
29+ }
2830 ].
2931
3032% % -------------------------------------------------------------------
@@ -34,14 +36,18 @@ groups() ->
3436init_per_suite (Config ) ->
3537 {ok , _ } = application :ensure_all_started (amqp10_client ),
3638 rabbit_ct_helpers :log_environment (),
37- rabbit_ct_helpers : run_setup_steps ( Config ) .
39+ Config .
3840
3941end_per_suite (Config ) ->
4042 rabbit_ct_helpers :run_teardown_steps (Config ).
4143
4244init_per_group (_Group , Config ) ->
43- rabbit_ct_helpers :run_steps (
44- Config ,
45+ Suffix = rabbit_ct_helpers :testcase_absname (Config , " " , " -" ),
46+ Config1 = rabbit_ct_helpers :set_config (
47+ Config , [{rmq_nodes_count , 3 },
48+ {rmq_nodename_suffix , Suffix }]),
49+ rabbit_ct_helpers :run_setup_steps (
50+ Config1 ,
4551 rabbit_ct_broker_helpers :setup_steps () ++
4652 rabbit_ct_client_helpers :setup_steps ()).
4753
@@ -51,6 +57,13 @@ end_per_group(_Group, Config) ->
5157 rabbit_ct_client_helpers :teardown_steps () ++
5258 rabbit_ct_broker_helpers :teardown_steps ()).
5359
60+ init_per_testcase (summary , Config ) ->
61+ case rabbit_ct_broker_helpers :enable_feature_flag (Config , 'rabbitmq_4.2.0' ) of
62+ ok ->
63+ rabbit_ct_helpers :testcase_started (Config , sumary );
64+ {skip , _ } = Skip ->
65+ Skip
66+ end ;
5467init_per_testcase (Testcase , Config ) ->
5568 rabbit_ct_helpers :testcase_started (Config , Testcase ).
5669
@@ -65,32 +78,7 @@ message_size(Config) ->
6578 AmqplBefore = get_msg_size_metrics (amqp091 , Config ),
6679 AmqpBefore = get_msg_size_metrics (amqp10 , Config ),
6780
68- Binary2B = <<" 12" >>,
69- Binary200K = binary :copy (<<" x" >>, 200_000 ),
70- Payloads = [Binary2B , Binary200K , Binary2B ],
71-
72- {AmqplConn , Ch } = rabbit_ct_client_helpers :open_connection_and_channel (Config ),
73- [amqp_channel :call (Ch ,
74- # 'basic.publish' {routing_key = <<" nowhere" >>},
75- # amqp_msg {payload = Payload })
76- || Payload <- Payloads ],
77-
78- OpnConf = connection_config (Config ),
79- {ok , Connection } = amqp10_client :open_connection (OpnConf ),
80- {ok , Session } = amqp10_client :begin_session_sync (Connection ),
81- Address = rabbitmq_amqp_address :exchange (<<" amq.fanout" >>),
82- {ok , Sender } = amqp10_client :attach_sender_link_sync (Session , <<" sender" >>, Address ),
83- receive {amqp10_event , {link , Sender , credited }} -> ok
84- after 30_000 -> ct :fail (credited_timeout )
85- end ,
86-
87- ok = amqp10_client :send_msg (Sender , amqp10_msg :new (<<" tag1" >>, Binary2B )),
88- ok = amqp10_client :send_msg (Sender , amqp10_msg :new (<<" tag2" >>, Binary200K )),
89- ok = amqp10_client :send_msg (Sender , amqp10_msg :new (<<" tag3" >>, Binary2B )),
90-
91- ok = wait_for_settlement (released , <<" tag1" >>),
92- ok = wait_for_settlement (released , <<" tag2" >>),
93- ok = wait_for_settlement (released , <<" tag3" >>),
81+ publish_messages (Config ),
9482
9583 AmqplAfter = get_msg_size_metrics (amqp091 , Config ),
9684 AmqpAfter = get_msg_size_metrics (amqp10 , Config ),
@@ -100,10 +88,7 @@ message_size(Config) ->
10088 ? assertEqual (ExpectedDiff ,
10189 rabbit_msg_size_metrics :diff_raw_buckets (AmqplAfter , AmqplBefore )),
10290 ? assertEqual (ExpectedDiff ,
103- rabbit_msg_size_metrics :diff_raw_buckets (AmqpAfter , AmqpBefore )),
104-
105- ok = amqp10_client :close_connection (Connection ),
106- ok = rabbit_ct_client_helpers :close_connection_and_channel (AmqplConn , Ch ).
91+ rabbit_msg_size_metrics :diff_raw_buckets (AmqpAfter , AmqpBefore )).
10792
10893over_max_message_size (Config ) ->
10994 DefaultMaxMessageSize = rpc (Config , persistent_term , get , [max_message_size ]),
@@ -134,6 +119,39 @@ over_max_message_size(Config) ->
134119 ok = rabbit_ct_client_helpers :close_connection (Conn ),
135120 ok = rpc (Config , persistent_term , put , [max_message_size , DefaultMaxMessageSize ]).
136121
122+ summary (Config ) ->
123+ ZeroSummary = [{{0 , 100 }, {0 , 0.0 }},
124+ {{101 , 1000 }, {0 , 0.0 }},
125+ {{1001 , 10000 }, {0 , 0.0 }},
126+ {{10001 , 100000 }, {0 , 0.0 }},
127+ {{100001 , 1000000 }, {0 , 0.0 }},
128+ {{1000001 , 10000000 }, {0 , 0.0 }},
129+ {{10000001 , 50000000 }, {0 , 0.0 }},
130+ {{50000001 , 100000000 }, {0 , 0.0 }},
131+ {{100000001 , infinity }, {0 , 0.0 }}],
132+
133+ ? assertEqual (ZeroSummary , rpc (Config , 0 , rabbit_msg_size_metrics , local_summary , [])),
134+ ? assertEqual (ZeroSummary , rpc (Config , 1 , rabbit_msg_size_metrics , cluster_summary , [])),
135+ ? assertEqual (ZeroSummary , rpc (Config , 0 , rabbit_msg_size_metrics , local_summary , [])),
136+ ? assertEqual (ZeroSummary , rpc (Config , 1 , rabbit_msg_size_metrics , cluster_summary , [])),
137+
138+ publish_messages (Config ),
139+
140+ ExpectedSummary = [{{0 , 100 }, {4 , 66.66666666666666 }},
141+ {{101 , 1000 }, {0 , 0.0 }},
142+ {{1001 , 10000 }, {0 , 0.0 }},
143+ {{10001 , 100000 }, {0 , 0.0 }},
144+ {{100001 , 1000000 }, {2 , 33.33333333333333 }},
145+ {{1000001 , 10000000 }, {0 , 0.0 }},
146+ {{10000001 , 50000000 }, {0 , 0.0 }},
147+ {{50000001 , 100000000 }, {0 , 0.0 }},
148+ {{100000001 , infinity }, {0 , 0.0 }}],
149+
150+ ? assertEqual (ExpectedSummary , rpc (Config , 0 , rabbit_msg_size_metrics , local_summary , [])),
151+ ? assertEqual (ExpectedSummary , rpc (Config , 0 , rabbit_msg_size_metrics , cluster_summary , [])),
152+ ? assertEqual (ExpectedSummary , rpc (Config , 1 , rabbit_msg_size_metrics , cluster_summary , [])),
153+ ? assertEqual (ZeroSummary , rpc (Config , 1 , rabbit_msg_size_metrics , local_summary , [])).
154+
137155get_msg_size_metrics (Protocol , Config ) ->
138156 rpc (Config , rabbit_msg_size_metrics , raw_buckets , [Protocol ]).
139157
@@ -145,6 +163,36 @@ connection_config(Config) ->
145163 container_id => <<" my container" >>,
146164 sasl => anon }.
147165
166+ publish_messages (Config ) ->
167+ Binary2B = <<" 12" >>,
168+ Binary200K = binary :copy (<<" x" >>, 200_000 ),
169+ Payloads = [Binary2B , Binary200K , Binary2B ],
170+
171+ {AmqplConn , Ch } = rabbit_ct_client_helpers :open_connection_and_channel (Config ),
172+ [amqp_channel :call (Ch ,
173+ # 'basic.publish' {routing_key = <<" nowhere" >>},
174+ # amqp_msg {payload = Payload })
175+ || Payload <- Payloads ],
176+
177+ OpnConf = connection_config (Config ),
178+ {ok , Connection } = amqp10_client :open_connection (OpnConf ),
179+ {ok , Session } = amqp10_client :begin_session_sync (Connection ),
180+ Address = rabbitmq_amqp_address :exchange (<<" amq.fanout" >>),
181+ {ok , Sender } = amqp10_client :attach_sender_link_sync (Session , <<" sender" >>, Address ),
182+ receive {amqp10_event , {link , Sender , credited }} -> ok
183+ after 30_000 -> ct :fail (credited_timeout )
184+ end ,
185+
186+ ok = amqp10_client :send_msg (Sender , amqp10_msg :new (<<" tag1" >>, Binary2B )),
187+ ok = amqp10_client :send_msg (Sender , amqp10_msg :new (<<" tag2" >>, Binary200K )),
188+ ok = amqp10_client :send_msg (Sender , amqp10_msg :new (<<" tag3" >>, Binary2B )),
189+
190+ ok = wait_for_settlement (released , <<" tag1" >>),
191+ ok = wait_for_settlement (released , <<" tag2" >>),
192+ ok = wait_for_settlement (released , <<" tag3" >>),
193+ ok = amqp10_client :close_connection (Connection ),
194+ ok = rabbit_ct_client_helpers :close_connection_and_channel (AmqplConn , Ch ).
195+
148196wait_for_settlement (State , Tag ) ->
149197 receive
150198 {amqp10_disposition , {State , Tag }} ->
0 commit comments