oeqa/runtime/rpm: ensure no user process running before deleting user

In case of systemd, `su -c 'xxx' test1' via ssh will create
several processes owned by test1, e.g. /lib/system/systemd --user.

These processes are actually managed by user@UID.service
(e.g. user@1000.service). And such service is managed
automatically by systemd. In other words, it will be cleaned
up by systemd automatically.

So we need to wait for systemd to clean it up before trying to
use `userdel' to delete the user.

(From OE-Core rev: 9d398be42a69d25277b929d760aaed1679f3cd54)

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Chen Qi
2019-07-12 16:55:27 +08:00
committed by Richard Purdie
parent d692ff5c89
commit d0d4c079d1

View File

@@ -4,6 +4,7 @@
import os
import fnmatch
import time
from oeqa.runtime.case import OERuntimeTestCase
from oeqa.core.decorator.depends import OETestDepends
@@ -77,7 +78,21 @@ class RpmInstallRemoveTest(OERuntimeTestCase):
msg = 'status: %s. Cannot run rpm -qa: %s' % (status, output)
self.assertEqual(status, 0, msg=msg)
def check_no_process_for_user(u):
_, output = self.target.run(self.tc.target_cmds['ps'])
if u + ' ' in output:
return False
else:
return True
def unset_up_test_user(u):
# ensure no test1 process in running
timeout = time.time() + 30
while time.time() < timeout:
if check_no_process_for_user(u):
break
else:
time.sleep(1)
status, output = self.target.run('userdel -r %s' % u)
msg = 'Failed to erase user: %s' % output
self.assertTrue(status == 0, msg=msg)