33from openstack_mcp_server .tools .compute_tools import ComputeTools
44from openstack_mcp_server .tools .response .compute import (
55 Flavor ,
6- Image ,
76 Server ,
7+ ServerFlavor ,
8+ ServerImage ,
89 ServerIp ,
910 ServerSecurityGroup ,
1011)
@@ -79,8 +80,8 @@ def test_get_servers_success(self, mock_get_openstack_conn):
7980 id = "434eb822-3fbd-44a1-a000-3b511ac9b516" ,
8081 name = "web-server-01" ,
8182 status = "ACTIVE" ,
82- flavor = Flavor (id = None , name = "m1.tiny" ),
83- image = Image (id = "de527f30-d078-41f4-8f18-a23bf2d39366" ),
83+ flavor = ServerFlavor (id = None , name = "m1.tiny" ),
84+ image = ServerImage (id = "de527f30-d078-41f4-8f18-a23bf2d39366" ),
8485 addresses = {
8586 "private" : [
8687 ServerIp (addr = "192.168.1.10" , version = 4 , type = "fixed" ),
@@ -93,8 +94,8 @@ def test_get_servers_success(self, mock_get_openstack_conn):
9394 id = "ffd071fe-1334-45f6-8894-5b0bcac262a6" ,
9495 name = "db-server-01" ,
9596 status = "SHUTOFF" ,
96- flavor = Flavor (id = None , name = "m1.small" ),
97- image = Image (id = "3d897e0e-4117-46bb-ae77-e734bb16a1ca" ),
97+ flavor = ServerFlavor (id = None , name = "m1.small" ),
98+ image = ServerImage (id = "3d897e0e-4117-46bb-ae77-e734bb16a1ca" ),
9899 addresses = {
99100 "net1" : [
100101 ServerIp (addr = "192.168.1.11" , version = 4 , type = "fixed" ),
@@ -258,9 +259,10 @@ def test_register_tools(self):
258259 call (compute_tools .get_servers ),
259260 call (compute_tools .get_server ),
260261 call (compute_tools .create_server ),
262+ call (compute_tools .get_flavors ),
261263 ],
262264 )
263- assert mock_tool_decorator .call_count == 3
265+ assert mock_tool_decorator .call_count == 4
264266
265267 def test_compute_tools_instantiation (self ):
266268 """Test ComputeTools can be instantiated."""
@@ -279,3 +281,67 @@ def test_get_servers_docstring(self):
279281 assert docstring is not None
280282 assert "Get the list of Compute servers" in docstring
281283 assert "return" in docstring .lower () or "Return" in docstring
284+
285+ def test_get_flavors_success (self , mock_get_openstack_conn ):
286+ """Test getting flavors successfully."""
287+ mock_conn = mock_get_openstack_conn
288+
289+ # Create mock flavor objects
290+ mock_flavor1 = {
291+ "id" : "1" ,
292+ "name" : "m1.tiny" ,
293+ "vcpus" : 1 ,
294+ "ram" : 512 ,
295+ "disk" : 1 ,
296+ "swap" : 0 ,
297+ "os-flavor-access:is_public" : True ,
298+ }
299+
300+ mock_flavor2 = {
301+ "id" : "2" ,
302+ "name" : "m1.small" ,
303+ "vcpus" : 2 ,
304+ "ram" : 2048 ,
305+ "disk" : 20 ,
306+ "swap" : 0 ,
307+ "os-flavor-access:is_public" : True ,
308+ }
309+
310+ mock_conn .compute .flavors .return_value = [mock_flavor1 , mock_flavor2 ]
311+
312+ compute_tools = ComputeTools ()
313+ result = compute_tools .get_flavors ()
314+
315+ expected_output = [
316+ Flavor (
317+ id = "1" ,
318+ name = "m1.tiny" ,
319+ vcpus = 1 ,
320+ ram = 512 ,
321+ disk = 1 ,
322+ swap = 0 ,
323+ is_public = True ,
324+ ),
325+ Flavor (
326+ id = "2" ,
327+ name = "m1.small" ,
328+ vcpus = 2 ,
329+ ram = 2048 ,
330+ disk = 20 ,
331+ swap = 0 ,
332+ is_public = True ,
333+ ),
334+ ]
335+ assert result == expected_output
336+ mock_conn .compute .flavors .assert_called_once ()
337+
338+ def test_get_flavors_empty_list (self , mock_get_openstack_conn ):
339+ """Test getting flavors when no flavors exist."""
340+ mock_conn = mock_get_openstack_conn
341+ mock_conn .compute .flavors .return_value = []
342+
343+ compute_tools = ComputeTools ()
344+ result = compute_tools .get_flavors ()
345+
346+ assert result == []
347+ mock_conn .compute .flavors .assert_called_once ()
0 commit comments