20 """Tests for upstart integration."""
29 import ubuntuuitoolkit
30 from autopilot.matchers
import Eventually
31 from autopilot.introspection
import get_proxy_object_for_existing_process
32 from testtools.matchers
import Equals, MismatchError
33 from ubuntuuitoolkit
import ubuntu_scenarios
35 from unity8
import get_binary_path
40 logger = logging.getLogger(__name__)
43 class UpstartIntegrationTests(UnityTestCase):
45 scenarios = ubuntu_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_unity(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.unity_geometry_args)
73 self.process.terminate()
90 self.addCleanup(ensure_stopped)
93 proxy_base = ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase
95 get_proxy_object_for_existing_process(
97 emulator_base=proxy_base))
99 def test_no_sigstop(self):
101 fixtures.EnvironmentVariable(
102 'UNITY_MIR_EMITS_SIGSTOP', newvalue=
None))
107 lambda: os.WIFSTOPPED(self._get_status()),
108 Eventually(Equals(
True)))
109 except MismatchError:
112 self.process.send_signal(signal.SIGCONT)
113 self.fail(
'Unity8 raised SIGSTOP')
117 logger.debug(
"Unity started, waiting for it to be ready.")
118 self.wait_for_unity()
119 logger.debug(
"Unity loaded and ready.")
121 def test_expect_sigstop(self):
123 fixtures.EnvironmentVariable(
'UNITY_MIR_EMITS_SIGSTOP',
'1'))
126 lambda: os.WIFSTOPPED(self._get_status()),
127 Eventually(Equals(
True)),
"Unity8 should raise SIGSTOP when ready")
129 self.process.send_signal(signal.SIGCONT)
131 lambda: os.WIFCONTINUED(self._get_status()),
132 Eventually(Equals(
True)),
"Unity8 should have resumed")
134 logger.debug(
"Unity started, waiting for it to be ready.")
136 self.wait_for_unity()
137 logger.debug(
"Unity loaded and ready.")