mirror of
https://github.com/fsquillace/junest.git
synced 2026-01-24 02:55:36 +00:00
345 lines
8.6 KiB
Bash
Executable file
345 lines
8.6 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
function oneTimeSetUp(){
|
|
[ -z "$SKIP_ROOT_TESTS" ] && SKIP_ROOT_TESTS=0
|
|
|
|
CURRPWD=$PWD
|
|
ENV_MAIN_HOME=/tmp/envtesthome
|
|
[ -e $ENV_MAIN_HOME ] || JUNEST_HOME=$ENV_MAIN_HOME bash --rcfile "$(dirname $0)/../lib/core.sh" -ic "setup_env"
|
|
JUNEST_HOME=""
|
|
}
|
|
|
|
function install_mini_env(){
|
|
cp -rfa $ENV_MAIN_HOME/* $JUNEST_HOME
|
|
}
|
|
|
|
function setUp(){
|
|
cd $CURRPWD
|
|
JUNEST_HOME=$(TMPDIR=/tmp mktemp -d -t envhome.XXXXXXXXXX)
|
|
JUNEST_BASE="$CURRPWD/$(dirname $0)/.."
|
|
source "${JUNEST_BASE}/lib/core.sh"
|
|
ORIGIN_WD=$(TMPDIR=/tmp mktemp -d -t envowd.XXXXXXXXXX)
|
|
cd $ORIGIN_WD
|
|
JUNEST_TEMPDIR=$(TMPDIR=/tmp mktemp -d -t envtemp.XXXXXXXXXX)
|
|
|
|
set +e
|
|
|
|
trap - QUIT EXIT ABRT KILL TERM INT
|
|
trap "rm -rf ${JUNEST_HOME}; rm -rf ${ORIGIN_WD}; rm -rf ${JUNEST_TEMPDIR}" EXIT QUIT ABRT KILL TERM INT
|
|
}
|
|
|
|
|
|
function tearDown(){
|
|
# the CA directories are read only and can be deleted only by changing the mod
|
|
[ -d ${JUNEST_HOME}/etc/ca-certificates ] && chmod -R +w ${JUNEST_HOME}/etc/ca-certificates
|
|
rm -rf $JUNEST_HOME
|
|
rm -rf $ORIGIN_WD
|
|
rm -rf $JUNEST_TEMPDIR
|
|
trap - QUIT EXIT ABRT KILL TERM INT
|
|
}
|
|
|
|
|
|
function test_is_env_installed(){
|
|
is_env_installed
|
|
assertEquals $? 1
|
|
touch $JUNEST_HOME/just_file
|
|
is_env_installed
|
|
assertEquals $? 0
|
|
}
|
|
|
|
|
|
function test_download(){
|
|
WGET=/bin/true
|
|
CURL=/bin/false
|
|
download_cmd
|
|
assertEquals $? 0
|
|
|
|
WGET=/bin/false
|
|
CURL=/bin/true
|
|
download_cmd
|
|
assertEquals $? 0
|
|
|
|
$(WGET=/bin/false CURL=/bin/false download_cmd something 2> /dev/null)
|
|
assertEquals $? 1
|
|
}
|
|
|
|
function test_ln(){
|
|
install_mini_env
|
|
|
|
touch ln_file
|
|
ln_cmd -s ln_file new_file
|
|
assertEquals $? 0
|
|
assertTrue "[ -e new_file ]"
|
|
rm new_file
|
|
|
|
touch ln_file
|
|
OLDPATH="$PATH"
|
|
PATH=""
|
|
ln_cmd -s ln_file new_file 2> /dev/null
|
|
local ret=$?
|
|
PATH="$OLDPATH"
|
|
assertEquals $ret 0
|
|
assertTrue "[ -e new_file ]"
|
|
}
|
|
|
|
function test_rm(){
|
|
install_mini_env
|
|
|
|
touch rm_file
|
|
rm_cmd rm_file
|
|
assertEquals $? 0
|
|
assertTrue "[ ! -e rm_file ]"
|
|
|
|
touch rm_file
|
|
OLDPATH="$PATH"
|
|
PATH=""
|
|
rm_cmd rm_file 2> /dev/null
|
|
local ret=$?
|
|
PATH="$OLDPATH"
|
|
assertEquals $ret 0
|
|
assertTrue "[ ! -e rm_file ]"
|
|
}
|
|
|
|
function test_chown(){
|
|
install_mini_env
|
|
|
|
local id=$(id -u)
|
|
|
|
touch chown_file
|
|
chown_cmd $id chown_file
|
|
assertEquals $? 0
|
|
|
|
touch chown_file
|
|
OLDPATH="$PATH"
|
|
PATH=""
|
|
chown_cmd $id chown_file 2> /dev/null
|
|
local ret=$?
|
|
PATH="$OLDPATH"
|
|
assertEquals $ret 0
|
|
}
|
|
|
|
function test_mkdir(){
|
|
install_mini_env
|
|
|
|
mkdir_cmd -p new_dir/new_dir
|
|
assertEquals $? 0
|
|
assertTrue "[ -d new_dir/new_dir ]"
|
|
rm -rf new_dir
|
|
|
|
OLDPATH="$PATH"
|
|
PATH=""
|
|
mkdir_cmd -p new_dir/new_dir 2> /dev/null
|
|
local ret=$?
|
|
PATH="$OLDPATH"
|
|
assertEquals $ret 0
|
|
assertTrue "[ -d new_dir/new_dir ]"
|
|
}
|
|
|
|
function test_setup_env(){
|
|
wget_mock(){
|
|
# Proof that the setup is happening
|
|
# inside $JUNEST_TEMPDIR
|
|
local cwd=${PWD#${JUNEST_TEMPDIR}}
|
|
local parent_dir=${PWD%${cwd}}
|
|
assertEquals "$JUNEST_TEMPDIR" "${parent_dir}"
|
|
touch file
|
|
tar -czvf ${CMD}-${ARCH}.tar.gz file
|
|
}
|
|
WGET=wget_mock
|
|
setup_env 1> /dev/null
|
|
assertTrue "[ -e $JUNEST_HOME/file ]"
|
|
assertTrue "[ -e $JUNEST_HOME/run/lock ]"
|
|
}
|
|
|
|
|
|
function test_setup_env_from_file(){
|
|
touch file
|
|
tar -czvf ${CMD}-${ARCH}.tar.gz file 1> /dev/null
|
|
setup_env_from_file ${CMD}-${ARCH}.tar.gz &> /dev/null
|
|
assertTrue "[ -e $JUNEST_HOME/file ]"
|
|
assertTrue "[ -e $JUNEST_HOME/run/lock ]"
|
|
|
|
$(setup_env_from_file noexist.tar.gz 2> /dev/null)
|
|
assertEquals $? 1
|
|
}
|
|
|
|
function test_setup_env_from_file_with_absolute_path(){
|
|
touch file
|
|
tar -czvf ${CMD}-${ARCH}.tar.gz file 1> /dev/null
|
|
setup_env_from_file ${ORIGIN_WD}/${CMD}-${ARCH}.tar.gz &> /dev/null
|
|
assertTrue "[ -e $JUNEST_HOME/file ]"
|
|
assertTrue "[ -e $JUNEST_HOME/run/lock ]"
|
|
}
|
|
|
|
function test_run_env_as_root(){
|
|
[ $SKIP_ROOT_TESTS -eq 1 ] && return
|
|
|
|
install_mini_env
|
|
CHROOT="sudo $CHROOT"
|
|
CLASSIC_CHROOT="sudo $CLASSIC_CHROOT"
|
|
CHOWN="sudo $CHOWN"
|
|
|
|
local output=$(run_env_as_root pwd)
|
|
assertEquals "/" "$output"
|
|
run_env_as_root [ -e /run/lock ]
|
|
assertEquals 0 $?
|
|
run_env_as_root [ -e $HOME ]
|
|
assertEquals 0 $?
|
|
|
|
# test that normal user has ownership of the files created by root
|
|
run_env_as_root touch /a_root_file
|
|
local output=$(run_env_as_root stat -c '%u' /a_root_file)
|
|
assertEquals "$UID" "$output"
|
|
|
|
SH=("sh" "--login" "-c" "type -t type")
|
|
local output=$(run_env_as_root)
|
|
assertEquals "builtin" "$output"
|
|
SH=("sh" "--login" "-c" "[ -e /run/lock ]")
|
|
run_env_as_root
|
|
assertEquals 0 $?
|
|
SH=("sh" "--login" "-c" "[ -e $HOME ]")
|
|
run_env_as_root
|
|
assertEquals 0 $?
|
|
}
|
|
|
|
function test_run_env_as_classic_root(){
|
|
[ $SKIP_ROOT_TESTS -eq 1 ] && return
|
|
|
|
install_mini_env
|
|
CHROOT="sudo unknowncommand"
|
|
CLASSIC_CHROOT="sudo $CLASSIC_CHROOT"
|
|
CHOWN="sudo $CHOWN"
|
|
|
|
local output=$(run_env_as_root pwd 2> /dev/null)
|
|
assertEquals "/" "$output"
|
|
run_env_as_root [ -e /run/lock ] 2> /dev/null
|
|
assertEquals 0 $?
|
|
run_env_as_root [ -e $HOME ] 2> /dev/null
|
|
assertEquals 0 $?
|
|
}
|
|
|
|
function test_run_env_as_junest_root(){
|
|
[ $SKIP_ROOT_TESTS -eq 1 ] && return
|
|
|
|
install_mini_env
|
|
CHROOT="sudo unknowncommand"
|
|
CLASSIC_CHROOT="sudo unknowncommand"
|
|
LD_EXEC="sudo $LD_EXEC"
|
|
CHOWN="sudo $CHOWN"
|
|
|
|
local output=$(run_env_as_root pwd 2> /dev/null)
|
|
assertEquals "/" "$output"
|
|
run_env_as_root [ -e /run/lock ] 2> /dev/null
|
|
assertEquals 0 $?
|
|
run_env_as_root [ -e $HOME ] 2> /dev/null
|
|
assertEquals 0 $?
|
|
}
|
|
|
|
function test_run_env_as_user(){
|
|
install_mini_env
|
|
local output=$(run_env_as_user "-k 3.10" "/usr/bin/mkdir" "-v" "/newdir2" | awk -F: '{print $1}')
|
|
assertEquals "$output" "/usr/bin/mkdir"
|
|
assertTrue "[ -e $JUNEST_HOME/newdir2 ]"
|
|
|
|
SH=("/usr/bin/mkdir" "-v" "/newdir")
|
|
local output=$(run_env_as_user "-k 3.10" | awk -F: '{print $1}')
|
|
assertEquals "$output" "/usr/bin/mkdir"
|
|
assertTrue "[ -e $JUNEST_HOME/newdir ]"
|
|
}
|
|
|
|
function test_run_env_as_proot_mtab(){
|
|
install_mini_env
|
|
$(run_env_as_fakeroot "-k 3.10" "echo")
|
|
assertTrue "[ -e $JUNEST_HOME/etc/mtab ]"
|
|
$(run_env_as_user "-k 3.10" "echo")
|
|
assertTrue "[ ! -e $JUNEST_HOME/etc/mtab ]"
|
|
}
|
|
|
|
function test_run_env_as_root_mtab(){
|
|
[ $SKIP_ROOT_TESTS -eq 1 ] && return
|
|
|
|
install_mini_env
|
|
CHROOT="sudo $CHROOT"
|
|
CLASSIC_CHROOT="sudo $CLASSIC_CHROOT"
|
|
CHOWN="sudo $CHOWN"
|
|
$(run_env_as_root "echo")
|
|
assertTrue "[ ! -e $JUNEST_HOME/etc/mtab ]"
|
|
}
|
|
|
|
function test_run_env_with_quotes(){
|
|
install_mini_env
|
|
local output=$(run_env_as_user "-k 3.10" "bash" "-c" "/usr/bin/mkdir -v /newdir2" | awk -F: '{print $1}')
|
|
assertEquals "$output" "/usr/bin/mkdir"
|
|
assertTrue "[ -e $JUNEST_HOME/newdir2 ]"
|
|
}
|
|
|
|
function test_run_env_as_user_proot_args(){
|
|
install_mini_env
|
|
run_env_as_user "--help" "" &> /dev/null
|
|
assertEquals $? 0
|
|
|
|
mkdir $JUNEST_TEMPDIR/newdir
|
|
touch $JUNEST_TEMPDIR/newdir/newfile
|
|
run_env_as_user "-b $JUNEST_TEMPDIR/newdir:/newdir -k 3.10" "ls" "-l" "/newdir/newfile" &> /dev/null
|
|
assertEquals $? 0
|
|
|
|
$(_run_env_with_proot --helps 2> /dev/null)
|
|
assertEquals $? 1
|
|
}
|
|
|
|
function test_run_env_with_proot_compat(){
|
|
PROOT_COMPAT="/bin/true"
|
|
_run_env_with_proot "" "" &> /dev/null
|
|
assertEquals $? 0
|
|
|
|
$(PROOT_COMPAT="/bin/false" _run_env_with_proot --helps 2> /dev/null)
|
|
assertEquals $? 1
|
|
}
|
|
|
|
function test_run_env_with_proot_as_root(){
|
|
[ $SKIP_ROOT_TESTS -eq 1 ] && return
|
|
|
|
install_mini_env
|
|
|
|
$(sudo run_env_as_user 2> /dev/null)
|
|
assertEquals $? 1
|
|
$(sudo run_env_as_fakeroot 2> /dev/null)
|
|
assertEquals $? 1
|
|
}
|
|
|
|
function test_run_proot_seccomp(){
|
|
PROOT_COMPAT=env
|
|
local output=$(proot_cmd | grep "^PROOT_NO_SECCOMP")
|
|
assertEquals "$output" ""
|
|
|
|
envv(){
|
|
env | grep "^PROOT_NO_SECCOMP"
|
|
}
|
|
PROOT_COMPAT=envv
|
|
local output=$(proot_cmd 2> /dev/null | grep "^PROOT_NO_SECCOMP")
|
|
assertEquals "$output" "PROOT_NO_SECCOMP=1"
|
|
}
|
|
|
|
function test_run_env_as_fakeroot(){
|
|
install_mini_env
|
|
local output=$(run_env_as_fakeroot "-k 3.10" "id" | awk '{print $1}')
|
|
assertEquals "$output" "uid=0(root)"
|
|
}
|
|
|
|
function test_delete_env(){
|
|
install_mini_env
|
|
echo "N" | delete_env 1> /dev/null
|
|
is_env_installed
|
|
assertEquals $? 0
|
|
echo "Y" | delete_env 1> /dev/null
|
|
is_env_installed
|
|
assertEquals $? 1
|
|
}
|
|
|
|
function test_nested_env(){
|
|
install_mini_env
|
|
JUNEST_ENV=1 bash -ic "source $CURRPWD/$(dirname $0)/../lib/core.sh" &> /dev/null
|
|
assertEquals $? 1
|
|
}
|
|
|
|
source $(dirname $0)/shunit2
|