pmbootstrap-meow/test/test_shell_escape.py
BO41 944f539dd6
args.logfd: remove (MR 2114)
Replace "args.logfd" with "pmb.helpers.logging.logfd" in order to avoid
passing "args" to all functions that only use it to write to logfd. This
is the first step to get rid of this args-passed-to-all-functions
pattern in pmbootstrap.
2021-10-10 16:59:17 +02:00

114 lines
3.3 KiB
Python

# Copyright 2021 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later
import sys
import pytest
import pmb_test # noqa
import pmb.chroot.root
import pmb.chroot.user
import pmb.helpers.run
import pmb.helpers.logging
@pytest.fixture
def args(request):
import pmb.parse
sys.argv = ["pmbootstrap.py", "chroot"]
args = pmb.parse.arguments()
args.log = args.work + "/log_testsuite.txt"
pmb.helpers.logging.init(args)
request.addfinalizer(pmb.helpers.logging.logfd.close)
return args
def test_shell_escape(args):
cmds = {"test\n": ["echo", "test"],
"test && test\n": ["echo", "test", "&&", "test"],
"test ; test\n": ["echo", "test", ";", "test"],
"'test\"test\\'\n": ["echo", "'test\"test\\'"],
"*\n": ["echo", "*"],
"$PWD\n": ["echo", "$PWD"],
"hello world\n": ["printf", "%s world\n", "hello"]}
for expected, cmd in cmds.items():
copy = list(cmd)
core = pmb.helpers.run_core.core(args, str(cmd), cmd,
output_return=True)
assert expected == core
assert cmd == copy
user = pmb.helpers.run.user(args, cmd, output_return=True)
assert expected == user
assert cmd == copy
root = pmb.helpers.run.root(args, cmd, output_return=True)
assert expected == root
assert cmd == copy
chroot_root = pmb.chroot.root(args, cmd, output_return=True)
assert expected == chroot_root
assert cmd == copy
chroot_user = pmb.chroot.user(args, cmd, output_return=True)
assert expected == chroot_user
assert cmd == copy
def test_shell_escape_env(args):
key = "PMBOOTSTRAP_TEST_ENVIRONMENT_VARIABLE"
value = "long value with spaces and special characters: '\"\\!$test"
env = {key: value}
cmd = ["sh", "-c", "env | grep " + key + " | grep -v SUDO_COMMAND"]
ret = key + "=" + value + "\n"
copy = list(cmd)
func = pmb.helpers.run.user
assert func(args, cmd, output_return=True, env=env) == ret
assert cmd == copy
func = pmb.helpers.run.root
assert func(args, cmd, output_return=True, env=env) == ret
assert cmd == copy
func = pmb.chroot.root
assert func(args, cmd, output_return=True, env=env) == ret
assert cmd == copy
func = pmb.chroot.user
assert func(args, cmd, output_return=True, env=env) == ret
assert cmd == copy
def test_flat_cmd_simple():
func = pmb.helpers.run.flat_cmd
cmd = ["echo", "test"]
working_dir = None
ret = "echo test"
env = {}
assert func(cmd, working_dir, env) == ret
def test_flat_cmd_wrap_shell_string_with_spaces():
func = pmb.helpers.run.flat_cmd
cmd = ["echo", "string with spaces"]
working_dir = None
ret = "echo 'string with spaces'"
env = {}
assert func(cmd, working_dir, env) == ret
def test_flat_cmd_wrap_env_simple():
func = pmb.helpers.run.flat_cmd
cmd = ["echo", "test"]
working_dir = None
ret = "JOBS=5 echo test"
env = {"JOBS": "5"}
assert func(cmd, working_dir, env) == ret
def test_flat_cmd_wrap_env_spaces():
func = pmb.helpers.run.flat_cmd
cmd = ["echo", "test"]
working_dir = None
ret = "JOBS=5 TEST='spaces string' echo test"
env = {"JOBS": "5", "TEST": "spaces string"}
assert func(cmd, working_dir, env) == ret