2424
2525all () ->
2626 [
27- {group , non_parallel_tests }
27+ {group , non_parallel_tests },
28+ {group , cluster_tests }
2829 ].
2930
3031groups () ->
@@ -37,41 +38,36 @@ groups() ->
3738 gen_server2_metrics ,
3839 consumer_metrics
3940 ]
40- }
41+ },
42+ {cluster_tests , [], [cluster_queue_metrics ]}
4143 ].
4244
4345% % -------------------------------------------------------------------
4446% % Testsuite setup/teardown.
4547% % -------------------------------------------------------------------
4648
4749merge_app_env (Config ) ->
48- rabbit_ct_helpers :merge_app_env (Config ,
49- {rabbit , [
50- {core_metrics_gc_interval , 6000000 },
51- {collect_statistics_interval , 100 },
52- {collect_statistics , fine }
53- ]}).
54-
55- init_per_suite (Config ) ->
50+ AppEnv = {rabbit , [{core_metrics_gc_interval , 6000000 },
51+ {collect_statistics_interval , 100 },
52+ {collect_statistics , fine }]},
53+ rabbit_ct_helpers :merge_app_env (Config , AppEnv ).
54+
55+ init_per_group (cluster_tests , Config ) ->
56+ rabbit_ct_helpers :log_environment (),
57+ Conf = [{rmq_nodename_suffix , cluster_tests }, {rmq_nodes_count , 2 }],
58+ Config1 = rabbit_ct_helpers :set_config (Config , Conf ),
59+ rabbit_ct_helpers :run_setup_steps (Config1 , setup_steps ());
60+ init_per_group (non_parallel_tests , Config ) ->
5661 rabbit_ct_helpers :log_environment (),
57- Config1 = rabbit_ct_helpers :set_config (Config , [
58- {rmq_nodename_suffix , ? MODULE }
59- ]),
60- rabbit_ct_helpers :run_setup_steps (
61- Config1 ,
62- [ fun merge_app_env /1 ] ++ rabbit_ct_broker_helpers :setup_steps ()).
63-
64- end_per_suite (Config ) ->
62+ Conf = [{rmq_nodename_suffix , non_parallel_tests }],
63+ Config1 = rabbit_ct_helpers :set_config (Config , Conf ),
64+ rabbit_ct_helpers :run_setup_steps (Config1 , setup_steps ()).
65+
66+ end_per_group (_ , Config ) ->
6567 rabbit_ct_helpers :run_teardown_steps (
6668 Config ,
6769 rabbit_ct_broker_helpers :teardown_steps ()).
6870
69- init_per_group (_ , Config ) ->
70- Config .
71-
72- end_per_group (_ , Config ) ->
73- Config .
74-
7571init_per_testcase (Testcase , Config ) ->
7672 rabbit_ct_helpers :testcase_started (Config , Testcase ),
7773 rabbit_ct_helpers :run_steps (Config ,
@@ -83,8 +79,11 @@ end_per_testcase(Testcase, Config) ->
8379 Config ,
8480 rabbit_ct_client_helpers :teardown_steps ()).
8581
82+ setup_steps () ->
83+ [ fun merge_app_env /1 ] ++ rabbit_ct_broker_helpers :setup_steps ().
84+
8685% % -------------------------------------------------------------------
87- % % Testcases.
86+ % % Single-node Testcases.
8887% % -------------------------------------------------------------------
8988
9089queue_metrics (Config ) ->
@@ -329,3 +328,59 @@ x(Name) ->
329328 # resource { virtual_host = <<" /" >>,
330329 kind = exchange ,
331330 name = Name }.
331+
332+ % % -------------------------------------------------------------------
333+ % % Cluster Testcases.
334+ % % -------------------------------------------------------------------
335+
336+ cluster_queue_metrics (Config ) ->
337+ VHost = <<" /" >>,
338+ QueueName = <<" cluster_queue_metrics" >>,
339+ PolicyName = <<" ha-policy-1" >>,
340+ PolicyPattern = <<" .*" >>,
341+ PolicyAppliesTo = <<" queues" >>,
342+
343+ Node0 = rabbit_ct_broker_helpers :get_node_config (Config , 0 , nodename ),
344+ Node1 = rabbit_ct_broker_helpers :get_node_config (Config , 1 , nodename ),
345+
346+ Ch = rabbit_ct_client_helpers :open_channel (Config , Node0 ),
347+
348+ Node0Name = rabbit_data_coercion :to_binary (Node0 ),
349+ Definition0 = [{<<" ha-mode" >>, <<" nodes" >>}, {<<" ha-params" >>, [Node0Name ]}],
350+ ok = rabbit_ct_broker_helpers :set_policy (Config , 0 ,
351+ PolicyName , PolicyPattern ,
352+ PolicyAppliesTo , Definition0 ),
353+
354+ amqp_channel :call (Ch , # 'queue.declare' {queue = QueueName }),
355+ amqp_channel :call (Ch , # 'basic.publish' {routing_key = QueueName },
356+ # amqp_msg {payload = <<" hello" >>}),
357+
358+ % Update policy to point to other node
359+ Node1Name = rabbit_data_coercion :to_binary (Node1 ),
360+ Definition1 = [{<<" ha-mode" >>, <<" nodes" >>}, {<<" ha-params" >>, [Node1Name ]}],
361+ ok = rabbit_ct_broker_helpers :set_policy (Config , 0 ,
362+ PolicyName , PolicyPattern ,
363+ PolicyAppliesTo , Definition1 ),
364+
365+ % Synchronize
366+ Name = rabbit_misc :r (VHost , queue , QueueName ),
367+ [# amqqueue {pid = QPid }] = rabbit_ct_broker_helpers :rpc (Config , Node0 ,
368+ ets , lookup ,
369+ [rabbit_queue , Name ]),
370+ ok = rabbit_ct_broker_helpers :rpc (Config , Node0 , rabbit_amqqueue ,
371+ sync_mirrors , [QPid ]),
372+
373+ timer :sleep (1500 ),
374+
375+ % Check ETS table for data
376+ % rabbit_core_metrics:queue_stats
377+ [] = rabbit_ct_broker_helpers :rpc (Config , Node0 , ets , tab2list ,
378+ [queue_coarse_metrics ]),
379+
380+ [{Name , 1 , 0 , 1 , _ }] = rabbit_ct_broker_helpers :rpc (Config , Node1 , ets ,
381+ tab2list ,
382+ [queue_coarse_metrics ]),
383+
384+ amqp_channel :call (Ch , # 'queue.delete' {queue = QueueName }),
385+ rabbit_ct_client_helpers :close_channel (Ch ),
386+ Config .
0 commit comments