virt-manager/tests/uitests/test_cli.py

200 lines
6.2 KiB
Python

# This work is licensed under the GNU GPLv2 or later.
# See the COPYING file in the top-level directory.
import unittest.mock
from . import lib
# UI tests for virt-manager's command line --show options
def testShowNewVM(app):
app.open(
uri="test:///default",
extra_opts=["--show-domain-creator"])
lib.utils.check(lambda: app.topwin.name == "New VM")
app.topwin.window_close()
app.wait_for_exit()
def testShowHost(app):
app.open(
uri="test:///default",
extra_opts=["--show-host-summary"])
lib.utils.check(lambda: app.topwin.name == "test default - Connection Details")
nametext = app.topwin.find_fuzzy("Name:", "text")
lib.utils.check(lambda: nametext.text == "test default")
app.topwin.window_close()
app.wait_for_exit()
def testShowDetails(app):
app.open(
extra_opts=["--show-domain-editor", "test-clone-simple"])
lib.utils.check(lambda: "test-clone-simple on" in app.topwin.name)
rlabel = app.topwin.find_fuzzy("Guest is not running", "label")
lib.utils.check(lambda: not rlabel.showing)
addhw = app.topwin.find_fuzzy("add-hardware", "button")
lib.utils.check(lambda: addhw.showing)
app.topwin.window_close()
app.wait_for_exit()
def testShowPerformance(app):
domid = "1"
app.open(
uri="test:///default",
extra_opts=["--show-domain-performance", domid])
lib.utils.check(lambda: "test on" in app.topwin.name)
cpulabel = app.topwin.find_fuzzy("CPU usage", "label")
lib.utils.check(lambda: cpulabel.showing)
def testShowConsole(app):
# UUID of test-clone-simple
uuid = "12345678-1234-ffff-1234-12345678ffff"
app.open(
extra_opts=["--show-domain-console", uuid])
lib.utils.check(lambda: "test-clone-simple on" in app.topwin.name)
rlabel = app.topwin.find_fuzzy("Guest is not running", "label")
lib.utils.check(lambda: rlabel.showing)
addhw = app.topwin.find_fuzzy("add-hardware", "button")
lib.utils.check(lambda: not addhw.showing)
def testShowDelete(app):
app.open(
uri="test:///default",
extra_opts=["--show-domain-delete", "test"],
window_name="Delete")
# Ensure details opened too
app.root.find("test on", "frame", check_active=False)
delete = app.topwin
delete.find_fuzzy("Delete", "button").click()
app.wait_for_exit()
def testShowRemoteDBusConnect(app):
"""
Test the remote app dbus connection
"""
app.open()
lib.utils.check(lambda: "testdriver" in app.topwin.fmt_nodes())
lib.utils.check(lambda: "test default" not in app.topwin.fmt_nodes())
def _run_remote(opts):
newapp = lib.app.VMMDogtailApp("test:///default")
newapp.open(check_already_running=False,
extra_opts=opts)
lib.utils.check(lambda: not newapp.is_running())
vapps = [a for a in newapp.tree.root.applications() if
a.name == "virt-manager"]
lib.utils.check(lambda: len(vapps) == 1)
# Ensure connection showed up
app.topwin.find("test default", "table cell")
_run_remote([])
# Run remote again to trigger engine.py code when a connection
# is already there and connected
_run_remote(["--show-domain-console=test"])
def testShowCLIError(app):
# Unknown option
app.open(
extra_opts=["--idontexist"])
app.click_alert_button("Unhandled command line", "Close")
lib.utils.check(lambda: not app.is_running())
# Missing VM
app.open(
uri="test:///default",
extra_opts=["--show-domain-delete", "IDONTEXIST"])
app.click_alert_button("does not have VM", "Close")
lib.utils.check(lambda: not app.is_running())
# Bad URI
baduri = "fribfrobfroo"
app = lib.app.VMMDogtailApp(baduri)
app.click_alert_button(baduri, "Close")
lib.utils.check(lambda: not app.is_running())
def testCLIFirstRunURIGood(app):
# Emulate first run with a URI that will succeed
app.open(use_uri=False, firstrun_uri="test:///default")
app.root.find("test default", "table cell")
def testCLIFirstRunURIBad(app):
# Emulate first run with a URI that will not succeed
app.open(use_uri=False, firstrun_uri="bad:///uri")
app.topwin.find("bad uri", "table cell")
app.click_alert_button("bad:///uri", "Close")
def testCLIFirstRunNoLibvirtd(app):
# Emulate first run with no libvirtd detected
app.open(use_uri=False, firstrun_uri="bad:///uri",
extra_opts=["--test-options=fake-no-libvirtd"])
errlabel = app.topwin.find("error-label")
lib.utils.check(
lambda: "Checking for virtualization" in errlabel.text)
lib.utils.check(
lambda: "libvirtd service does not appear" in errlabel.text)
lib.utils.check(
lambda: "detect a default hypervisor" in errlabel.text)
def testCLITraceLibvirt(app):
# Just test this for code coverage
app.open(keyfile="allstats.ini",
extra_opts=["--trace-libvirt=mainloop",
"--test-options=short-poll"])
app.sleep(.5) # Give time for polling to trigger
lib.utils.check(lambda: app.topwin.active)
def testCLILeakDebug(app):
# Just test this for code coverage
app.open(keyfile="allstats.ini",
extra_opts=["--test-options=leak-debug",
"--test-options=short-poll"])
app.sleep(.5) # Give time for polling to trigger
app.topwin.window_close()
app.wait_for_exit()
def testCLINoFirstRun(app):
# Test a simple case of loading without any config override
app.open(first_run=False, enable_libguestfs=None, use_uri=False)
lib.utils.check(lambda: app.topwin.showing)
def testCLINoFork(app):
# Test app without forking
app.open(first_run=False, enable_libguestfs=None,
use_uri=False, no_fork=False)
app.wait_for_exit()
app.topwin.window_close()
lib.utils.check(lambda: not app.has_dbus())
def testCLIGTKArgs(app):
# Ensure gtk arg passthrough works
app.open(extra_opts=["--gtk-debug=misc"])
lib.utils.check(lambda: app.topwin.showing)
@unittest.mock.patch.dict('os.environ', {"DISPLAY": ""})
def testCLINoDisplay(app):
# Ensure missing display exits
app.open(will_fail=True)
app.wait_for_exit()