diff --git a/tests/cli-test-xml/compare/virt-install-many-devices.xml b/tests/cli-test-xml/compare/virt-install-many-devices.xml
index 42d5dcac..5bbe3c72 100644
--- a/tests/cli-test-xml/compare/virt-install-many-devices.xml
+++ b/tests/cli-test-xml/compare/virt-install-many-devices.xml
@@ -211,6 +211,11 @@
+
+
+
+
+
diff --git a/tests/clitest.py b/tests/clitest.py
index c3c27909..7ef324bc 100644
--- a/tests/clitest.py
+++ b/tests/clitest.py
@@ -602,6 +602,7 @@ vcpus.vcpu1.id=2,vcpus.vcpu1.enabled=yes
--disk path=/dev/disk-pool/diskvol7,device=lun,bus=scsi,reservations.managed=no,reservations.source.type=unix,reservations.source.path=/var/run/test/pr-helper0.sock,reservations.source.mode=client,\
source.reservations.managed=no,source.reservations.source.type=unix,source.reservations.source.path=/var/run/test/pr-helper0.sock,source.reservations.source.mode=client
--disk vol=iscsi-direct/unit:0:0:1
+--disk size=.0001,format=raw
--network user,mac=12:34:56:78:11:22,portgroup=foo,link_state=down,rom_bar=on,rom_file=/tmp/foo
--network bridge=foobar,model=virtio,driver_name=qemu,driver_queues=3,filterref=foobar,rom.bar=off,rom.file=/some/rom,source.portgroup=foo
@@ -1297,6 +1298,7 @@ c.add_valid("--original-xml " + _CLONE_UNMANAGED + " --file virt-install --file
c.add_valid("--original-xml " + _CLONE_UNMANAGED + " --file %(NEWCLONEIMG1)s --file %(NEWCLONEIMG2)s --file %(NEWCLONEIMG3)s --force-copy=hdc") # XML w/ disks, force copy a readonly target
c.add_valid("--original-xml " + _CLONE_UNMANAGED + " --file %(NEWCLONEIMG1)s --file %(NEWCLONEIMG2)s --force-copy=fda") # XML w/ disks, force copy a target with no media
c.add_valid("--original-xml " + _CLONE_MANAGED + " --file %(NEWIMG1)s") # XML w/ managed storage, specify managed path
+c.add_valid("--original-xml " + _CLONE_MANAGED + " --file %(NEWIMG1)s --reflink") # XML w/ managed storage, specify managed path
c.add_valid("--original-xml " + _CLONE_NOEXIST + " --file %(EXISTIMG1)s --preserve") # XML w/ managed storage, specify managed path across pools# Libvirt test driver doesn't support cloning across pools# XML w/ non-existent storage, with --preserve
c.add_valid("--connect %(URI-TEST-FULL)s -o test -n test-clone --auto-clone --replace") # Overwriting existing VM
c.add_invalid("-o test foobar") # Positional arguments error
diff --git a/tests/storage.py b/tests/storage.py
index 0611f2e5..be32ccce 100644
--- a/tests/storage.py
+++ b/tests/storage.py
@@ -186,6 +186,31 @@ class TestStorage(unittest.TestCase):
StoragePool.TYPE_GLUSTER, "pool-gluster")
removePool(poolobj)
+ def testMisc(self):
+ # Misc coverage testing
+ vol = StorageVolume(self.conn)
+ self.assertTrue(vol.is_size_conflict()[0] is False)
+
+ fullconn = utils.URIs.open_testdriver_cached()
+ glusterpool = fullconn.storagePoolLookupByName("gluster-pool")
+ diskpool = fullconn.storagePoolLookupByName("disk-pool")
+
+ glustervol = StorageVolume(fullconn)
+ glustervol.pool = glusterpool
+ self.assertTrue(glustervol.supports_format() is True)
+
+ diskvol = StorageVolume(fullconn)
+ diskvol.pool = diskpool
+ self.assertTrue(diskvol.supports_format() is False)
+
+ glusterpool.destroy()
+ StoragePool.ensure_pool_is_running(glusterpool)
+
+ # Check pool collision detection
+ self.assertEqual(
+ StoragePool.find_free_name(fullconn, "gluster-pool"),
+ "gluster-pool-1")
+
##############################
# Tests for pool-sources API #
diff --git a/virtinst/storage.py b/virtinst/storage.py
index ab692945..309afe7e 100644
--- a/virtinst/storage.py
+++ b/virtinst/storage.py
@@ -142,7 +142,7 @@ class StoragePool(_StorageObject):
except Exception as e:
if conn.support.is_error_nosupport(e):
return []
- raise
+ raise # pragma: no cover
ret = []
sources = _EnumerateSources(conn, xml)
@@ -188,7 +188,7 @@ class StoragePool(_StorageObject):
defpool.target_path = path
defpool.install(build=True, create=True, autostart=True)
return defpool
- except Exception as e:
+ except Exception as e: # pragma: no cover
raise RuntimeError(
_("Couldn't create default storage pool '%s': %s") %
(path, str(e)))
@@ -249,7 +249,7 @@ class StoragePool(_StorageObject):
except libvirt.libvirtError:
return
raise ValueError(_("Name '%s' already in use by another pool." %
- name))
+ name)) # pragma: no cover
def default_target_path(self):
if not self.supports_target_path():
@@ -441,29 +441,29 @@ class StoragePool(_StorageObject):
try:
pool = self.conn.storagePoolDefineXML(xml, 0)
- except Exception as e:
+ except Exception as e: # pragma: no cover
raise RuntimeError(_("Could not define storage pool: %s") % str(e))
errmsg = None
if build:
try:
pool.build(libvirt.VIR_STORAGE_POOL_BUILD_NEW)
- except Exception as e:
+ except Exception as e: # pragma: no cover
errmsg = _("Could not build storage pool: %s") % str(e)
if create and not errmsg:
try:
pool.create(0)
- except Exception as e:
+ except Exception as e: # pragma: no cover
errmsg = _("Could not start storage pool: %s") % str(e)
if autostart and not errmsg:
try:
pool.setAutostart(True)
- except Exception as e:
+ except Exception as e: # pragma: no cover
errmsg = _("Could not set pool autostart flag: %s") % str(e)
- if errmsg:
+ if errmsg: # pragma: no cover
# Try and clean up the leftover pool
try:
pool.undefine()
@@ -556,13 +556,6 @@ class StorageVolume(_StorageObject):
def _get_input_vol(self):
return self._input_vol
def _set_input_vol(self, vol):
- if vol is None:
- self._input_vol = None
- return
-
- if not isinstance(vol, libvirt.virStorageVol):
- raise ValueError(_("input_vol must be a virStorageVol"))
-
self._input_vol = vol
input_vol = property(_get_input_vol, _set_input_vol)
@@ -598,10 +591,10 @@ class StorageVolume(_StorageObject):
except libvirt.libvirtError:
return
raise ValueError(_("Name '%s' already in use by another volume." %
- name))
+ name)) # pragma: no cover
def _get_vol_type(self):
- if self.type:
+ if self.type: # pragma: no cover
if self.type == "file":
return self.TYPE_FILE
elif self.type == "block":
@@ -640,7 +633,7 @@ class StorageVolume(_StorageObject):
from . import diskbackend
vol, pool = diskbackend.manage_path(self.conn, self.backing_store)
- if not vol:
+ if not vol: # pragma: no cover
log.debug("Didn't find any volume for backing_store")
return None
@@ -651,13 +644,13 @@ class StorageVolume(_StorageObject):
log.debug("Found backing store volume XML:\n%s",
volxml.get_xml())
- if volxml.supports_format():
- log.debug("Returning format=%s", volxml.format)
- return volxml.format
+ if not volxml.supports_format(): # pragma: no cover
+ log.debug("backing_store volume doesn't appear to have "
+ "a file format we can specify, returning None")
+ return None
- log.debug("backing_store volume doesn't appear to have "
- "a file format we can specify, returning None")
- return None
+ log.debug("Returning format=%s", volxml.format)
+ return volxml.format
######################
@@ -718,7 +711,6 @@ class StorageVolume(_StorageObject):
createflags = 0
if (self.format == "qcow2" and
not self.backing_store and
- not self.conn.is_really_test() and
self.conn.support.pool_metadata_prealloc(self.pool)):
createflags |= libvirt.VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA
if self.capacity == self.allocation:
@@ -736,6 +728,11 @@ class StorageVolume(_StorageObject):
meter.start(size=self.capacity,
text=_("Allocating '%s'") % self.name)
+ if self.conn.is_really_test():
+ # Test suite doesn't support any flags, so reset them
+ createflags = 0
+ cloneflags = 0
+
if self.input_vol:
vol = self.pool.createXMLFrom(xml, self.input_vol, cloneflags)
else:
@@ -745,8 +742,7 @@ class StorageVolume(_StorageObject):
self._install_finished.set()
t.join()
meter.end(self.capacity)
- log.debug("Storage volume '%s' install complete.",
- self.name)
+ log.debug("Storage volume '%s' install complete.", self.name)
return vol
except Exception as e:
log.debug("Error creating storage volume", exc_info=True)
@@ -762,8 +758,8 @@ class StorageVolume(_StorageObject):
try:
if not vol:
vol = self.pool.storageVolLookupByName(self.name)
- vol.info()
- break
+ vol.info() # pragma: no cover
+ break # pragma: no cover
except Exception:
if self._install_finished.wait(.2):
break
@@ -772,7 +768,7 @@ class StorageVolume(_StorageObject):
log.debug("Couldn't lookup storage volume in prog thread.")
return
- while True:
+ while True: # pragma: no cover
ignore, ignore, alloc = vol.info()
meter.update(alloc)
if self._install_finished.wait(1):