Add tests for core.sh #13

Included the tests for die as well.
This commit is contained in:
Filippo Squillace 2014-11-24 02:03:00 +01:00
parent 3a51433f0b
commit b0a0662575
5 changed files with 220 additions and 6 deletions

View file

@ -75,6 +75,10 @@ then
else
die "The variable JUJU_ENV is not properly set"
fi
CHROOT=${JUJU_HOME}/usr/bin/arch-chroot
TRUE=${JUJU_HOME}/usr/bin/true
################################# MAIN FUNCTIONS ##############################
function is_juju_installed(){
@ -160,12 +164,12 @@ function run_juju_as_root(){
[ "$JUJU_ENV" == "1" ] && die "Error: The operation is not allowed inside JuJu environment"
mkdir -p ${JUJU_HOME}/${HOME}
${JUJU_HOME}/usr/bin/arch-chroot $JUJU_HOME /usr/bin/bash -c "mkdir -p /run/lock && $(_define_chroot_args "$@")"
${CHROOT} $JUJU_HOME /usr/bin/bash -c "mkdir -p /run/lock && $(_define_chroot_args "$@")"
}
function _run_juju_with_proot(){
if ${PROOT} ${JUJU_HOME}/usr/bin/true &> /dev/null
if ${PROOT} ${TRUE} &> /dev/null
then
JUJU_ENV=1 ${PROOT} $@
else

5
tests/test_all.sh Executable file
View file

@ -0,0 +1,5 @@
for tst in $(ls $(dirname $0)/test_* | grep -v $(basename $0))
do
$tst
done

154
tests/test_core.sh Executable file
View file

@ -0,0 +1,154 @@
#!/bin/bash
# To test this module you need to run it inside a Archlinux system. Also, the following packages needs to be installed:
# bash
# pacman
# arch-install-scripts
# proot
# coreutils
# grep
# sudo
source "$(dirname $0)/utils.sh"
CURRPWD=$PWD
JUJU_HOME=""
function set_up(){
cd $CURRPWD
JUJU_HOME=$(TMPDIR=/tmp mktemp -d -t jujuhome.XXXXXXXXXX)
source "$(dirname $0)/../lib/core.sh"
ORIGIN_WD=$(TMPDIR=/tmp mktemp -d -t jujuowd.XXXXXXXXXX)
cd $ORIGIN_WD
JUJU_TEMPDIR=$(TMPDIR=/tmp mktemp -d -t jujutemp.XXXXXXXXXX)
}
function tear_down(){
rm -rf $JUJU_HOME
rm -rf $ORIGIN_WD
rm -rf $JUJU_TEMPDIR
}
function test_is_juju_installed(){
is_juju_installed
is_equal $? 1 || return 1
touch $JUJU_HOME/just_file
is_juju_installed
is_equal $? 0 || return 1
}
function test_setup_juju(){
wget_mock(){
# Proof that the setup is happening
# inside $JUJU_TEMPDIR
local cwd=${PWD#${JUJU_TEMPDIR}}
local parent_dir=${PWD%${cwd}}
is_equal $JUJU_TEMPDIR ${parent_dir} || return 1
touch file
tar -czvf juju-${ARCH}.tar.gz file
}
WGET=wget_mock
setup_juju 1> /dev/null
[ -e $JUJU_HOME/file ] || return 1
[ -e $JUJU_HOME/run/lock ] || return 1
export -f setup_juju
JUJU_ENV=1 bash -ic "setup_juju" &> /dev/null
is_equal $? 1 || return 1
}
function test_setup_from_file_juju(){
touch file
tar -czvf juju-${ARCH}.tar.gz file 1> /dev/null
setup_from_file_juju juju-${ARCH}.tar.gz 1> /dev/null
[ -e $JUJU_HOME/file ] || return 1
[ -e $JUJU_HOME/run/lock ] || return 1
export -f setup_from_file_juju
bash -ic "setup_from_file_juju noexist.tar.gz" &> /dev/null
is_equal $? 1 || return 1
export -f setup_from_file_juju
JUJU_ENV=1 bash -ic "setup_from_file_juju" &> /dev/null
is_equal $? 1 || return 1
}
function test_run_juju_as_root(){
install_mini_juju
CHROOT="sudo $CHROOT"
SH="type -t type"
local output=$(run_juju_as_root)
is_equal $output "builtin" || return 1
local output=$(run_juju_as_root pwd)
is_equal $output "/" || return 1
run_juju_as_root "[ -e /run/lock ]"
is_equal $? 0 || return 1
[ -e $JUJU_HOME/${HOME} ] || return 1
export -f run_juju_as_root
JUJU_ENV=1 bash -ic "run_juju_as_root" &> /dev/null
is_equal $? 1 || return 1
}
function test_run_juju_as_user(){
install_mini_juju
local output=$(run_juju_as_user "" "mkdir -v /newdir2")
is_equal "$output" "/usr/bin/mkdir: created directory '/newdir2'" || return 1
[ -e $JUJU_HOME/newdir2 ]
is_equal $? 0 || return 1
SH="mkdir -v /newdir"
local output=$(run_juju_as_user "")
is_equal "$output" "/usr/bin/mkdir: created directory '/newdir'" || return 1
[ -e $JUJU_HOME/newdir ]
is_equal $? 0 || return 1
}
function test_run_juju_as_user_proot_args(){
install_mini_juju
run_juju_as_user "--help" "" 1> /dev/null
is_equal $? 0 || return 1
run_juju_as_user "--helps" "" &> /dev/null
is_equal $? 1 || return 1
mkdir $JUJU_TEMPDIR/newdir
touch $JUJU_TEMPDIR/newdir/newfile
run_juju_as_user "-b $JUJU_TEMPDIR/newdir:/newdir" "ls -l /newdir/newfile" 1> /dev/null
is_equal $? 0 || return 1
}
#function test_run_juju_as_user_seccomp(){
#install_mini_juju
#TRUE="/usr/bin/false"
#run_juju_as_user "" "env" "|" "grep" "PROOT_NO_SECCOMP"
#}
#function test_run_juju_as_fakeroot(){
#install_mini_juju
#local output=$(run_juju_as_fakeroot "" "bash")
#is_equal "$output" "root" || return 1
#}
function test_delete_juju(){
install_mini_juju
echo "N" | delete_juju 1> /dev/null
is_juju_installed
is_equal $? 0 || return 1
echo "Y" | delete_juju 1> /dev/null
is_juju_installed
is_equal $? 1 || return 1
export -f delete_juju
JUJU_ENV=1 bash -ic "delete_juju" &> /dev/null
is_equal $? 1 || return 1
}
for func in $(declare -F | grep test_ | awk '{print $3}' | xargs)
do
set_up
$func && echo -e "${func}...\033[1;32mOK\033[0m" || echo -e "${func}...\033[1;31mFAIL\033[0m"
tear_down
done

8
tests/util.sh → tests/test_util.sh Normal file → Executable file
View file

@ -1,9 +1,7 @@
#!/bin/bash
source "$(dirname $0)/utils.sh"
source "$(dirname $0)/../lib/util.sh"
function is_equal(){
[ "$1" == "$2" ] || return 1 && return 0
}
function test_echoerr(){
local actual=$(echoerr "Test" 2>&1)
is_equal "$actual" "Test" || return 1
@ -35,6 +33,8 @@ function test_die(){
local actual=$(die "Test" 2>&1)
local expected=$(echo -e "\033[1;31mTest\033[0m")
is_equal "$actual" "$expected" || return 1
bash -ic "die Dying" &> /dev/null
is_equal $? 1 || return 1
return 0
}

51
tests/utils.sh Normal file
View file

@ -0,0 +1,51 @@
function install_executable(){
for i in $( ldd $* | grep -v dynamic | cut -d " " -f 3 | sed 's/://' | sort | uniq )
do
cp --parents $i $JUJU_HOME
done
# ARCH amd64
if [ -f /lib64/ld-linux-x86-64.so.2 ]; then
cp --parents /lib64/ld-linux-x86-64.so.2 $JUJU_HOME
fi
# ARCH i386
if [ -f /lib/ld-linux.so.2 ]; then
cp --parents /lib/ld-linux.so.2 $JUJU_HOME
fi
cp --parent $* $JUJU_HOME/
}
function install_package(){
pacman -Ql $1 | grep "/$" | sed 's/.* //' | xargs -I {} mkdir -p $JUJU_HOME/{}
pacman -Ql $1 | grep -v "/$" | sed 's/.* //' | xargs -I {} cp -f -a --parents {} $JUJU_HOME
#export -f install_executable
#export JUJU_HOME
#pacman -Ql $1 | sed 's/.* //' | grep "^/usr/bin/" | xargs -I {} bash -ic "install_executable {}"
}
function install_mini_juju(){
mkdir -p ${JUJU_HOME}/{proc,bin,sys,dev,run,tmp,etc}
touch ${JUJU_HOME}/etc/resolv.conf
mkdir -p ${JUJU_HOME}/usr/bin
#echo "root:x:0:0:root:/root:/bin/bash" > ${JUJU_HOME}/etc/passwd
#cp /etc/nsswitch.conf ${JUJU_HOME}
cp /usr/bin/arch-chroot ${JUJU_HOME}/usr/bin
install_executable /usr/bin/bash
install_executable /usr/bin/ls
install_executable /usr/bin/whoami
install_executable /usr/bin/grep
install_executable /usr/bin/mkdir
install_executable /usr/bin/proot
install_package bash
install_package talloc
install_package proot
install_package coreutils
install_package grep
ln -s /usr/bin/bash $JUJU_HOME/bin/sh
}
function is_equal(){
[ "$1" == "$2" ] || return 1 && return 0
}