Skip to content

Commit

Permalink
tests: fix clipboard test
Browse files Browse the repository at this point in the history
First of all, wait for the zenity process to finish, do not leak it.

But then, adjust the test string to not be a single long line - zenity
often hangs on a single 300k line.

Fixes QubesOS/qubes-issues#9646
  • Loading branch information
marmarek committed Dec 15, 2024
1 parent 98855ca commit 3153306
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions qubes/tests/integ/basic.py
Original file line number Diff line number Diff line change
Expand Up @@ -599,6 +599,9 @@ async def _test_clipboard(
expect_content=None,
expect_source_name=None,
):
if test_string.endswith("\n"):
# avoid final newline, zenity strips it
test_string = test_string[:-1] + "c"
testvm1 = self.app.add_new_vm(
qubes.vm.appvm.AppVM, name=self.make_vm_name("vm1"), label="red"
)
Expand All @@ -619,7 +622,7 @@ async def _test_clipboard(
p = await testvm1.run("cat > /tmp/source.txt", stdin=subprocess.PIPE)
await p.communicate(test_string.encode())
window_title = "user@{}".format(testvm1.name)
await testvm1.run(
p = await testvm1.run(
"zenity --text-info "
"--filename=/tmp/source.txt "
"--editable "
Expand All @@ -639,7 +642,13 @@ async def _test_clipboard(
await asyncio.sleep(5)
subprocess.check_call(["xdotool", "key", "ctrl+shift+c", "Escape"])

await self.wait_for_window_coro(window_title, show=False)
try:
await asyncio.wait_for(p.communicate(), 5)
except TimeoutError:
# this kills only the qrexec-client process, not zenity itself,
# but it's good enough for the test
p.terminate()
await p.wait()

clipboard_content = (
open("/var/run/qubes/qubes-clipboard.bin", "r").read().strip()
Expand Down Expand Up @@ -718,14 +727,14 @@ def test_000_clipboard(self):
spawn.find_executable("xdotool"), "xdotool not installed"
)
def test_001_clipboard_64k(self):
test_string = "test123abc" * 6400
test_string = "test123ab\n" * 6400
self.loop.run_until_complete(self._test_clipboard(test_string))

@unittest.skipUnless(
spawn.find_executable("xdotool"), "xdotool not installed"
)
def test_002_clipboard_200k_truncated(self):
test_string = "test123abc" * 20000
test_string = "test123ab\n" * 20000
self.loop.run_until_complete(
self._test_clipboard(
test_string, expect_content="", expect_source_name=""
Expand All @@ -736,7 +745,7 @@ def test_002_clipboard_200k_truncated(self):
spawn.find_executable("xdotool"), "xdotool not installed"
)
def test_002_clipboard_200k(self):
test_string = "test123abc" * 20000
test_string = "test123ab\n" * 20000
self.loop.run_until_complete(
self._test_clipboard(
test_string, set_features={"gui-max-clipboard-size": 200_000}
Expand All @@ -747,7 +756,7 @@ def test_002_clipboard_200k(self):
spawn.find_executable("xdotool"), "xdotool not installed"
)
def test_002_clipboard_300k(self):
test_string = "test123abc" * 30000
test_string = "test123ab\n" * 30000
self.loop.run_until_complete(
self._test_clipboard(
test_string,
Expand Down

0 comments on commit 3153306

Please sign in to comment.