24
24
25
25
all () ->
26
26
[
27
- {group , non_parallel_tests }
27
+ {group , non_parallel_tests },
28
+ {group , cluster_tests }
28
29
].
29
30
30
31
groups () ->
@@ -37,41 +38,36 @@ groups() ->
37
38
gen_server2_metrics ,
38
39
consumer_metrics
39
40
]
40
- }
41
+ },
42
+ {cluster_tests , [], [cluster_queue_metrics ]}
41
43
].
42
44
43
45
% % -------------------------------------------------------------------
44
46
% % Testsuite setup/teardown.
45
47
% % -------------------------------------------------------------------
46
48
47
49
merge_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 ) ->
56
61
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 ) ->
65
67
rabbit_ct_helpers :run_teardown_steps (
66
68
Config ,
67
69
rabbit_ct_broker_helpers :teardown_steps ()).
68
70
69
- init_per_group (_ , Config ) ->
70
- Config .
71
-
72
- end_per_group (_ , Config ) ->
73
- Config .
74
-
75
71
init_per_testcase (Testcase , Config ) ->
76
72
rabbit_ct_helpers :testcase_started (Config , Testcase ),
77
73
rabbit_ct_helpers :run_steps (Config ,
@@ -83,8 +79,11 @@ end_per_testcase(Testcase, Config) ->
83
79
Config ,
84
80
rabbit_ct_client_helpers :teardown_steps ()).
85
81
82
+ setup_steps () ->
83
+ [ fun merge_app_env /1 ] ++ rabbit_ct_broker_helpers :setup_steps ().
84
+
86
85
% % -------------------------------------------------------------------
87
- % % Testcases.
86
+ % % Single-node Testcases.
88
87
% % -------------------------------------------------------------------
89
88
90
89
queue_metrics (Config ) ->
@@ -329,3 +328,59 @@ x(Name) ->
329
328
# resource { virtual_host = <<" /" >>,
330
329
kind = exchange ,
331
330
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