@@ -1026,38 +1026,45 @@ rabbit_mqtt_qos0_queue(Config) ->
1026
1026
ok = emqtt :disconnect (Pub ).
1027
1027
1028
1028
rabbit_mqtt_qos0_queue_kill_node (Config ) ->
1029
- Topic = atom_to_binary (? FUNCTION_NAME ),
1029
+ Topic1 = <<" t/1" >>,
1030
+ Topic2 = <<" t/2" >>,
1030
1031
Pub = connect (<<" publisher" >>, Config , 2 , []),
1031
1032
1032
1033
SubscriberId = <<" subscriber" >>,
1033
1034
Sub0 = connect (SubscriberId , Config , 0 , []),
1034
- {ok , _ , [0 ]} = emqtt :subscribe (Sub0 , Topic , qos0 ),
1035
- ok = emqtt :publish (Pub , Topic , <<" m0" >>, qos0 ),
1036
- ok = expect_publishes (Sub0 , Topic , [<<" m0" >>]),
1035
+ {ok , _ , [0 ]} = emqtt :subscribe (Sub0 , Topic1 , qos0 ),
1036
+ ok = emqtt :publish (Pub , Topic1 , <<" m0" >>, qos0 ),
1037
+ ok = expect_publishes (Sub0 , Topic1 , [<<" m0" >>]),
1037
1038
1038
1039
process_flag (trap_exit , true ),
1039
1040
ok = rabbit_ct_broker_helpers :kill_node (Config , 0 ),
1040
- % % Wait a bit to ensure that Mnesia deletes the queue record on nodes 1 and 2 from Mnesia
1041
- % % table rabbit_queue (but the queue record is still present in rabbit_durable_queue) .
1041
+ ok = await_exit ( Sub0 ),
1042
+ % % Wait to run rabbit_amqqueue:on_node_down/1 on both live nodes .
1042
1043
timer :sleep (500 ),
1044
+ % % Re-connect to a live node with same MQTT client ID.
1043
1045
Sub1 = connect (SubscriberId , Config , 1 , []),
1044
- {ok , _ , [0 ]} = emqtt :subscribe (Sub1 , Topic , qos0 ),
1045
- ok = emqtt :publish (Pub , Topic , <<" m1" >>, qos0 ),
1046
- ok = expect_publishes (Sub1 , Topic , [<<" m1" >>]),
1046
+ {ok , _ , [0 ]} = emqtt :subscribe (Sub1 , Topic2 , qos0 ),
1047
+ ok = emqtt :publish (Pub , Topic2 , <<" m1" >>, qos0 ),
1048
+ ok = expect_publishes (Sub1 , Topic2 , [<<" m1" >>]),
1049
+ % % Since we started a new clean session, previous subscription should have been deleted.
1050
+ ok = emqtt :publish (Pub , Topic1 , <<" m2" >>, qos0 ),
1051
+ receive {publish , _ } = Publish -> ct :fail ({unexpected , Publish })
1052
+ after 300 -> ok
1053
+ end ,
1047
1054
1048
- % % Start node 0 to have a majority for Khepri.
1049
1055
ok = rabbit_ct_broker_helpers :start_node (Config , 0 ),
1050
1056
ok = rabbit_ct_broker_helpers :kill_node (Config , 1 ),
1051
- % % This time, do not wait. Mnesia will contain the queue record in rabbit_durable_queue,
1052
- % % but this time Mnesia may or may not contain the queue record in rabbit_queue .
1057
+ % % This time, do not wait.
1058
+ % % rabbit_amqqueue:on_node_down/1 may or may not have run .
1053
1059
Sub2 = connect (SubscriberId , Config , 2 , []),
1054
- {ok , _ , [0 ]} = emqtt :subscribe (Sub2 , Topic , qos0 ),
1055
- ok = emqtt :publish (Pub , Topic , <<" m2 " >>, qos0 ),
1056
- ok = expect_publishes (Sub2 , Topic , [<<" m2 " >>]),
1060
+ {ok , _ , [0 ]} = emqtt :subscribe (Sub2 , Topic2 , qos0 ),
1061
+ ok = emqtt :publish (Pub , Topic2 , <<" m3 " >>, qos0 ),
1062
+ ok = expect_publishes (Sub2 , Topic2 , [<<" m3 " >>]),
1057
1063
1058
1064
ok = emqtt :disconnect (Sub2 ),
1059
1065
ok = emqtt :disconnect (Pub ),
1060
- ok = rabbit_ct_broker_helpers :start_node (Config , 1 ).
1066
+ ok = rabbit_ct_broker_helpers :start_node (Config , 1 ),
1067
+ ? assertEqual ([], rpc (Config , rabbit_db_binding , get_all , [])).
1061
1068
1062
1069
% % Test that MQTT connection can be listed and closed via the rabbitmq_management plugin.
1063
1070
management_plugin_connection (Config ) ->
0 commit comments