virt-manager/tests/uitests/manager.py

176 lines
6.5 KiB
Python

# This work is licensed under the GNU GPLv2 or later.
# See the COPYING file in the top-level directory.
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
"""
uiutils.drag(win, 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)