From 4ae1f51b09b7128a91d3f96f45d0ec6d2f1fe02b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= Date: Sun, 15 Dec 2024 06:51:13 +0100 Subject: [PATCH] tests: fix clipboard test 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 --- qubes/tests/integ/basic.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/qubes/tests/integ/basic.py b/qubes/tests/integ/basic.py index 54be7b0b3..33fbab460 100644 --- a/qubes/tests/integ/basic.py +++ b/qubes/tests/integ/basic.py @@ -619,7 +619,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 " @@ -639,7 +639,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 asyncio.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() @@ -718,14 +724,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="" @@ -736,7 +742,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} @@ -747,7 +753,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,