lib: Refactor re_execute_with_namespace
Move and rename re_execute_with_namespace from run_tests.py to
namespaces.py. Add RunAsRootUser() to commandline and call it
from ReExecuteWithName in namespaces.
BUG=b:233635037
TEST=CQ
Change-Id: I109181450d8398d4543f1e74324cddaef095c87e
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/3710477
Tested-by: Cindy Lin <xcl@google.com>
Reviewed-by: Ram Chandrasekar <rchandrasekar@google.com>
Commit-Queue: Cindy Lin <xcl@google.com>
diff --git a/scripts/run_tests.py b/scripts/run_tests.py
index 1ffa6ea..1d48652 100644
--- a/scripts/run_tests.py
+++ b/scripts/run_tests.py
@@ -32,7 +32,6 @@
from chromite.lib import cros_build_lib
from chromite.lib import gs
from chromite.lib import namespaces
-from chromite.lib import osutils
def main(argv):
@@ -66,7 +65,8 @@
# Namespacing is enabled by default because tests may break each other or
# interfere with parts of the running system if not isolated in a namespace.
# Disabling namespaces is not recommended for general use.
- re_execute_with_namespace([sys.argv[0]] + argv, network=opts.network)
+ namespaces.ReExecuteWithNamespace(
+ [sys.argv[0]] + argv, network=opts.network)
# Check the environment. https://crbug.com/1015450
st = os.stat('/')
@@ -93,28 +93,6 @@
compile_build_api_proto.ProtocVersion.CHROMITE)
-def re_execute_with_namespace(argv, network=False):
- """Re-execute as root so we can unshare resources."""
- if osutils.IsNonRootUser():
- cmd = [
- 'sudo',
- 'HOME=%s' % os.environ['HOME'],
- 'PATH=%s' % os.environ['PATH'],
- '--',
- ] + argv
- os.execvp(cmd[0], cmd)
- else:
- namespaces.SimpleUnshare(net=not network, pid=True)
- # We got our namespaces, so switch back to the user to run the tests.
- gid = int(os.environ.pop('SUDO_GID'))
- uid = int(os.environ.pop('SUDO_UID'))
- user = os.environ.pop('SUDO_USER')
- os.initgroups(user, gid)
- os.setresgid(gid, gid, gid)
- os.setresuid(uid, uid, uid)
- os.environ['USER'] = user
-
-
def re_execute_inside_chroot(argv):
"""Re-execute the test wrapper inside the chroot."""
if cros_build_lib.IsInsideChroot():