[OE-core] [PATCH 1/2] rpm.py: ensure no user process running before deleting user
Chen Qi
Qi.Chen at windriver.com
Fri Jul 12 08:55:27 UTC 2019
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 at UID.service
(e.g. user at 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.
Signed-off-by: Chen Qi <Qi.Chen at windriver.com>
---
meta/lib/oeqa/runtime/cases/rpm.py | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/meta/lib/oeqa/runtime/cases/rpm.py b/meta/lib/oeqa/runtime/cases/rpm.py
index d8cabd3..2b45d34 100644
--- a/meta/lib/oeqa/runtime/cases/rpm.py
+++ b/meta/lib/oeqa/runtime/cases/rpm.py
@@ -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)
--
1.9.1
More information about the Openembedded-core
mailing list