2222    check_machine_valid ,
2323    is_aq_managed_image ,
2424    get_aq_build_metadata ,
25+     delete_machine ,
2526)
2627from  rabbit_consumer .vm_data  import  VmData 
2728
@@ -221,7 +222,7 @@ def test_consume_create_machine_hostnames_good_path(
221222        patch (
222223            "rabbit_consumer.message_consumer.get_aq_build_metadata" 
223224        ) as  get_image_meta ,
224-         patch ("rabbit_consumer.message_consumer.delete_machine" ) as  delete_machine ,
225+         patch ("rabbit_consumer.message_consumer.delete_machine" ) as  delete_machine_mock ,
225226    ):
226227        check_machine .return_value  =  True 
227228        get_image_meta .return_value  =  image_metadata 
@@ -235,7 +236,7 @@ def test_consume_create_machine_hostnames_good_path(
235236    openstack .get_server_networks .assert_called_with (vm_data )
236237
237238    # Check main Aq Flow 
238-     delete_machine .assert_called_once_with (vm_data , network_details [0 ])
239+     delete_machine_mock .assert_called_once_with (vm_data , network_details [0 ])
239240    aq_api .create_machine .assert_called_once_with (rabbit_message , vm_data )
240241    machine_name  =  aq_api .create_machine .return_value 
241242
@@ -255,7 +256,7 @@ def test_consume_create_machine_hostnames_good_path(
255256
256257
257258@patch ("rabbit_consumer.message_consumer.delete_machine" ) 
258- def  test_consume_delete_machine_good_path (delete_machine , rabbit_message ):
259+ def  test_consume_delete_machine_good_path (delete_machine_mock , rabbit_message ):
259260    """ 
260261    Test that the function calls the correct functions in the correct order to delete a machine 
261262    """ 
@@ -264,7 +265,9 @@ def test_consume_delete_machine_good_path(delete_machine, rabbit_message):
264265    with  patch ("rabbit_consumer.message_consumer.VmData" ) as  data_patch :
265266        handle_machine_delete (rabbit_message )
266267
267-     delete_machine .assert_called_once_with (vm_data = data_patch .from_message .return_value )
268+     delete_machine_mock .assert_called_once_with (
269+         vm_data = data_patch .from_message .return_value 
270+     )
268271
269272
270273@patch ("rabbit_consumer.message_consumer.is_aq_managed_image" ) 
@@ -361,3 +364,71 @@ def test_get_aq_build_metadata(openstack_api, aq_metadata_class, vm_data):
361364    aq_metadata_obj .override_from_vm_meta .assert_called_once_with (
362365        openstack_api .get_server_metadata .return_value 
363366    )
367+ 
368+ 
369+ @patch ("rabbit_consumer.message_consumer.aq_api" ) 
370+ def  test_delete_machine_hostname_only (aq_api , vm_data , openstack_address ):
371+     """ 
372+     Tests that the function deletes a host then exits if no machine is found 
373+     """ 
374+     aq_api .check_host_exists .return_value  =  True 
375+     aq_api .search_machine_by_serial .return_value  =  None 
376+ 
377+     delete_machine (vm_data , openstack_address )
378+     aq_api .delete_host .assert_called_once_with (openstack_address .hostname )
379+     aq_api .delete_machine .assert_not_called ()
380+ 
381+ 
382+ @patch ("rabbit_consumer.message_consumer.aq_api" ) 
383+ def  test_delete_machine_by_serial (aq_api , vm_data , openstack_address ):
384+     """ 
385+     Tests that the function deletes a host then a machine 
386+     assuming both were found 
387+     """ 
388+     # Assume our host address doesn't match the machine record 
389+     # but the machine does have a hostname which is valid... 
390+     aq_api .check_host_exists .side_effect  =  [False , True ]
391+ 
392+     aq_api .search_host_by_machine .return_value  =  "host.example.com" 
393+     aq_api .get_machine_details .return_value  =  "" 
394+ 
395+     delete_machine (vm_data , openstack_address )
396+ 
397+     aq_api .check_host_exists .assert_has_calls (
398+         [call (openstack_address .hostname ), call ("host.example.com" )]
399+     )
400+     aq_api .delete_host .assert_called_once_with ("host.example.com" )
401+ 
402+ 
403+ @patch ("rabbit_consumer.message_consumer.aq_api" ) 
404+ @patch ("rabbit_consumer.message_consumer.socket" ) 
405+ def  test_delete_machine_no_hostname (socket_api , aq_api , vm_data ):
406+     aq_api .check_host_exists .return_value  =  False 
407+ 
408+     ip_address  =  "127.0.0.1" 
409+     socket_api .gethostbyname .return_value  =  ip_address 
410+ 
411+     machine_name  =  aq_api .search_machine_by_serial .return_value 
412+     aq_api .get_machine_details .return_value  =  f"eth0: { ip_address }  
413+ 
414+     delete_machine (vm_data , NonCallableMock ())
415+     aq_api .delete_address .assert_called_once_with (ip_address , machine_name )
416+     aq_api .delete_interface .assert_called_once_with (machine_name )
417+ 
418+ 
419+ @patch ("rabbit_consumer.message_consumer.aq_api" ) 
420+ @patch ("rabbit_consumer.message_consumer.socket" ) 
421+ def  test_delete_machine_always_called (socket_api , aq_api , vm_data ):
422+     """ 
423+     Tests that the function always calls the delete machine function 
424+     """ 
425+     aq_api .check_host_exists .return_value  =  False 
426+     socket_api .gethostbyname .return_value  =  "123123" 
427+ 
428+     aq_api .get_machine_details .return_value  =  "Machine Details" 
429+ 
430+     machine_name  =  "machine_name" 
431+     aq_api .search_machine_by_serial .return_value  =  machine_name 
432+ 
433+     delete_machine (vm_data , NonCallableMock ())
434+     aq_api .delete_machine .assert_called_once_with (machine_name )
0 commit comments