Skip to main content
Glama
test_vm_lifecycle.py3.77 kB
import pytest from unittest.mock import patch, MagicMock from kvm_mcp_server import create_vm, start_vm, stop_vm, reboot_vm @pytest.mark.asyncio async def test_create_vm_success(): """Test successful VM creation""" # Mock libvirt connection and domain mock_conn = MagicMock() mock_domain = MagicMock() mock_conn.lookupByName.return_value = None mock_conn.defineXML.return_value = mock_domain mock_domain.create.return_value = 0 with patch('libvirt.open', return_value=mock_conn), \ patch('subprocess.run', return_value=MagicMock(returncode=0)): result = await create_vm("create_vm", { "name": "test-vm", "memory": 2048, "vcpus": 2, "disk_size": 20, "master_image": "/path/to/image.qcow2" }) assert result["status"] == "success" assert "test-vm" in result["message"] @pytest.mark.asyncio async def test_create_vm_already_exists(): """Test VM creation when VM already exists""" # Mock libvirt connection and domain mock_conn = MagicMock() mock_domain = MagicMock() mock_conn.lookupByName.return_value = mock_domain with patch('libvirt.open', return_value=mock_conn): result = await create_vm("create_vm", { "name": "test-vm", "memory": 2048, "vcpus": 2 }) assert result["status"] == "error" assert "already exists" in result["message"] @pytest.mark.asyncio async def test_start_vm_success(): """Test successful VM start""" # Mock libvirt connection and domain mock_conn = MagicMock() mock_domain = MagicMock() mock_conn.lookupByName.return_value = mock_domain mock_domain.create.return_value = 0 with patch('libvirt.open', return_value=mock_conn): result = await start_vm("start_vm", {"name": "test-vm"}) assert result["status"] == "success" assert "started successfully" in result["message"] @pytest.mark.asyncio async def test_stop_vm_success(): """Test successful VM stop""" # Mock libvirt connection and domain mock_conn = MagicMock() mock_domain = MagicMock() mock_conn.lookupByName.return_value = mock_domain mock_domain.shutdown.return_value = 0 with patch('libvirt.open', return_value=mock_conn): result = await stop_vm("stop_vm", {"name": "test-vm"}) assert result["status"] == "success" assert "stopped successfully" in result["message"] @pytest.mark.asyncio async def test_reboot_vm_success(): """Test successful VM reboot""" # Mock libvirt connection and domain mock_conn = MagicMock() mock_domain = MagicMock() mock_conn.lookupByName.return_value = mock_domain mock_domain.reboot.return_value = 0 with patch('libvirt.open', return_value=mock_conn): result = await reboot_vm("reboot_vm", {"name": "test-vm"}) assert result["status"] == "success" assert "rebooted successfully" in result["message"] @pytest.mark.asyncio async def test_vm_operations_invalid_name(): """Test VM operations with invalid name""" for operation in [start_vm, stop_vm, reboot_vm]: result = await operation("operation", {}) assert result["status"] == "error" assert "name not provided" in result["message"] @pytest.mark.asyncio async def test_vm_operations_connection_error(): """Test VM operations with connection error""" with patch('libvirt.open', return_value=None): for operation in [start_vm, stop_vm, reboot_vm]: result = await operation("operation", {"name": "test-vm"}) assert result["status"] == "error" assert "Failed to connect" in result["message"]

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/steveydevey/kvm-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server