88-module (unit_SUITE ).
99-include_lib (" common_test/include/ct.hrl" ).
1010-include_lib (" eunit/include/eunit.hrl" ).
11+ -include_lib (" rabbit_common/include/rabbit.hrl" ).
1112
1213-include (" rabbit_queue_federation.hrl" ).
1314
@@ -17,7 +18,8 @@ all() -> [
1718 reconnect_all_empty_scope ,
1819 reconnect_all_broadcasts_to_members ,
1920 adjust_when_supervisor_not_running ,
20- adjust_clear_upstream_when_supervisor_not_running
21+ adjust_clear_upstream_when_supervisor_not_running ,
22+ start_child_handles_already_present
2123].
2224
2325init_per_suite (Config ) ->
@@ -77,3 +79,20 @@ adjust_clear_upstream_when_supervisor_not_running(_Config) ->
7779 % % adjust/1 with clear_upstream should not fail
7880 ? assertEqual (ok , rabbit_federation_queue_link_sup_sup :adjust ({clear_upstream , <<" /" >>, <<" test" >>})),
7981 ? assertEqual (ok , rabbit_federation_queue_link_sup_sup :adjust ({clear_upstream_set , <<" test" >>})).
82+
83+ start_child_handles_already_present (_Config ) ->
84+ Name = # resource {virtual_host = <<" /" >>, kind = queue , name = <<" q" >>},
85+ Q = amqqueue :new (Name , none , true , false , none , [], <<" /" >>, #{}),
86+ ExpectedId = amqqueue :set_policy (amqqueue :set_immutable (Q ), amqqueue :get_policy (Q )),
87+ ok = meck :new (mirrored_supervisor , [unstick , passthrough ]),
88+ ok = meck :expect (mirrored_supervisor , start_child ,
89+ fun (_Sup , _ChildSpec ) -> {error , already_present } end ),
90+ ok = meck :expect (mirrored_supervisor , delete_child ,
91+ fun (_Sup , _Id ) -> ok end ),
92+ try
93+ ? assertEqual (ok , rabbit_federation_queue_link_sup_sup :start_child (Q )),
94+ ? assert (meck :called (mirrored_supervisor , delete_child ,
95+ [rabbit_federation_queue_link_sup_sup , ExpectedId ]))
96+ after
97+ ok = meck :unload (mirrored_supervisor )
98+ end .
0 commit comments