Files
chromebrew/tests/unit_test.sh

107 lines
4.3 KiB
Bash
Executable File

#!/bin/bash
# This is for use as a Github CI Unit Test.
# Version 1.8
set -e
cd /usr/local/lib/crew/packages/
# We have some tests for specific files that aren't run as part of our general testsuite, but we should run those tests if those files are changed.
for file in ${NON_PKG_CHANGED_FILES}; do
# The only files with direct corresponding tests are located in the root of the commands, lib, and tools directories.
echo "commands lib tools" | grep -q "$(dirname "${file}")" || continue
# If we have modified a file that has a direct corresponding test, run that test.
[[ -f "../tests/${file}" ]] && ruby "../tests/${file}"
done
echo "CREW_BRANCH: $CREW_BRANCH"
git clone --depth=1 --branch="$CREW_BRANCH" "$CREW_REPO" ~/build_test
require_gem () {
set +e
for g in "$@"
do
install_gem=0
# Check to see if the gem is recorded as installed AND if there are
# gem contents before assuming that the gem is installed.
if gem list --no-update-sources -l -e "$g" 2>/dev/null | grep -q "$g"; then
:
else
install_gem=1
fi
# shellcheck disable=SC2143
if [[ $(gem contents "$g" 2>/dev/null | grep 'Unable to find gem') ]] || [[ "$(gem contents "$g" 2>/dev/null | wc -l)" == "0" ]]; then
install_gem=1
else
:
fi
[[ $install_gem == '1' ]] && gem install -N "$g"
done
set -e
}
require_gem regexp_parser dagwood ruby-libversion highline ptools cgi rubocop rubocop-chromebrew
# Check if rubocop-chromebrew is installed and working, and if not install it.
rubocop --require rubocop-chromebrew &>/dev/null || gem install rubocop-chromebrew
# crew wont let you build if you're in the installation directory.
(cd ~/build_test && yes | CREW_CACHE_ENABLED=1 crew build -vf ~/build_test/packages/hello_world_chromebrew.rb)
yes | crew install vim
yes | crew remove vim
# This fails due to glibc changes since the older git tag we are testing
# against.
## Only test the core functionality of crew if non-package files were modified.
#if [[ -n ${NON_PKG_CHANGED_FILES-} ]]; then
## Check if rake is installed and working, and if not install it.
#rake --help &>/dev/null || gem install rake
## This runs the default rake action, which in our case runs the tests for commands and libraries.
#rake -C..
## Reset to an older version so we can test lib/fixup.rb
#git reset --hard effb4326b18a8731bee2f4f45010646b82900034
## This is a side-effect of resetting to an older version while having newer packages installed-- this is not an issue encountered by users updating from an old version.
#gem install resolv-replace
## epydoc gets deprecated, and dstat gets renamed to py3_dool
#yes | crew install epydoc dstat
#yes | crew update
#echo "Checking that epydoc was removed successfully."
#crew list installed | grep -vq "epydoc"
#echo "Checking that dstat was renamed to py3_dool."
#crew list installed | grep -q "py3_dool"
#fi
# Some packages are placeholders not meant to be installed.
skip_install_packages='py3_unsupported_python'
# Some packages don't handle being removed well.
skip_remove_packages=''
if [[ -n ${CHANGED_PACKAGES-} ]]; then
all_compatible_packages=$(crew list -d compatible)
all_installed_packages=$(crew list -d installed)
for pkg in ${CHANGED_PACKAGES}
do
# Only check packages compatible with the architecture being run on.
if echo "${all_compatible_packages}" | grep "^${pkg}$"; then
ruby ../tests/prop_test.rb "${pkg}"
ruby ../tests/buildsystem_test.rb "${pkg}"
if echo "${all_installed_packages}" | grep "^${pkg}$"; then
echo "Testing reinstall of ${pkg}."
yes | time crew reinstall "${pkg}"
else
if echo "${skip_install_packages}" | grep "^${pkg}$"; then
echo "Skipping install test for ${pkg}."
else
echo "Testing install of ${pkg}."
yes | time crew install "${pkg}"
fi
fi
if echo "${skip_remove_packages}" | grep "^${pkg}$"; then
echo "Skipping remove test for ${pkg}."
# Removal of essential packages is expected to fail.
elif [[ $(crew list -d essential) == *"${pkg}"* ]]; then
echo "Testing removal of essential package ${pkg}."
yes | time crew remove "${pkg}" || true
else
echo "Testing removal of ${pkg}."
yes | time crew remove -f "${pkg}"
fi
else
echo "${pkg^} is not compatible."
fi
done
fi