diff options
author | Cole Robinson <crobinso@redhat.com> | 2018-01-21 14:13:42 -0500 |
---|---|---|
committer | Cole Robinson <crobinso@redhat.com> | 2018-01-21 14:42:44 -0500 |
commit | 4a4207189f1acdb77fb959620ec33459805dfc3b (patch) | |
tree | 0131505fd4cb885ce2baab92a528824bf8ad333b | |
parent | ab36d429d6d5335236b956a875ddbb7c6d674c20 (diff) | |
download | virt-manager-4a4207189f1acdb77fb959620ec33459805dfc3b.tar.gz |
uitests: Add a live hotplug and media change test
-rw-r--r-- | tests/uitests/console.py | 88 | ||||
-rw-r--r-- | tests/uitests/xml/uitests-hotplug.xml | 17 |
2 files changed, 99 insertions, 6 deletions
diff --git a/tests/uitests/console.py b/tests/uitests/console.py index eede84a9..26bcbbbb 100644 --- a/tests/uitests/console.py +++ b/tests/uitests/console.py @@ -1,3 +1,4 @@ +import logging import os import libvirt @@ -11,18 +12,25 @@ def _vm_wrapper(vmname, uri="qemu:///system"): """ def wrap1(fn): def wrapper(self, *args, **kwargs): - dom = None + xmlfile = "%s/xml/%s.xml" % (os.path.dirname(__file__), vmname) + conn = libvirt.open(uri) + dom = conn.defineXML(open(xmlfile).read()) try: - xmlfile = "%s/xml/%s.xml" % (os.path.dirname(__file__), vmname) - conn = libvirt.open(uri) - dom = conn.createXML(open(xmlfile).read(), 0) + dom.create() self.app.uri = uri + self.conn = conn self.app.open(extra_opts=["--show-domain-console", vmname]) fn(self, *args, **kwargs) finally: - self.app.stop() - if dom: + try: + self.app.stop() + except Exception: + pass + try: + dom.undefine() dom.destroy() + except Exception: + pass return wrapper return wrap1 @@ -32,6 +40,8 @@ class Console(uiutils.UITestCase): Test live console connections with stub VMs """ + conn = None + ############## # Test cases # ############## @@ -150,3 +160,69 @@ class Console(uiutils.UITestCase): win.find("Virtual Machine", "menu").click() win.find("Redirect USB", "menu item").click() self.app.root.find("Select USB devices for redirection", "label") + + + def _testLiveHotplug(self, fname): + win = self.app.topwin + win.find("Details", "radio button").click() + + # Add a scsi disk, importing the passed path + win.find("add-hardware", "push button").click() + addhw = self.app.root.find("Add New Virtual Hardware", "frame") + addhw.find("Storage", "table cell").click() + tab = addhw.find("storage-tab", None) + uiutils.check_in_loop(lambda: tab.showing) + tab.find("Select or create", "radio button").click() + tab.find("storage-entry").text = fname + tab.find("Bus type:", "combo box").click() + tab.find("SCSI", "menu item").click() + addhw.find("Finish", "push button").click() + + # Hot unplug the disk + win.find("SCSI Disk 1", "table cell").click() + tab = win.find("disk-tab", None) + uiutils.check_in_loop(lambda: tab.showing) + self.assertTrue(tab.find("Storage format:", "text").text == "qcow2") + win.find("config-remove").click() + alert = self.app.root.find("vmm dialog", "alert") + alert.find_fuzzy("Are you sure you want to remove", "label") + alert.find("Yes", "push button").click() + + # Change CDROM + win.find("IDE CDROM 1", "table cell").click() + tab = win.find("disk-tab", None) + uiutils.check_in_loop(lambda: tab.showing) + tab.find("Connect", "push button").click() + cm = self.app.root.find("Choose Media", "dialog") + cm.find("Image Location", "radio button").click() + cm.find("Location:", "text").text = fname + cm.find("OK", "push button").click() + self.assertTrue(tab.find("disk-source-path").text == fname) + tab.find("Disconnect", "push button").click() + self.assertTrue("-" in tab.find("disk-source-path").text) + + + @_vm_wrapper("uitests-hotplug") + def testLiveHotplug(self): + """ + Live test for basic hotplugging and media change, as well as + testing our auto-poolify magic + """ + + import shutil + import tempfile + dname = tempfile.mkdtemp(prefix="uitests-tmp") + try: + fname = os.path.join(dname, "test.img") + os.system("qemu-img create -f qcow2 %s 1M > /dev/null" % fname) + os.system("chmod -R 777 %s" % dname) + self._testLiveHotplug(fname) + finally: + shutil.rmtree(dname) + poolname = os.path.basename(dname) + try: + pool = self.conn.storagePoolLookupByName(poolname) + pool.destroy() + pool.undefine() + except Exception: + logging.debug("Error cleaning up pool", exc_info=True) diff --git a/tests/uitests/xml/uitests-hotplug.xml b/tests/uitests/xml/uitests-hotplug.xml new file mode 100644 index 00000000..d40ac4f0 --- /dev/null +++ b/tests/uitests/xml/uitests-hotplug.xml @@ -0,0 +1,17 @@ +<domain type="kvm"> + <name>uitests-hotplug</name> + <memory>65536</memory> + <currentMemory>65536</currentMemory> + <vcpu>1</vcpu> + <os> + <type arch="x86_64">hvm</type> + <boot dev="hd"/> + </os> + <devices> + <disk type='file' device='cdrom'> + <target dev='hda' bus='ide'/> + </disk> + <controller type="scsi" model="virtio-scsi"/> + </devices> +</domain> + |