summaryrefslogtreecommitdiff
path: root/tests/uitests/test_migrate.py
blob: 8f2270d73186017128f4f045eb86f45c5f75cd07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# This work is licensed under the GNU GPLv2 or later.
# See the COPYING file in the top-level directory.

import tests.utils
from . import lib


###################################
# UI tests for the migrate dialog #
###################################

def _open_migrate(app, vmname):
    app.manager_vm_action(vmname, migrate=True)
    return app.find_window("Migrate the virtual machine")


def testMigrateQemu(app):
    # Use fake qemu connections
    app.uri = tests.utils.URIs.kvm_x86
    newuri = (tests.utils.URIs.test_default +
            ",fakeuri=qemu+tcp://fakehost/system")
    app.manager_createconn(newuri)

    # Run default migrate
    mig = _open_migrate(app, "test-many-devices")
    mig.find("Migrate", "push button").click()
    app.click_alert_button(
            "the.connection.driver:.virDomainMigrate", "Close")
    mig.find("Cancel", "push button").click()
    lib.utils.check(lambda: not mig.showing)

    # Run with deselected URI
    mig = _open_migrate(app, "test-many-devices")
    mig.find("address-check").click()
    label = mig.find("Let libvirt decide")
    label.check_onscreen()
    mig.find("Migrate", "push button").click()
    app.click_alert_button(
            "the.connection.driver:.virDomainMigrate", "Close")
    mig.find("Cancel", "push button").click()
    lib.utils.check(lambda: not mig.showing)

    # Run with tunnelled and other options
    mig = _open_migrate(app, "test-many-devices")
    mig.combo_select("Mode:", "Tunnelled")
    mig.find("Advanced", "toggle button").click_expander()
    mig.find("Allow unsafe:", "check box").click()
    mig.find("Temporary", "check box").click()

    mig.find("Migrate", "push button").click()
    app.click_alert_button("p2p migration", "Close")
    mig.find("Cancel", "push button").click()
    lib.utils.check(lambda: not mig.showing)


def testMigrateXen(app):
    # Use fake xen connections
    app.uri = tests.utils.URIs.test_full + ",fakeuri=xen:///"

    fakeremotexen = (tests.utils.URIs.test_default +
            ",fakeuri=xen+tcp://fakehost/")
    app.manager_createconn(fakeremotexen)

    # Run default migrate
    mig = _open_migrate(app, "test-many-devices")
    mig.find("Migrate", "push button").click()
    app.click_alert_button(
            "the.connection.driver:.virDomainMigrate", "Close")
    mig.find("Cancel", "push button").click()
    lib.utils.check(lambda: not mig.showing)


def testMigrateMock(app):
    """
    Trigger the mock migration testing we have to emulate success
    """
    # Add an additional connection
    app.manager_createconn("test:///default")

    # Run it and check some values
    mig = _open_migrate(app, "test-many-devices")
    mig.find("address-text").set_text("TESTSUITE-FAKE")

    mig.find("Migrate", "push button").click()
    progwin = app.find_window("Migrating VM")
    # Attempt cancel which will fail, then find the error message
    progwin.find("Cancel", "push button").click()
    progwin.find("Error cancelling migrate job")
    lib.utils.check(lambda: not progwin.showing, timeout=5)
    lib.utils.check(lambda: not mig.showing)


def testMigrateConnMismatch(app):
    # Add a possible target but disconnect it
    app.uri = tests.utils.URIs.test_default
    manager = app.topwin
    manager.window_maximize()
    manager.click()
    app.manager_conn_disconnect("test default")

    # Add a mismatched hv connection
    fakexen = tests.utils.URIs.test_empty + ",fakeuri=xen:///"
    app.manager_createconn(fakexen)

    # Open dialog and confirm no conns are available
    app.manager_createconn(tests.utils.URIs.test_full)
    mig = _open_migrate(app, "test-many-devices")
    mig.find("conn-combo").find("No usable", "menu item")

    # Test explicit dialog 'delete'
    mig.window_close()

    # Ensure disconnecting will close the dialog
    manager.click_title()
    mig = _open_migrate(app, "test-many-devices")
    app.manager_conn_disconnect("test testdriver.xml")
    lib.utils.check(lambda: not mig.showing)


def testMigrateXMLEditor(app):
    app.open(xmleditor_enabled=True)
    manager = app.topwin

    # Add an additional connection
    app.manager_createconn("test:///default")

    # Run it and check some values
    vmname = "test-many-devices"
    win = _open_migrate(app, vmname)
    win.find("address-text").set_text("TESTSUITE-FAKE")

    # Create a new obj with XML edited name, verify it worked
    newname = "aafroofroo"
    win.find("XML", "page tab").click()
    xmleditor = win.find("XML editor")
    newtext = xmleditor.text.replace(
            ">%s<" % vmname, ">%s<" % newname)
    xmleditor.set_text(newtext)
    win.find("Migrate", "push button").click()
    lib.utils.check(lambda: not win.showing, timeout=10)

    manager.find(newname, "table cell")

    # Do standard xmleditor tests
    win = _open_migrate(app, vmname)
    win.find("address-text").set_text("TESTSUITE-FAKE")
    finish = win.find("Migrate", "push button")
    lib.utils.test_xmleditor_interactions(app, win, finish)
    win.find("Cancel", "push button").click()
    lib.utils.check(lambda: not win.visible)