The former code was running the FeatureTests with the system libvirt
connection, so if a developer used Model() with a different
libvirt URI the feature tests would report a false positive result.
To avoid this problem share the libvirt connection used by Model() with
FeatureTests.
Signed-off-by: Aline Manera <alinefm(a)linux.vnet.ibm.com>
---
src/kimchi/featuretests.py | 17 ++++-------------
src/kimchi/model/config.py | 10 ++++++----
2 files changed, 10 insertions(+), 17 deletions(-)
diff --git a/src/kimchi/featuretests.py b/src/kimchi/featuretests.py
index f1eb8ae..a8613aa 100644
--- a/src/kimchi/featuretests.py
+++ b/src/kimchi/featuretests.py
@@ -100,12 +100,10 @@ class FeatureTests(object):
libvirt.registerErrorHandler(f=None, ctx=None)
@staticmethod
- def libvirt_supports_iso_stream(protocol):
+ def libvirt_supports_iso_stream(conn, protocol):
xml = ISO_STREAM_XML % {'protocol': protocol}
- conn = None
try:
FeatureTests.disable_libvirt_error_logging()
- conn = libvirt.open(None)
dom = conn.defineXML(xml)
dom.undefine()
return True
@@ -114,16 +112,14 @@ class FeatureTests(object):
return False
finally:
FeatureTests.enable_libvirt_error_logging()
- conn is None or conn.close()
@staticmethod
- def libvirt_support_nfs_probe():
+ def libvirt_support_nfs_probe(conn):
def _get_xml():
obj = E.source(E.host(name='localhost'),
E.format(type='nfs'))
xml = ET.tostring(obj)
return xml
try:
- conn = libvirt.open(None)
FeatureTests.disable_libvirt_error_logging()
conn.findStoragePoolSources('netfs', _get_xml(), 0)
except libvirt.libvirtError as e:
@@ -134,7 +130,6 @@ class FeatureTests(object):
return False
finally:
FeatureTests.enable_libvirt_error_logging()
- conn is None or conn.close()
return True
@@ -172,10 +167,9 @@ class FeatureTests(object):
return True
@staticmethod
- def libvirt_support_fc_host():
+ def libvirt_support_fc_host(conn):
try:
FeatureTests.disable_libvirt_error_logging()
- conn = libvirt.open(None)
pool = None
pool = conn.storagePoolDefineXML(SCSI_FC_XML, 0)
except libvirt.libvirtError as e:
@@ -185,18 +179,15 @@ class FeatureTests(object):
finally:
FeatureTests.enable_libvirt_error_logging()
pool is None or pool.undefine()
- conn is None or conn.close()
return True
@staticmethod
- def has_metadata_support():
+ def has_metadata_support(conn):
KIMCHI_META_URL = "https://github.com/kimchi-project/kimchi/"
KIMCHI_NAMESPACE = "kimchi"
with RollbackContext() as rollback:
FeatureTests.disable_libvirt_error_logging()
rollback.prependDefer(FeatureTests.enable_libvirt_error_logging)
- conn = libvirt.open(None)
- rollback.prependDefer(conn.close)
dom = conn.defineXML(SIMPLE_VM_XML)
rollback.prependDefer(dom.undefine)
try:
diff --git a/src/kimchi/model/config.py b/src/kimchi/model/config.py
index 9ffc53e..73ca9c0 100644
--- a/src/kimchi/model/config.py
+++ b/src/kimchi/model/config.py
@@ -48,6 +48,7 @@ class CapabilitiesModel(object):
__metaclass__ = Singleton
def __init__(self, **kargs):
+ self.conn = kargs['conn']
self.qemu_stream = False
self.qemu_stream_dns = False
self.libvirt_stream_protocols = []
@@ -62,16 +63,17 @@ class CapabilitiesModel(object):
def _set_capabilities(self):
kimchi_log.info("*** Running feature tests ***")
+ conn = self.conn.get()
self.qemu_stream = FeatureTests.qemu_supports_iso_stream()
self.qemu_stream_dns = FeatureTests.qemu_iso_stream_dns()
- self.nfs_target_probe = FeatureTests.libvirt_support_nfs_probe()
- self.fc_host_support = FeatureTests.libvirt_support_fc_host()
- self.metadata_support = FeatureTests.has_metadata_support()
+ self.nfs_target_probe = FeatureTests.libvirt_support_nfs_probe(conn)
+ self.fc_host_support = FeatureTests.libvirt_support_fc_host(conn)
+ self.metadata_support = FeatureTests.has_metadata_support(conn)
self.kernel_vfio = FeatureTests.kernel_support_vfio()
self.libvirt_stream_protocols = []
for p in ['http', 'https', 'ftp', 'ftps',
'tftp']:
- if FeatureTests.libvirt_supports_iso_stream(p):
+ if FeatureTests.libvirt_supports_iso_stream(conn, p):
self.libvirt_stream_protocols.append(p)
kimchi_log.info("*** Feature tests completed ***")
--
1.9.3