Add unit test file test_libvirt_utils.py 39/44639/3
authorzhongjun <zhong.jun@zte.com.cn>
Tue, 10 Oct 2017 11:01:13 +0000 (19:01 +0800)
committerzhongjun <zhong.jun@zte.com.cn>
Wed, 11 Oct 2017 01:52:43 +0000 (09:52 +0800)
Add the unit test file test_libvirt_utils.py

Change-Id: Id5c44bd3683183367439486fbea8dba03ccb8bb7
Signed-off-by: zhongjun <zhong.jun@zte.com.cn>
tests/unit/test_libvirt_utils.py [new file with mode: 0644]

diff --git a/tests/unit/test_libvirt_utils.py b/tests/unit/test_libvirt_utils.py
new file mode 100644 (file)
index 0000000..1944d74
--- /dev/null
@@ -0,0 +1,157 @@
+##############################################################################
+# Copyright (c) 2017 ZTE Corp and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import os
+import sys
+import pytest
+import xml.etree.ElementTree as ET
+from deploy.utils import WORKSPACE
+import mock
+sys.modules['libvirt'] = mock.Mock()
+
+from deploy import libvirt_utils    # noqa: ignore=E402
+from deploy.libvirt_utils import (
+    get_nets_name,
+    modify_vm_boot_order,
+    create_virtual_disk,
+    modify_vm_name,
+    modify_vm_disk_file,
+    modify_vm_bridge,
+    create_vm,
+    reboot_vm,
+    get_disk_file,
+#    delete_vm_and_disk,
+    create_virtual_network,
+#    delete_virtual_network,
+#    get_vm_mac_addresses
+)   # noqa: ignore=E402
+
+
+@pytest.mark.parametrize('template_name, exp', [
+    ('templates/physical_environment/vms/daisy.xml', []),
+    ('templates/virtual_environment/vms/daisy.xml', ['daisy1'])])
+def test_get_nets_name(template_name, exp):
+    template = os.path.join(WORKSPACE, template_name)
+    tree = ET.ElementTree(file=template)
+    root = tree.getroot()
+    ret = get_nets_name(root)
+    assert ret == exp
+
+
+def test_modify_vm_boot_order():
+    template = os.path.join(WORKSPACE, 'templates/virtual_environment/vms/daisy.xml')
+    tree = ET.ElementTree(file=template)
+    root = tree.getroot()
+    boot_devs = ['hd_test1', 'hd_test2']
+    modify_vm_boot_order(root, boot_devs)
+    os_elem = root.find('os')
+    boots = os_elem.findall('boot')
+    assert len(boots) == len(boot_devs)
+    for i in range(len(boots)):
+        assert boots[i].attrib['dev'] == boot_devs[i]
+
+
+def test_modify_vm_name():
+    template = os.path.join(WORKSPACE, 'templates/physical_environment/vms/daisy.xml')
+    tree = ET.ElementTree(file=template)
+    root = tree.getroot()
+    vm_name = 'test_vm'
+    modify_vm_name(root, vm_name)
+    name_elem = root.find('./name')
+    assert name_elem.text == vm_name
+
+
+def test_modify_vm_disk_file():
+    template = os.path.join(WORKSPACE, 'templates/physical_environment/vms/daisy.xml')
+    tree = ET.ElementTree(file=template)
+    root = tree.getroot()
+    disk_path1 = os.path.join('/home/qemu/vms', 'daisy_test1.qcow2')
+    disk_path2 = os.path.join('/home/qemu/vms', 'daisy_test2.qcow2')
+    disks_path = [disk_path1, disk_path2]
+    modify_vm_disk_file(root, disks_path)
+    devices = root.find('./devices')
+    disks = [disk for disk in devices.findall('disk') if disk.attrib['device'] == 'disk']
+    assert len(disks) == len(disks_path)
+    for i in range(len(disks)):
+        assert disks[i].attrib['type'] == 'file'
+        driver = disks[i].find('driver')
+        assert driver.attrib['name'] == 'qemu' and driver.attrib['type'] == 'qcow2'
+        target = disks[i].find('target')
+        assert target.attrib['bus'] == 'ide'
+        source = disks[i].find('source')
+        assert source.attrib['file'] == disks_path[i]
+
+
+def test_modify_vm_bridge():
+    template = os.path.join(WORKSPACE, 'templates/virtual_environment/vms/daisy.xml')
+    tree = ET.ElementTree(file=template)
+    root = tree.getroot()
+    bridge = 'daisy_test'
+    modify_vm_bridge(root, bridge)
+    devices = root.find('./devices')
+    is_match = False
+    for interface in devices.findall('interface'):
+        source = interface.find('source')
+        if interface.attrib.get('type', None) == 'bridge' \
+                and source is not None \
+                and source.attrib.get('bridge', None) == bridge:
+            is_match = True
+            break
+    assert is_match
+
+
+@pytest.mark.parametrize('status', [
+    (0),
+    (1)])
+@mock.patch('deploy.libvirt_utils.commands.getstatusoutput')
+@mock.patch('deploy.libvirt_utils.err_exit')
+def test_create_virtual_disk(mock_err_exit, mock_getstatusoutput, status):
+    mock_getstatusoutput.return_value = (status, 'command_output')
+    disk_file = '/tmp/vms/daisy.qcow2'
+    size = 110
+    create_virtual_disk(disk_file, size)
+    mock_getstatusoutput.assert_called_once()
+    if status:
+        mock_err_exit.assert_called_once()
+    else:
+        mock_err_exit.assert_not_called()
+
+
+@pytest.mark.parametrize('name, disk_name, physical_bridge', [
+    ('dasiy_test_vm', 'daisy_test.qcow2', 'daisy_test_br'),
+    (None, None, None)])
+def test_create_vm(name, disk_name, physical_bridge):
+    template = os.path.join(WORKSPACE, 'templates/physical_environment/vms/daisy.xml')
+    if disk_name:
+        disk_path = os.path.join('/home/qemu/vms', 'daisy_test.qcow2')
+        disks_path = [disk_path]
+    else:
+        disks_path = None
+    ret = create_vm(template, name=name, disks=disks_path, physical_bridge=physical_bridge)
+    assert ret is not None
+
+
+@pytest.mark.parametrize('vm_name, boot_devs', [
+    ('dasiy_test_vm', None)])
+def test_reboot_vm(vm_name, boot_devs):
+    reboot_vm(vm_name, boot_devs=boot_devs)
+
+
+def test_get_disk_file():
+    template = os.path.join(WORKSPACE, 'templates/physical_environment/vms/daisy.xml')
+    tree = ET.ElementTree(file=template)
+    root = tree.getroot()
+    exp_disks = ['/tmp/workdir/daisy/centos7.qcow2']
+    ret = get_disk_file(root)
+    assert ret == exp_disks
+
+
+def test_create_virtual_network():
+    template = os.path.join(WORKSPACE, 'templates/physical_environment/networks/daisy.xml')
+    ret = create_virtual_network(template)
+    assert ret is not None