mirror of
https://github.com/fsquillace/junest.git
synced 2026-01-23 02:34:30 +00:00
🎨 Refactor core.sh code
This commit is contained in:
parent
19f4848a9d
commit
3102ff1d8a
2 changed files with 242 additions and 256 deletions
50
lib/core.sh
50
lib/core.sh
|
|
@ -13,12 +13,19 @@ NAME='JuNest'
|
|||
CMD='junest'
|
||||
DESCRIPTION='The Arch Linux based distro that runs upon any Linux distros without root access'
|
||||
|
||||
NOT_AVAILABLE_ARCH=102
|
||||
NOT_EXISTING_FILE=103
|
||||
ARCHITECTURE_MISMATCH=104
|
||||
ROOT_ACCESS_ERROR=105
|
||||
NESTED_ENVIRONMENT=106
|
||||
VARIABLE_NOT_SET=107
|
||||
|
||||
if [ "$JUNEST_ENV" == "1" ]
|
||||
then
|
||||
die "Error: Nested ${NAME} environments are not allowed"
|
||||
die_on_status $NESTED_ENVIRONMENT "Error: Nested ${NAME} environments are not allowed"
|
||||
elif [ ! -z $JUNEST_ENV ] && [ "$JUNEST_ENV" != "0" ]
|
||||
then
|
||||
die "The variable JUNEST_ENV is not properly set"
|
||||
die_on_status $VARIABLE_NOT_SET "The variable JUNEST_ENV is not properly set"
|
||||
fi
|
||||
|
||||
[ -z ${JUNEST_HOME} ] && JUNEST_HOME=~/.${CMD}
|
||||
|
|
@ -78,6 +85,8 @@ CURL="curl -L -J -O -k"
|
|||
TAR=tar
|
||||
CHOWN="chown"
|
||||
LN=ln
|
||||
RM=rm
|
||||
MKDIR=mkdir
|
||||
|
||||
LD_EXEC="$LD_LIB --library-path ${JUNEST_HOME}/usr/lib:${JUNEST_HOME}/lib"
|
||||
|
||||
|
|
@ -90,15 +99,15 @@ function ln_cmd(){
|
|||
}
|
||||
|
||||
function rm_cmd(){
|
||||
rm $@ || $LD_EXEC ${JUNEST_HOME}/usr/bin/rm $@
|
||||
$RM $@ || $LD_EXEC ${JUNEST_HOME}/usr/bin/$RM $@
|
||||
}
|
||||
|
||||
function chown_cmd(){
|
||||
$CHOWN $@ || $LD_EXEC ${JUNEST_HOME}/usr/bin/chown $@
|
||||
$CHOWN $@ || $LD_EXEC ${JUNEST_HOME}/usr/bin/$CHOWN $@
|
||||
}
|
||||
|
||||
function mkdir_cmd(){
|
||||
mkdir $@ || $LD_EXEC ${JUNEST_HOME}/usr/bin/mkdir $@
|
||||
$MKDIR $@ || $LD_EXEC ${JUNEST_HOME}/usr/bin/$MKDIR $@
|
||||
}
|
||||
|
||||
function proot_cmd(){
|
||||
|
|
@ -125,11 +134,6 @@ function chroot_cmd(){
|
|||
|
||||
################################# MAIN FUNCTIONS ##############################
|
||||
|
||||
NOT_AVAILABLE_ARCH=102
|
||||
NOT_EXISTING_FILE=103
|
||||
ARCHITECTURE_MISMATCH=104
|
||||
ROOT_ACCESS_ERROR=105
|
||||
|
||||
#######################################
|
||||
# Check if the JuNest system is installed in JUNEST_HOME.
|
||||
#
|
||||
|
|
@ -276,7 +280,7 @@ function run_env_as_root(){
|
|||
|
||||
# With chown the ownership of the files is assigned to the real user
|
||||
trap - QUIT EXIT ABRT KILL TERM INT
|
||||
trap "[ -z $uid ] || chown_cmd -R ${uid} ${JUNEST_HOME}; rm_cmd -f ${JUNEST_HOME}/etc/mtab" EXIT QUIT ABRT KILL TERM INT
|
||||
trap "[ -z $uid ] || chown_cmd -R ${uid} ${JUNEST_HOME};" EXIT QUIT ABRT KILL TERM INT
|
||||
|
||||
# The mtab file should already be available in the image.
|
||||
# This following instruction will be deleted
|
||||
|
|
@ -362,19 +366,35 @@ function run_env_as_user(){
|
|||
# The mtab file should already be available in the image.
|
||||
# This following instruction will be deleted
|
||||
[ ! -e ${JUNEST_HOME}/etc/mtab ] && ln_cmd -s /proc/self/mounts ${JUNEST_HOME}/etc/mtab
|
||||
_run_env_with_qemu "$(_provide_bindings_as_user) -r ${JUNEST_HOME} $1" "${@:2}"
|
||||
|
||||
_provide_bindings_as_user
|
||||
local bindings="$RESULT"
|
||||
unset RESULT
|
||||
_run_env_with_qemu "$bindings -r ${JUNEST_HOME} $1" "${@:2}"
|
||||
}
|
||||
|
||||
#######################################
|
||||
# Provide the proot binding options for the normal user.
|
||||
#
|
||||
# Globals:
|
||||
# HOME (RO) : The home directory.
|
||||
# RESULT (WO) : Contains the binding options.
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
# Output:
|
||||
# None
|
||||
#######################################
|
||||
function _provide_bindings_as_user(){
|
||||
# The list of bindings can be found in `proot --help`. This function excludes
|
||||
# /etc/mtab file so that it will not give conflicts with the related
|
||||
# symlink in the image.
|
||||
local existing_bindings=""
|
||||
RESULT=""
|
||||
for bind in "/etc/host.conf" "/etc/hosts" "/etc/hosts.equiv" "/etc/netgroup" "/etc/networks" "/etc/passwd" "/etc/group" "/etc/nsswitch.conf" "/etc/resolv.conf" "/etc/localtime" "/dev" "/sys" "/proc" "/tmp" "$HOME"
|
||||
do
|
||||
[ -e "$bind" ] && existing_bindings="-b $bind $existing_bindings"
|
||||
[ -e "$bind" ] && RESULT="-b $bind $RESULT"
|
||||
done
|
||||
echo $existing_bindings
|
||||
}
|
||||
|
||||
#######################################
|
||||
|
|
|
|||
|
|
@ -6,32 +6,27 @@ set +e
|
|||
|
||||
function oneTimeSetUp(){
|
||||
[ -z "$SKIP_ROOT_TESTS" ] && SKIP_ROOT_TESTS=0
|
||||
|
||||
CURRPWD=$PWD
|
||||
ENV_MAIN_HOME=/tmp/junest-test-home
|
||||
[ -e $ENV_MAIN_HOME ] || JUNEST_HOME=$ENV_MAIN_HOME bash -ic "source $CURRPWD/$(dirname $0)/../lib/utils.sh; source $CURRPWD/$(dirname $0)/../lib/core.sh; setup_env"
|
||||
JUNEST_HOME=""
|
||||
setUpUnitTests
|
||||
}
|
||||
|
||||
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/utils.sh"
|
||||
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)
|
||||
JUNEST_HOME=$(TMPDIR=/tmp mktemp -d -t junest-home.XXXXXXXXXX)
|
||||
mkdir -p ${JUNEST_HOME}/etc/junest
|
||||
echo "JUNEST_ARCH=x86_64" > ${JUNEST_HOME}/etc/junest/info
|
||||
mkdir -p ${JUNEST_HOME}/etc/ca-certificates
|
||||
JUNEST_TEMPDIR=$(TMPDIR=/tmp mktemp -d -t junest-temp.XXXXXXXXXX)
|
||||
source "$(dirname $0)/../lib/utils.sh"
|
||||
source "$(dirname $0)/../lib/core.sh"
|
||||
|
||||
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
|
||||
trap "rm -rf ${JUNEST_HOME}; rm -rf ${JUNEST_TEMPDIR}" EXIT QUIT ABRT KILL TERM INT
|
||||
|
||||
ld_exec() {
|
||||
echo "ld_exec $@"
|
||||
}
|
||||
LD_EXEC=ld_exec
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -39,18 +34,20 @@ 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(){
|
||||
assertCommandFail is_env_installed
|
||||
touch $JUNEST_HOME/just_file
|
||||
assertCommandSuccess is_env_installed
|
||||
}
|
||||
function test_ln(){
|
||||
LN=echo assertCommandSuccess ln_cmd -s ln_file new_file
|
||||
assertEquals "-s ln_file new_file" "$(cat $STDOUTF)"
|
||||
|
||||
LN=false assertCommandSuccess ln_cmd -s ln_file new_file
|
||||
assertEquals "ld_exec ${JUNEST_HOME}/usr/bin/false -s ln_file new_file" "$(cat $STDOUTF)"
|
||||
|
||||
LN=false LD_EXEC=false assertCommandFail ln_cmd
|
||||
}
|
||||
|
||||
function test_download(){
|
||||
WGET=/bin/true
|
||||
|
|
@ -64,236 +61,55 @@ function test_download(){
|
|||
WGET=/bin/false CURL=/bin/false assertCommandFail download_cmd
|
||||
}
|
||||
|
||||
function test_ln(){
|
||||
install_mini_env
|
||||
|
||||
touch ln_file
|
||||
assertCommandSuccess ln_cmd -s ln_file new_file
|
||||
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
|
||||
RM=echo assertCommandSuccess rm_cmd rm_file
|
||||
assertEquals "rm_file" "$(cat $STDOUTF)"
|
||||
|
||||
touch rm_file
|
||||
assertCommandSuccess rm_cmd rm_file
|
||||
assertTrue "[ ! -e rm_file ]"
|
||||
RM=false assertCommandSuccess rm_cmd rm_file
|
||||
assertEquals "ld_exec ${JUNEST_HOME}/usr/bin/false rm_file" "$(cat $STDOUTF)"
|
||||
|
||||
touch rm_file
|
||||
OLDPATH="$PATH"
|
||||
PATH=""
|
||||
rm_cmd rm_file 2> /dev/null
|
||||
local ret=$?
|
||||
PATH="$OLDPATH"
|
||||
assertEquals $ret 0
|
||||
assertTrue "[ ! -e rm_file ]"
|
||||
RM=false LD_EXEC=false assertCommandFail rm_cmd rm_file
|
||||
}
|
||||
|
||||
function test_chown(){
|
||||
install_mini_env
|
||||
|
||||
local id=$(id -u)
|
||||
|
||||
touch chown_file
|
||||
assertCommandSuccess chown_cmd $id chown_file
|
||||
CHOWN=echo assertCommandSuccess chown_cmd $id chown_file
|
||||
assertEquals "$id chown_file" "$(cat $STDOUTF)"
|
||||
|
||||
touch chown_file
|
||||
OLDPATH="$PATH"
|
||||
PATH=""
|
||||
chown_cmd $id chown_file 2> /dev/null
|
||||
local ret=$?
|
||||
PATH="$OLDPATH"
|
||||
assertEquals $ret 0
|
||||
CHOWN=false assertCommandSuccess chown_cmd $id chown_file
|
||||
assertEquals "ld_exec ${JUNEST_HOME}/usr/bin/false $id chown_file" "$(cat $STDOUTF)"
|
||||
|
||||
CHOWN=false LD_EXEC=false assertCommandFail chown_cmd $id chown_file
|
||||
}
|
||||
|
||||
function test_mkdir(){
|
||||
install_mini_env
|
||||
MKDIR=echo assertCommandSuccess mkdir_cmd -p new_dir/new_dir
|
||||
assertEquals "-p new_dir/new_dir" "$(cat $STDOUTF)"
|
||||
|
||||
assertCommandSuccess mkdir_cmd -p new_dir/new_dir
|
||||
assertTrue "[ -d new_dir/new_dir ]"
|
||||
rm -rf new_dir
|
||||
MKDIR=false assertCommandSuccess mkdir_cmd -p new_dir/new_dir
|
||||
assertEquals "ld_exec ${JUNEST_HOME}/usr/bin/false -p new_dir/new_dir" "$(cat $STDOUTF)"
|
||||
|
||||
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 ]"
|
||||
MKDIR=false LD_EXEC=false assertCommandFail mkdir_cmd -p 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_chroot(){
|
||||
CHROOT=echo assertCommandSuccess chroot_cmd root
|
||||
assertEquals "root" "$(cat $STDOUTF)"
|
||||
|
||||
assertCommandFailOnStatus 102 setup_env "noarch"
|
||||
CHROOT=false CLASSIC_CHROOT=echo assertCommandSuccess chroot_cmd root
|
||||
assertEquals "root" "$(cat $STDOUTF)"
|
||||
|
||||
CHROOT=false CLASSIC_CHROOT=false assertCommandSuccess chroot_cmd root
|
||||
assertEquals "ld_exec $JUNEST_HOME/usr/bin/chroot root" "$(cat $STDOUTF)"
|
||||
|
||||
CHROOT=false CLASSIC_CHROOT=false LD_EXEC=false assertCommandFail chroot_cmd root
|
||||
}
|
||||
|
||||
function test_proot_cmd_compat(){
|
||||
PROOT="/bin/true" assertCommandSuccess proot_cmd "" ""
|
||||
|
||||
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 ]"
|
||||
|
||||
assertCommandFailOnStatus 103 setup_env_from_file noexist.tar.gz
|
||||
}
|
||||
|
||||
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"
|
||||
|
||||
assertCommandSuccess run_env_as_root pwd
|
||||
assertEquals "/" "$(cat $STDOUTF)"
|
||||
assertCommandSuccess run_env_as_root [ -e /run/lock ]
|
||||
assertCommandSuccess run_env_as_root [ -e $HOME ]
|
||||
|
||||
# test that normal user has ownership of the files created by root
|
||||
assertCommandSuccess run_env_as_root touch /a_root_file
|
||||
assertCommandSuccess run_env_as_root stat -c '%u' /a_root_file
|
||||
assertEquals "$UID" "$(cat $STDOUTF)"
|
||||
|
||||
SH=("sh" "--login" "-c" "type -t type")
|
||||
assertCommandSuccess run_env_as_root
|
||||
assertEquals "builtin" "$(cat $STDOUTF)"
|
||||
SH=("sh" "--login" "-c" "[ -e /run/lock ]")
|
||||
assertCommandSuccess run_env_as_root
|
||||
SH=("sh" "--login" "-c" "[ -e $HOME ]")
|
||||
assertCommandSuccess run_env_as_root
|
||||
}
|
||||
|
||||
function test_run_env_as_root_different_arch(){
|
||||
[ $SKIP_ROOT_TESTS -eq 1 ] && return
|
||||
|
||||
install_mini_env
|
||||
echo "JUNEST_ARCH=XXX" > ${JUNEST_HOME}/etc/junest/info
|
||||
assertCommandFailOnStatus 104 run_env_as_root pwd
|
||||
}
|
||||
|
||||
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"
|
||||
|
||||
assertCommandSuccess run_env_as_root pwd
|
||||
assertEquals "/" "$(cat $STDOUTF)"
|
||||
assertCommandSuccess run_env_as_root [ -e /run/lock ]
|
||||
}
|
||||
|
||||
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"
|
||||
|
||||
assertCommandSuccess run_env_as_root pwd
|
||||
assertEquals "/" "$(cat $STDOUTF)"
|
||||
assertCommandSuccess run_env_as_root [ -e /run/lock ]
|
||||
assertCommandFail run_env_as_root [ -e $HOME ]
|
||||
}
|
||||
|
||||
function test_run_env_as_user(){
|
||||
install_mini_env
|
||||
assertCommandSuccess run_env_as_user "-k 3.10" "/usr/bin/mkdir" "-v" "/newdir2"
|
||||
assertEquals "/usr/bin/mkdir" "$(cat $STDOUTF| awk -F: '{print $1}')"
|
||||
assertTrue "[ -e $JUNEST_HOME/newdir2 ]"
|
||||
|
||||
SH=("/usr/bin/echo")
|
||||
assertCommandSuccess run_env_as_user "-k 3.10"
|
||||
assertEquals "-c :" "$(cat $STDOUTF)"
|
||||
}
|
||||
|
||||
function test_run_env_as_proot_mtab(){
|
||||
install_mini_env
|
||||
assertCommandSuccess run_env_as_fakeroot "-k 3.10" "echo"
|
||||
assertTrue "[ -e $JUNEST_HOME/etc/mtab ]"
|
||||
assertCommandSuccess 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"
|
||||
assertCommandSuccess run_env_as_root "echo"
|
||||
assertTrue "[ ! -e $JUNEST_HOME/etc/mtab ]"
|
||||
}
|
||||
|
||||
function test_run_env_with_quotes(){
|
||||
install_mini_env
|
||||
assertCommandSuccess run_env_as_user "-k 3.10" "bash" "-c" "/usr/bin/mkdir -v /newdir2"
|
||||
assertEquals "/usr/bin/mkdir" "$(cat $STDOUTF| awk -F: '{print $1}')"
|
||||
assertTrue "[ -e $JUNEST_HOME/newdir2 ]"
|
||||
}
|
||||
|
||||
function test_run_env_as_user_proot_args(){
|
||||
install_mini_env
|
||||
assertCommandSuccess run_env_as_user "--help" ""
|
||||
|
||||
mkdir $JUNEST_TEMPDIR/newdir
|
||||
touch $JUNEST_TEMPDIR/newdir/newfile
|
||||
assertCommandSuccess run_env_as_user "-b $JUNEST_TEMPDIR/newdir:/newdir -k 3.10" "ls" "-l" "/newdir/newfile"
|
||||
|
||||
assertCommandFail _run_env_with_proot --helps
|
||||
}
|
||||
|
||||
function test_run_env_with_proot_compat(){
|
||||
PROOT="/bin/true"
|
||||
assertCommandSuccess _run_env_with_proot "" ""
|
||||
|
||||
PROOT="/bin/false" assertCommandFail _run_env_with_proot --helps
|
||||
}
|
||||
|
||||
function test_run_env_with_proot_as_root(){
|
||||
[ $SKIP_ROOT_TESTS -eq 1 ] && return
|
||||
|
||||
install_mini_env
|
||||
|
||||
assertCommandFail sudo run_env_as_user
|
||||
assertCommandFail sudo run_env_as_fakeroot
|
||||
PROOT="/bin/false" assertCommandFail proot_cmd --helps
|
||||
}
|
||||
|
||||
function test_run_proot_seccomp(){
|
||||
|
|
@ -316,14 +132,146 @@ function test_run_proot_seccomp(){
|
|||
PROOT_NO_SECCOMP=1" "$(cat $STDOUTF | grep "^PROOT_NO_SECCOMP")"
|
||||
}
|
||||
|
||||
function test_is_env_installed(){
|
||||
rm -rf $JUNEST_HOME/*
|
||||
assertCommandFail is_env_installed
|
||||
touch $JUNEST_HOME/just_file
|
||||
assertCommandSuccess is_env_installed
|
||||
}
|
||||
|
||||
function test_setup_env(){
|
||||
rm -rf $JUNEST_HOME/*
|
||||
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 ]"
|
||||
|
||||
assertCommandFailOnStatus 102 setup_env "noarch"
|
||||
}
|
||||
|
||||
|
||||
function test_setup_env_from_file(){
|
||||
rm -rf $JUNEST_HOME/*
|
||||
touch file
|
||||
tar -czvf ${CMD}-${ARCH}.tar.gz file 1> /dev/null
|
||||
assertCommandSuccess setup_env_from_file ${CMD}-${ARCH}.tar.gz
|
||||
assertTrue "[ -e $JUNEST_HOME/file ]"
|
||||
}
|
||||
|
||||
function test_setup_env_from_file_not_existing_file(){
|
||||
assertCommandFailOnStatus 103 setup_env_from_file noexist.tar.gz
|
||||
}
|
||||
|
||||
function test_setup_env_from_file_with_absolute_path(){
|
||||
rm -rf $JUNEST_HOME/*
|
||||
touch file
|
||||
tar -czvf ${CMD}-${ARCH}.tar.gz file 1> /dev/null
|
||||
assertCommandSuccess setup_env_from_file ${ORIGIN_WD}/${CMD}-${ARCH}.tar.gz
|
||||
assertTrue "[ -e $JUNEST_HOME/file ]"
|
||||
}
|
||||
|
||||
function test_run_env_as_root_different_arch(){
|
||||
echo "JUNEST_ARCH=XXX" > ${JUNEST_HOME}/etc/junest/info
|
||||
assertCommandFailOnStatus 104 run_env_as_root pwd
|
||||
}
|
||||
|
||||
function _test_run_env_as_root() {
|
||||
chroot_cmd() {
|
||||
[ "$JUNEST_ENV" != "1" ] && return 1
|
||||
echo $@
|
||||
}
|
||||
|
||||
assertCommandSuccess run_env_as_root $@
|
||||
assertEquals "/proc/self/mounts" "$(readlink ${JUNEST_HOME}/etc/mtab)"
|
||||
}
|
||||
|
||||
function test_run_env_as_root_cmd(){
|
||||
_test_run_env_as_root pwd
|
||||
assertEquals "$JUNEST_HOME /bin/sh --login -c pwd" "$(cat $STDOUTF)"
|
||||
}
|
||||
|
||||
function test_run_env_as_classic_root_no_cmd(){
|
||||
_test_run_env_as_root
|
||||
assertEquals "$JUNEST_HOME /bin/sh --login -c /bin/sh --login" "$(cat $STDOUTF)"
|
||||
}
|
||||
|
||||
#function test_run_env_with_proot_as_root(){
|
||||
#[ $SKIP_ROOT_TESTS -eq 1 ] && return
|
||||
|
||||
#sudo run_env_as_user
|
||||
#sudo run_env_as_fakeroot
|
||||
#}
|
||||
|
||||
function test_run_env_as_user(){
|
||||
_run_env_with_qemu() {
|
||||
echo $@
|
||||
}
|
||||
assertCommandSuccess run_env_as_user "-k 3.10" "/usr/bin/mkdir" "-v" "/newdir2"
|
||||
_provide_bindings_as_user
|
||||
assertEquals "${RESULT}-r ${JUNEST_HOME} -k 3.10 /usr/bin/mkdir -v /newdir2" "$(cat $STDOUTF)"
|
||||
|
||||
SH=("/usr/bin/echo")
|
||||
assertCommandSuccess run_env_as_user "-k 3.10"
|
||||
_provide_bindings_as_user
|
||||
assertEquals "${RESULT}-r ${JUNEST_HOME} -k 3.10" "$(cat $STDOUTF)"
|
||||
}
|
||||
|
||||
function test_run_env_as_fakeroot(){
|
||||
install_mini_env
|
||||
assertCommandSuccess run_env_as_fakeroot "-k 3.10" "id"
|
||||
assertEquals "uid=0(root)" "$(cat $STDOUTF | awk '{print $1}')"
|
||||
_run_env_with_qemu() {
|
||||
echo $@
|
||||
}
|
||||
assertCommandSuccess run_env_as_fakeroot "-k 3.10" "/usr/bin/mkdir" "-v" "/newdir2"
|
||||
assertEquals "-S ${JUNEST_HOME} -k 3.10 /usr/bin/mkdir -v /newdir2" "$(cat $STDOUTF)"
|
||||
|
||||
SH=("/usr/bin/echo")
|
||||
assertCommandSuccess run_env_as_fakeroot "-k 3.10"
|
||||
assertEquals "-S ${JUNEST_HOME} -k 3.10" "$(cat $STDOUTF)"
|
||||
}
|
||||
|
||||
function test_run_env_as_proot_mtab(){
|
||||
_run_env_with_qemu() {
|
||||
echo $@
|
||||
}
|
||||
assertCommandSuccess run_env_as_fakeroot "-k 3.10" "echo"
|
||||
assertTrue "[ -e $JUNEST_HOME/etc/mtab ]"
|
||||
assertCommandSuccess run_env_as_user "-k 3.10" "echo"
|
||||
assertTrue "[ -e $JUNEST_HOME/etc/mtab ]"
|
||||
}
|
||||
|
||||
function test_run_env_with_quotes(){
|
||||
_run_env_with_qemu() {
|
||||
echo $@
|
||||
}
|
||||
assertCommandSuccess run_env_as_user "-k 3.10" "bash" "-c" "/usr/bin/mkdir -v /newdir2"
|
||||
_provide_bindings_as_user
|
||||
assertEquals "${RESULT}-r ${JUNEST_HOME} -k 3.10 bash -c /usr/bin/mkdir -v /newdir2" "$(cat $STDOUTF)"
|
||||
}
|
||||
|
||||
function test_run_env_with_proot_args(){
|
||||
proot_cmd() {
|
||||
[ "$JUNEST_ENV" != "1" ] && return 1
|
||||
echo $@
|
||||
}
|
||||
|
||||
assertCommandSuccess _run_env_with_proot --help
|
||||
assertEquals "--help /bin/sh --login" "$(cat $STDOUTF)"
|
||||
|
||||
assertCommandSuccess _run_env_with_proot --help mycommand
|
||||
assertEquals "--help /bin/sh --login -c mycommand" "$(cat $STDOUTF)"
|
||||
|
||||
assertCommandFail _run_env_with_proot
|
||||
}
|
||||
|
||||
function test_delete_env(){
|
||||
install_mini_env
|
||||
echo "N" | delete_env 1> /dev/null
|
||||
assertCommandSuccess is_env_installed
|
||||
echo "Y" | delete_env 1> /dev/null
|
||||
|
|
@ -331,9 +279,27 @@ function test_delete_env(){
|
|||
}
|
||||
|
||||
function test_nested_env(){
|
||||
install_mini_env
|
||||
JUNEST_ENV=1 bash -ic "source $CURRPWD/$(dirname $0)/../lib/utils.sh; source $CURRPWD/$(dirname $0)/../lib/core.sh" &> /dev/null
|
||||
assertEquals 1 $?
|
||||
JUNEST_ENV=1 assertCommandFailOnStatus 106 bash -ic "source $PWD/$(dirname $0)/../lib/utils.sh; source $PWD/$(dirname $0)/../lib/core.sh"
|
||||
}
|
||||
|
||||
function test_nested_env_not_set_variable(){
|
||||
JUNEST_ENV=aaa assertCommandFailOnStatus 107 bash -ic "source $PWD/$(dirname $0)/../lib/utils.sh; source $PWD/$(dirname $0)/../lib/core.sh"
|
||||
}
|
||||
|
||||
function test_qemu() {
|
||||
echo "JUNEST_ARCH=arm" > ${JUNEST_HOME}/etc/junest/info
|
||||
rm_cmd() {
|
||||
echo $@
|
||||
}
|
||||
ln_cmd() {
|
||||
echo $@
|
||||
}
|
||||
_run_env_with_proot() {
|
||||
echo $@
|
||||
}
|
||||
|
||||
RANDOM=100 ARCH=x86_64 assertCommandSuccess _run_env_with_qemu ""
|
||||
assertEquals "$(echo -e "-s $JUNEST_HOME/opt/qemu/qemu-arm-static-x86_64 /tmp/qemu-arm-static-x86_64-100\n-q /tmp/qemu-arm-static-x86_64-100")" "$(cat $STDOUTF)"
|
||||
}
|
||||
|
||||
source $(dirname $0)/shunit2
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue