oeqa/runtime/systemd: remove race in settle()

The settle() function had a race where services could still be activating at two
minutes but then when the final log is output, they've activated.

Remove this race and generally clean up the code.

(From OE-Core rev: 8d107e0a828868702cfe035104c1f0b51da4291e)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ross Burton 2014-02-04 12:41:15 +00:00 committed by Richard Purdie
parent 6b7b9ea316
commit c8962ab4db
1 changed files with 8 additions and 14 deletions

View File

@ -37,25 +37,19 @@ class SystemdBasicTests(SystemdTest):
Block until systemd has finished activating any units being activated,
or until two minutes has elapsed.
Returns a tuple, either (True, None) if all units have finished
acitvating, or (False, message string) if there are still units
Returns a tuple, either (True, '') if all units have finished
activating, or (False, message string) if there are still units
activating (generally, failing units that restart).
"""
import time
settled = False
endtime = time.time() + (60 * 2)
while time.time() < endtime:
status = self.target.run('systemctl --state=activating | grep -q "0 loaded units listed"')
if status == 0:
settled = True
break
time.sleep(10)
if settled:
return (True, None)
else:
while True:
status, output = self.target.run('systemctl --state=activating')
return (settled, output)
if "0 loaded units listed" in output:
return (True, '')
if time.time() >= endtime:
return (False, output)
time.sleep(10)
@skipUnlessPassed('test_systemd_basic')
def test_systemd_failed(self):