@@ -266,9 +266,11 @@ def test_register_tools(self):
266266 call (compute_tools .create_server ),
267267 call (compute_tools .get_flavors ),
268268 call (compute_tools .action_server ),
269+ call (compute_tools .update_server ),
270+ call (compute_tools .delete_server ),
269271 ],
270272 )
271- assert mock_tool_decorator .call_count == 5
273+ assert mock_tool_decorator .call_count == 7
272274
273275 def test_compute_tools_instantiation (self ):
274276 """Test ComputeTools can be instantiated."""
@@ -432,3 +434,124 @@ def test_action_server_conflict_exception(self, mock_get_openstack_conn):
432434 compute_tools .action_server (server_id , action )
433435
434436 mock_conn .compute .start_server .assert_called_once_with (server_id )
437+
438+ def test_update_server_success (self , mock_get_openstack_conn ):
439+ """Test updating a server successfully with all parameters."""
440+ mock_conn = mock_get_openstack_conn
441+ server_id = "test-server-id"
442+
443+ mock_server = {
444+ "name" : "updated-server" ,
445+ "id" : server_id ,
446+ "status" : "ACTIVE" ,
447+ "hostname" : "updated-hostname" ,
448+ "description" : "Updated server description" ,
449+ "accessIPv4" : "192.168.1.100" ,
450+ "accessIPv6" : "2001:db8::1" ,
451+ }
452+
453+ mock_conn .compute .update_server .return_value = mock_server
454+
455+ compute_tools = ComputeTools ()
456+ server_params = mock_server .copy ()
457+ server_params .pop ("status" )
458+ result = compute_tools .update_server (** server_params )
459+
460+ expected_output = Server (** mock_server )
461+ assert result == expected_output
462+
463+ expected_params = {
464+ "accessIPv4" : "192.168.1.100" ,
465+ "accessIPv6" : "2001:db8::1" ,
466+ "name" : "updated-server" ,
467+ "hostname" : "updated-hostname" ,
468+ "description" : "Updated server description" ,
469+ }
470+ mock_conn .compute .update_server .assert_called_once_with (
471+ server_id , ** expected_params
472+ )
473+
474+ @pytest .mark .parametrize (
475+ "params" ,
476+ [
477+ {"param_key" : "name" , "value" : "new-name" },
478+ {"param_key" : "hostname" , "value" : "new-hostname" },
479+ {"param_key" : "description" , "value" : "New description" },
480+ {"param_key" : "accessIPv4" , "value" : "192.168.1.100" },
481+ {"param_key" : "accessIPv6" , "value" : "2001:db8::1" },
482+ ],
483+ )
484+ def test_update_server_optional_params (
485+ self , mock_get_openstack_conn , params
486+ ):
487+ """Test updating a server with optional parameters."""
488+ mock_conn = mock_get_openstack_conn
489+ server_id = "test-server-id"
490+
491+ mock_server = {
492+ "id" : server_id ,
493+ "name" : "original-name" ,
494+ "description" : "Original description" ,
495+ "hostname" : "original-hostname" ,
496+ "accessIPv4" : "1.1.1.1" ,
497+ "accessIPv6" : "::" ,
498+ "status" : "ACTIVE" ,
499+ ** {params ["param_key" ]: params ["value" ]},
500+ }
501+
502+ mock_conn .compute .update_server .return_value = mock_server
503+
504+ compute_tools = ComputeTools ()
505+ result = compute_tools .update_server (
506+ id = server_id ,
507+ ** {params ["param_key" ]: params ["value" ]},
508+ )
509+ assert result == Server (** mock_server )
510+
511+ expected_params = {params ["param_key" ]: params ["value" ]}
512+ mock_conn .compute .update_server .assert_called_once_with (
513+ server_id , ** expected_params
514+ )
515+
516+ def test_update_server_not_found (self , mock_get_openstack_conn ):
517+ """Test updating a server that does not exist."""
518+ mock_conn = mock_get_openstack_conn
519+ server_id = "non-existent-server-id"
520+
521+ # Mock the update_server method to raise NotFoundException
522+ mock_conn .compute .update_server .side_effect = NotFoundException ()
523+
524+ compute_tools = ComputeTools ()
525+
526+ with pytest .raises (NotFoundException ):
527+ compute_tools .update_server (id = server_id )
528+
529+ mock_conn .compute .update_server .assert_called_once_with (server_id )
530+
531+ def test_delete_server_success (self , mock_get_openstack_conn ):
532+ """Test deleting a server successfully."""
533+ mock_conn = mock_get_openstack_conn
534+ server_id = "test-server-id"
535+
536+ mock_conn .compute .delete_server .return_value = None
537+
538+ compute_tools = ComputeTools ()
539+ result = compute_tools .delete_server (server_id )
540+
541+ assert result is None
542+ mock_conn .compute .delete_server .assert_called_once_with (server_id )
543+
544+ def test_delete_server_not_found (self , mock_get_openstack_conn ):
545+ """Test deleting a server that does not exist."""
546+ mock_conn = mock_get_openstack_conn
547+ server_id = "non-existent-server-id"
548+
549+ # Mock the delete_server method to raise NotFoundException
550+ mock_conn .compute .delete_server .side_effect = NotFoundException ()
551+
552+ compute_tools = ComputeTools ()
553+
554+ with pytest .raises (NotFoundException ):
555+ compute_tools .delete_server (server_id )
556+
557+ mock_conn .compute .delete_server .assert_called_once_with (server_id )
0 commit comments