
From: Daniel Henrique Barboza <dhbarboza82@gmail.com> Three new unit tests were added: - check that the vm template creates always the disk format set by the user, doesn't matter the default value from template.conf - check that the vm template creates a disk with format set by the default valuein the disk.0 entry of template.conf, if the user didn't provide any other. - check that the vm template creates a disk with format 'qcow2' if the user didn't provide any other and there is no default value in template.conf Signed-off-by: Daniel Henrique Barboza <dhbarboza82@gmail.com> --- tests/test_model.py | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 105 insertions(+), 1 deletion(-) diff --git a/tests/test_model.py b/tests/test_model.py index 896e29b..ef8bb25 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -33,14 +33,16 @@ import kimchi.objectstore import utils from kimchi import netinfo from kimchi.basemodel import Singleton -from kimchi.config import config +from kimchi.config import config, paths from kimchi.exception import InvalidOperation from kimchi.exception import InvalidParameter, NotFoundError, OperationFailed from kimchi.osinfo import get_template_default from kimchi.model import model from kimchi.model.libvirtconnection import LibvirtConnection +from kimchi.model.vms import VMModel from kimchi.rollbackcontext import RollbackContext from kimchi.utils import add_task +from kimchi.xmlutils.utils import xpath_get_text invalid_repository_urls = ['www.fedora.org', # missing protocol @@ -600,6 +602,108 @@ class ModelTests(unittest.TestCase): self.assertTrue(os.access(disk_path, os.F_OK)) self.assertFalse(os.access(disk_path, os.F_OK)) + def _create_template_conf_with_disk_format(self, vol_format): + if vol_format is None: + conf_file_data = "[main]\n\n[storage]\n\n[[disk.0]]\n" \ + "#format = \n\n[graphics]\n\n[processor]\n" + else: + conf_file_data = "[main]\n\n[storage]\n\n[[disk.0]]\n" \ + "format = %s\n\n[graphics]\n\n[processor]\n"\ + % vol_format + + config_file = os.path.join(paths.conf_dir, 'template.conf') + config_bkp_file = \ + os.path.join(paths.conf_dir, 'template.conf-unit_test_bkp') + + os.rename(config_file, config_bkp_file) + + with open(config_file, 'w') as f: + f.write(conf_file_data) + + def _restore_template_conf_file(self): + config_file = os.path.join(paths.conf_dir, 'template.conf') + config_bkp_file = \ + os.path.join(paths.conf_dir, 'template.conf-unit_test_bkp') + os.rename(config_bkp_file, config_file) + + def _get_disk_format_from_vm(self, vm, conn): + dom = VMModel.get_vm(vm, conn) + xml = dom.XMLDesc(0) + xpath = "/domain/devices/disk[@device='disk']/driver/@type" + return xpath_get_text(xml, xpath)[0] + + @unittest.skipUnless(utils.running_as_root(), 'Must be run as root') + def test_template_get_default_vol_format_from_conf(self): + inst = model.Model(objstore_loc=self.tmp_store) + + with RollbackContext() as rollback: + self._create_template_conf_with_disk_format('vmdk') + rollback.prependDefer(self._restore_template_conf_file) + + params = {'name': 'test', 'disks': [{'size': 1}], + 'cdrom': UBUNTU_ISO} + inst.templates_create(params) + rollback.prependDefer(inst.template_delete, 'test') + + params = {'name': 'test-vm-1', 'template': '/templates/test'} + task = inst.vms_create(params) + inst.task_wait(task['id']) + rollback.prependDefer(inst.vm_delete, 'test-vm-1') + + created_disk_format = self._get_disk_format_from_vm( + 'test-vm-1', inst.conn + ) + self.assertEqual(created_disk_format, 'vmdk') + + @unittest.skipUnless(utils.running_as_root(), 'Must be run as root') + def test_template_creates_user_defined_vol_format_instead_default(self): + inst = model.Model(objstore_loc=self.tmp_store) + + default_vol = 'vmdk' + user_vol = 'raw' + with RollbackContext() as rollback: + self._create_template_conf_with_disk_format(default_vol) + rollback.prependDefer(self._restore_template_conf_file) + + params = {'name': 'test', + 'disks': [{'size': 1, 'format': user_vol}], + 'cdrom': UBUNTU_ISO} + inst.templates_create(params) + rollback.prependDefer(inst.template_delete, 'test') + + params = {'name': 'test-vm-1', 'template': '/templates/test'} + task = inst.vms_create(params) + inst.task_wait(task['id']) + rollback.prependDefer(inst.vm_delete, 'test-vm-1') + + created_disk_format = self._get_disk_format_from_vm( + 'test-vm-1', inst.conn + ) + self.assertEqual(created_disk_format, user_vol) + + @unittest.skipUnless(utils.running_as_root(), 'Must be run as root') + def test_template_uses_qcow2_format_if_no_user_or_default_defined(self): + inst = model.Model(objstore_loc=self.tmp_store) + + with RollbackContext() as rollback: + self._create_template_conf_with_disk_format(None) + rollback.prependDefer(self._restore_template_conf_file) + + params = {'name': 'test', + 'disks': [{'size': 1}], 'cdrom': UBUNTU_ISO} + inst.templates_create(params) + rollback.prependDefer(inst.template_delete, 'test') + + params = {'name': 'test-vm-1', 'template': '/templates/test'} + task = inst.vms_create(params) + inst.task_wait(task['id']) + rollback.prependDefer(inst.vm_delete, 'test-vm-1') + + created_disk_format = self._get_disk_format_from_vm( + 'test-vm-1', inst.conn + ) + self.assertEqual(created_disk_format, 'qcow2') + def test_vm_memory_hotplug(self): config.set("authentication", "method", "pam") inst = model.Model(None, objstore_loc=self.tmp_store) -- 2.4.3