#!/bin/bash set -eu IMAGE_ID=$1 DIST=$2 function desc() { echo "================================" echo -n "TEST: " echo "$@" echo "================================" } function test() { test_extra_args '' "$@" } function test_extra_args() { local extra_args=$1 shift docker run --rm $extra_args -e DEBIAN_FRONTEND=noninteractive "$IMAGE_ID" "$@" echo "" echo TEST: OK echo "" } desc "Checking that apt is installed" test dpkg -l apt desc "Checking that a package can be installed with apt" test bash -c 'apt-get update && apt-get -y install less && less --help >/dev/null' desc "Checking that a package can be installed with install_packages and that it removes cache dirs" test bash -c 'install_packages less && less --help >/dev/null && [ ! -e /var/cache/apt/archives ] && [ ! -e /var/lib/apt/lists ]' desc "Checking that the debootstrap dir wasn't left in the image" test bash -c '[ ! -e /debootstrap ]' desc "Check that all base packages are correctly installed, including dependencies" # Ask apt to install all packages that are already installed, has the effect of checking the # dependencies are correctly available test bash -c 'apt-get update && (dpkg-query -W -f \${Package} | while read pkg; do apt-get install $pkg; done)' desc "Check that install_packages doesn't loop forever on failures" # This won't install and will fail. The key is that the retry loop will stop after a few iterations. # We check that we didn't install the package afterwards, just in case a package gets added with that name. # We wrap the whole thing in a timeout so that it doesn't loop forever. It's not ideal to have a timeout as there may be spurious failures if the network is slow. test bash -c 'timeout 360 bash -c "(install_packages thispackagebetternotexist || true) && ! dpkg -l thispackagebetternotexist"' # See https://github.com/bitnami/minideb/issues/17 desc "Checking that the terminfo is valid when running with -t (#17)" echo "" | test_extra_args '-t' bash -c 'install_packages procps && top -d1 -n1 -b' MYSQL_PACKAGE=default-mysql-server if [ "jessie" == "$DIST" ]; then MYSQL_PACKAGE=mysql-server fi # See https://github.com/bitnami/minideb/issues/16 desc "Check that we can install mysql-server (#16)" test install_packages $MYSQL_PACKAGE function shadow_check() { local path=$1 test bash -c "(! cut -d: -f3 < $path | grep -v 17885 >/dev/null) || (cat $path && false)" } desc "Check that all users have a fixed day as the last password change date in /etc/shadow" shadow_check /etc/shadow desc "Check that all users have a fixed day as the last password change date in /etc/shadow-" shadow_check /etc/shadow-