mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-01-11 05:17:59 +03:00
a1d1b4d5a0
On first run of the app we will check to see if libvirt and qemu are installed, and if not, offer to install them. In theory anyways. In practice this stuff breaks repeatedly and is a pain to test because every desktop has their own API provider with subtly different behavior. My last round of testing about 12 months ago: apper on KDE was completely busted and apparently unmaintained (although that may have changed lately), gnome-software is the latest packagekit provider on gnome and completely changes the semantics of the API compared to old style gnome-packagekit that break a lot of virt-manager assumptions. So I'm tired of it and want it all gone. Still use systemd to try and check if libvirtd is running, and provide error messages at startup to guide people.
181 lines
6.6 KiB
Python
181 lines
6.6 KiB
Python
# This work is licensed under the GNU GPLv2 or later.
|
|
# See the COPYING file in the top-level directory.
|
|
|
|
import dogtail.rawinput
|
|
|
|
from tests.uitests import utils as uiutils
|
|
|
|
|
|
class Manager(uiutils.UITestCase):
|
|
"""
|
|
UI tests for manager window, and basic VM lifecycle stuff
|
|
"""
|
|
|
|
##############
|
|
# Test cases #
|
|
##############
|
|
|
|
def _testVMLifecycle(self):
|
|
"""
|
|
Basic VM lifecycle test, shared between standard and --test-no-events
|
|
testing
|
|
"""
|
|
manager = self.app.topwin
|
|
shutdown = manager.find("Shut Down", "push button")
|
|
pause = manager.find("Pause", "toggle button")
|
|
run = manager.find("Run", "push button")
|
|
force = manager.find("Force Off", "menu item")
|
|
smenu = manager.find("Menu", "toggle button")
|
|
save = manager.find("Save", "menu item")
|
|
|
|
c = manager.find("test-many-devices", "table cell")
|
|
c.click()
|
|
smenu.click()
|
|
force.click()
|
|
alert = self.app.root.find("vmm dialog", "alert")
|
|
alert.find("Are you sure you want", "label")
|
|
alert.find("Yes", "push button").click()
|
|
uiutils.check_in_loop(lambda: run.sensitive, timeout=5)
|
|
|
|
run.click()
|
|
uiutils.check_in_loop(lambda: not run.sensitive, timeout=5)
|
|
pause.click()
|
|
uiutils.check_in_loop(lambda: pause.checked, timeout=5)
|
|
smenu.click()
|
|
save.click()
|
|
uiutils.check_in_loop(lambda: run.sensitive, timeout=5)
|
|
self.assertTrue("Saved" in c.text)
|
|
run.click()
|
|
uiutils.check_in_loop(lambda: shutdown.sensitive, timeout=5)
|
|
|
|
def testVMLifecycle(self):
|
|
self._testVMLifecycle()
|
|
|
|
def testVMNoEventsLifecycle(self):
|
|
self.app.open(extra_opts=["--test-no-events"])
|
|
|
|
# Change preferences timeout to 1 second
|
|
self.app.root.find("Edit", "menu").click()
|
|
self.app.root.find("Preferences", "menu item").click()
|
|
win = self.app.root.find_fuzzy("Preferences", "frame")
|
|
win.find("Polling", "page tab").click()
|
|
win.find("cpu-poll").text = "1"
|
|
win.find("Close", "push button").click()
|
|
|
|
self._testVMLifecycle()
|
|
|
|
def testManagerColumns(self):
|
|
# Enable all stat options
|
|
self.app.root.find("Edit", "menu").click()
|
|
self.app.root.find("Preferences", "menu item").click()
|
|
win = self.app.root.find_fuzzy("Preferences", "frame")
|
|
win.find("Polling", "page tab").click()
|
|
win.find_fuzzy("Poll Disk", "check").click()
|
|
win.find_fuzzy("Poll Network", "check").click()
|
|
win.find_fuzzy("Poll Memory", "check").click()
|
|
win.find("Close", "push button").click()
|
|
|
|
manager = self.app.topwin
|
|
manager.find("View", "menu").click()
|
|
manager.find("Graph", "menu").point()
|
|
manager.find("Host CPU", "check menu item").click()
|
|
manager.find("View", "menu").click()
|
|
manager.find("Graph", "menu").point()
|
|
manager.find("Memory Usage", "check menu item").click()
|
|
manager.find("View", "menu").click()
|
|
manager.find("Graph", "menu").point()
|
|
manager.find("Disk I/O", "check menu item").click()
|
|
manager.find("View", "menu").click()
|
|
manager.find("Graph", "menu").point()
|
|
manager.find("Network I/O", "check menu item").click()
|
|
|
|
# Verify columns showed up
|
|
manager.find("Name", "table column header")
|
|
manager.find("CPU usage", "table column header")
|
|
manager.find("Host CPU usage", "table column header")
|
|
manager.find("Memory usage", "table column header")
|
|
manager.find("Disk I/O", "table column header")
|
|
manager.find("Network I/O", "table column header")
|
|
|
|
def testManagerWindowCleanup(self):
|
|
"""
|
|
Open migrate, clone, delete, newvm, details, host windows, close the
|
|
connection, make sure they all disappear
|
|
"""
|
|
def _drag(win):
|
|
"""
|
|
Drag a window so it's not obscuring the manager window
|
|
"""
|
|
win.click()
|
|
clickX = win.position[0] + win.size[0] / 2
|
|
clickY = win.position[1] + 10
|
|
dogtail.rawinput.drag((clickX, clickY), (1000, 1000))
|
|
|
|
manager = self.app.topwin
|
|
|
|
# Open migrate dialog
|
|
c = manager.find("test-many-devices", "table cell")
|
|
c.click(button=3)
|
|
self.app.root.find("Migrate...", "menu item").click()
|
|
migrate = self.app.root.find("Migrate the virtual machine", "frame")
|
|
_drag(migrate)
|
|
|
|
# Open clone dialog
|
|
c = manager.find("test-clone", "table cell")
|
|
c.click(button=3)
|
|
self.app.root.find("Clone...", "menu item").click()
|
|
clone = self.app.root.find("Clone Virtual Machine", "frame")
|
|
_drag(clone)
|
|
|
|
# Open delete dialog
|
|
c.click()
|
|
manager.find("Edit", "menu").click()
|
|
manager.find("Delete", "menu item").click()
|
|
delete = self.app.root.find_fuzzy("Delete", "frame")
|
|
_drag(delete)
|
|
|
|
# Open NewVM
|
|
self.app.root.find("New", "push button").click()
|
|
create = self.app.root.find("New VM", "frame")
|
|
_drag(create)
|
|
|
|
# Open host
|
|
host = self._open_host_window("Virtual Networks")
|
|
_drag(host)
|
|
|
|
# Open details
|
|
details = self._open_details_window("test-many-devices")
|
|
_drag(details)
|
|
|
|
# Close the connection
|
|
c = manager.find_fuzzy("testdriver.xml", "table cell")
|
|
c.click(button=3)
|
|
self.app.root.find("conn-disconnect", "menu item").click()
|
|
|
|
# Ensure all those windows aren't showing
|
|
uiutils.check_in_loop(lambda: not migrate.showing)
|
|
uiutils.check_in_loop(lambda: not clone.showing)
|
|
uiutils.check_in_loop(lambda: not create.showing)
|
|
uiutils.check_in_loop(lambda: not details.showing)
|
|
uiutils.check_in_loop(lambda: not delete.showing)
|
|
|
|
# Delete the connection, ensure the host dialog disappears
|
|
c = manager.find_fuzzy("testdriver.xml", "table cell")
|
|
c.click(button=3)
|
|
self.app.root.find("conn-delete", "menu item").click()
|
|
err = self.app.root.find("vmm dialog", "alert")
|
|
err.find_fuzzy("will remove the connection", "label")
|
|
err.find_fuzzy("Yes", "push button").click()
|
|
uiutils.check_in_loop(lambda: not host.showing)
|
|
|
|
def testManagerDefaultStartup(self):
|
|
self.app.open(use_uri=False)
|
|
manager = self.app.topwin
|
|
errlabel = manager.find("error-label")
|
|
uiutils.check_in_loop(
|
|
lambda: "Checking for virtualization" in errlabel.text)
|
|
uiutils.check_in_loop(
|
|
lambda: "File->Add Connection" in errlabel.text)
|
|
uiutils.check_in_loop(
|
|
lambda: "appropriate qemu/kvm" in errlabel.text)
|