20"""Tests for upstart integration."""
30from autopilot.matchers
import Eventually
31from autopilot.introspection
import get_proxy_object_for_existing_process
32from testtools.matchers
import Equals, MismatchError
33from lomiriuitoolkit
import lomiri_scenarios
35from lomiri
import get_binary_path
40logger = logging.getLogger(__name__)
45 scenarios = lomiri_scenarios.get_device_simulation_scenarios()
47 def _get_status(self):
48 pid, status = os.waitpid(
49 self.process.pid, os.WUNTRACED | os.WCONTINUED | os.WNOHANG)
51 "Got status: {0}; stopped: {1}; continued: {2}".format(
52 status, os.WIFSTOPPED(status), os.WIFCONTINUED(status)))
55 def _launch_lomiri(self):
56 self.patch_environment(
"QT_LOAD_TESTABILITY",
"1")
59 host_socket = os.getenv(
"MIR_SOCKET",
"/run/mir_socket")
60 if stat.S_ISSOCK(os.stat(host_socket).st_mode):
61 self.patch_environment(
"MIR_SERVER_HOST_SOCKET",
63 socket = os.path.join(os.getenv(
"XDG_RUNTIME_DIR",
"/tmp"),
65 self.patch_environment(
"MIR_SERVER_FILE", socket)
69 self.process = subprocess.Popen(
70 [get_binary_path()] + self.lomiri_geometry_args)
73 self.process.terminate()
90 self.addCleanup(ensure_stopped)
93 proxy_base = lomiriuitoolkit.LomiriUIToolkitCustomProxyObjectBase
95 get_proxy_object_for_existing_process(
97 emulator_base=proxy_base))
99 def test_no_sigstop(self):
101 fixtures.EnvironmentVariable(
102 'LOMIRI_MIR_EMITS_SIGSTOP', newvalue=
None))
103 self._launch_lomiri()
107 lambda: os.WIFSTOPPED(self._get_status()),
108 Eventually(Equals(
True)))
109 except MismatchError:
112 self.process.send_signal(signal.SIGCONT)
113 self.fail(
'Lomiri raised SIGSTOP')
117 logger.debug(
"Lomiri started, waiting for it to be ready.")
118 self.wait_for_lomiri()
119 logger.debug(
"Lomiri loaded and ready.")
121 def test_expect_sigstop(self):
123 fixtures.EnvironmentVariable(
'LOMIRI_MIR_EMITS_SIGSTOP',
'1'))
124 self._launch_lomiri()
126 lambda: os.WIFSTOPPED(self._get_status()),
127 Eventually(Equals(
True)),
"Lomiri should raise SIGSTOP when ready")
129 self.process.send_signal(signal.SIGCONT)
131 lambda: os.WIFCONTINUED(self._get_status()),
132 Eventually(Equals(
True)),
"Lomiri should have resumed")
134 logger.debug(
"Lomiri started, waiting for it to be ready.")
136 self.wait_for_lomiri()
137 logger.debug(
"Lomiri loaded and ready.")