@@ -1214,38 +1214,45 @@ rabbit_mqtt_qos0_queue(Config) ->
1214
1214
ok = emqtt :disconnect (Pub ).
1215
1215
1216
1216
rabbit_mqtt_qos0_queue_kill_node (Config ) ->
1217
- Topic = atom_to_binary (? FUNCTION_NAME ),
1217
+ Topic1 = <<" t/1" >>,
1218
+ Topic2 = <<" t/2" >>,
1218
1219
Pub = connect (<<" publisher" >>, Config , 2 , []),
1219
1220
1220
1221
SubscriberId = <<" subscriber" >>,
1221
1222
Sub0 = connect (SubscriberId , Config , 0 , []),
1222
- {ok , _ , [0 ]} = emqtt :subscribe (Sub0 , Topic , qos0 ),
1223
- ok = emqtt :publish (Pub , Topic , <<" m0" >>, qos0 ),
1224
- ok = expect_publishes (Sub0 , Topic , [<<" m0" >>]),
1223
+ {ok , _ , [0 ]} = emqtt :subscribe (Sub0 , Topic1 , qos0 ),
1224
+ ok = emqtt :publish (Pub , Topic1 , <<" m0" >>, qos0 ),
1225
+ ok = expect_publishes (Sub0 , Topic1 , [<<" m0" >>]),
1225
1226
1226
1227
process_flag (trap_exit , true ),
1227
1228
ok = rabbit_ct_broker_helpers :kill_node (Config , 0 ),
1228
- % % Wait a bit to ensure that Mnesia deletes the queue record on nodes 1 and 2 from Mnesia
1229
- % % table rabbit_queue (but the queue record is still present in rabbit_durable_queue) .
1229
+ ok = await_exit ( Sub0 ),
1230
+ % % Wait to run rabbit_amqqueue:on_node_down/1 on both live nodes .
1230
1231
timer :sleep (500 ),
1232
+ % % Re-connect to a live node with same MQTT client ID.
1231
1233
Sub1 = connect (SubscriberId , Config , 1 , []),
1232
- {ok , _ , [0 ]} = emqtt :subscribe (Sub1 , Topic , qos0 ),
1233
- ok = emqtt :publish (Pub , Topic , <<" m1" >>, qos0 ),
1234
- ok = expect_publishes (Sub1 , Topic , [<<" m1" >>]),
1234
+ {ok , _ , [0 ]} = emqtt :subscribe (Sub1 , Topic2 , qos0 ),
1235
+ ok = emqtt :publish (Pub , Topic2 , <<" m1" >>, qos0 ),
1236
+ ok = expect_publishes (Sub1 , Topic2 , [<<" m1" >>]),
1237
+ % % Since we started a new clean session, previous subscription should have been deleted.
1238
+ ok = emqtt :publish (Pub , Topic1 , <<" m2" >>, qos0 ),
1239
+ receive {publish , _ } = Publish -> ct :fail ({unexpected , Publish })
1240
+ after 300 -> ok
1241
+ end ,
1235
1242
1236
- % % Start node 0 to have a majority for Khepri.
1237
1243
ok = rabbit_ct_broker_helpers :start_node (Config , 0 ),
1238
1244
ok = rabbit_ct_broker_helpers :kill_node (Config , 1 ),
1239
- % % This time, do not wait. Mnesia will contain the queue record in rabbit_durable_queue,
1240
- % % but this time Mnesia may or may not contain the queue record in rabbit_queue .
1245
+ % % This time, do not wait.
1246
+ % % rabbit_amqqueue:on_node_down/1 may or may not have run .
1241
1247
Sub2 = connect (SubscriberId , Config , 2 , []),
1242
- {ok , _ , [0 ]} = emqtt :subscribe (Sub2 , Topic , qos0 ),
1243
- ok = emqtt :publish (Pub , Topic , <<" m2 " >>, qos0 ),
1244
- ok = expect_publishes (Sub2 , Topic , [<<" m2 " >>]),
1248
+ {ok , _ , [0 ]} = emqtt :subscribe (Sub2 , Topic2 , qos0 ),
1249
+ ok = emqtt :publish (Pub , Topic2 , <<" m3 " >>, qos0 ),
1250
+ ok = expect_publishes (Sub2 , Topic2 , [<<" m3 " >>]),
1245
1251
1246
1252
ok = emqtt :disconnect (Sub2 ),
1247
1253
ok = emqtt :disconnect (Pub ),
1248
- ok = rabbit_ct_broker_helpers :start_node (Config , 1 ).
1254
+ ok = rabbit_ct_broker_helpers :start_node (Config , 1 ),
1255
+ ? assertEqual ([], rpc (Config , rabbit_db_binding , get_all , [])).
1249
1256
1250
1257
% % Test that MQTT connection can be listed and closed via the rabbitmq_management plugin.
1251
1258
management_plugin_connection (Config ) ->
0 commit comments