diff options
Diffstat (limited to 'meta/lib/oeqa/runtime/cases/systemd.py')
-rw-r--r-- | meta/lib/oeqa/runtime/cases/systemd.py | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/meta/lib/oeqa/runtime/cases/systemd.py b/meta/lib/oeqa/runtime/cases/systemd.py index 5481e1d840..640f28abe9 100644 --- a/meta/lib/oeqa/runtime/cases/systemd.py +++ b/meta/lib/oeqa/runtime/cases/systemd.py | |||
@@ -145,18 +145,29 @@ class SystemdServiceTests(SystemdTest): | |||
145 | Verify that call-stacks generated by systemd-coredump contain symbolicated call-stacks, | 145 | Verify that call-stacks generated by systemd-coredump contain symbolicated call-stacks, |
146 | extracted from the minidebuginfo metadata (.gnu_debugdata elf section). | 146 | extracted from the minidebuginfo metadata (.gnu_debugdata elf section). |
147 | """ | 147 | """ |
148 | t_thread = threading.Thread(target=self.target.run, args=("ulimit -c unlimited && sleep 1000",)) | 148 | # use "env sleep" instead of "sleep" to avoid calling the shell builtin function |
149 | t_thread = threading.Thread(target=self.target.run, args=("ulimit -c unlimited && env sleep 1000",)) | ||
149 | t_thread.start() | 150 | t_thread.start() |
150 | time.sleep(1) | 151 | time.sleep(1) |
151 | 152 | ||
152 | status, output = self.target.run('pidof sleep') | 153 | status, sleep_pid = self.target.run('pidof sleep') |
153 | # cause segfault on purpose | 154 | # cause segfault on purpose |
154 | self.target.run('kill -SEGV %s' % output) | 155 | self.target.run('kill -SEGV %s' % sleep_pid) |
155 | self.assertEqual(status, 0, msg = 'Not able to find process that runs sleep, output : %s' % output) | 156 | self.assertEqual(status, 0, msg = 'Not able to find process that runs sleep, output : %s' % sleep_pid) |
156 | 157 | ||
157 | (status, output) = self.target.run('coredumpctl info') | 158 | # Give some time to systemd-coredump@.service to process the coredump |
159 | for x in range(20): | ||
160 | status, output = self.target.run('coredumpctl list %s' % sleep_pid) | ||
161 | if status == 0: | ||
162 | break | ||
163 | time.sleep(1) | ||
164 | else: | ||
165 | self.fail("Timed out waiting for coredump creation") | ||
166 | |||
167 | (status, output) = self.target.run('coredumpctl info %s' % sleep_pid) | ||
158 | self.assertEqual(status, 0, msg='MiniDebugInfo Test failed: %s' % output) | 168 | self.assertEqual(status, 0, msg='MiniDebugInfo Test failed: %s' % output) |
159 | self.assertEqual('sleep_for_duration (busybox.nosuid' in output, True, msg='Call stack is missing minidebuginfo symbols (functions shown as "n/a"): %s' % output) | 169 | self.assertEqual('sleep_for_duration (busybox.nosuid' in output or 'xnanosleep (sleep.coreutils' in output, |
170 | True, msg='Call stack is missing minidebuginfo symbols (functions shown as "n/a"): %s' % output) | ||
160 | 171 | ||
161 | class SystemdJournalTests(SystemdTest): | 172 | class SystemdJournalTests(SystemdTest): |
162 | 173 | ||