376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync#!/bin/sh
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# $Id$
025d7357441b87b062242068f4be85249ffc8da6vboxsync## @file
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# VirtualBox init file creator unit test.
025d7357441b87b062242068f4be85249ffc8da6vboxsync#
025d7357441b87b062242068f4be85249ffc8da6vboxsync
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync#
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync# Copyright (C) 2012-2013 Oracle Corporation
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync#
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# This file is part of VirtualBox Open Source Edition (OSE), as
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# available from http://www.virtualbox.org. This file is free software;
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# you can redistribute it and/or modify it under the terms of the GNU
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# General Public License (GPL) as published by the Free Software
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# Foundation, in version 2 as it comes in the "COPYING" file of the
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync#
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# This will initially be a skeleton with a couple of tests - add more for quick
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# debugging when you suspect that something isn't working as specified.
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync
2b114c590cf5a19f8047cd7bde9c7e5ae00aa22bvboxsynctab=" "
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynctmpbase="/tmp/tstInstallInit 99" # Space in the name for a little stress...
025d7357441b87b062242068f4be85249ffc8da6vboxsyncif [ -n "${TESTBOX_PATH_SCRATCH}" ]; then
025d7357441b87b062242068f4be85249ffc8da6vboxsync tmpbase="${TESTBOX_PATH_SCRATCH}/tstInstallInit 99"
025d7357441b87b062242068f4be85249ffc8da6vboxsyncfi
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync## The function definition at the start of every non-trivial shell script!
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncabort()
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync{
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync ## $1 Error text to output to standard error in printf format.
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync cat >&2 << EOF
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync${TEST_NAME}: $1
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncEOF
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync exit 1
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync}
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync## Print a TESTING line.
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncprint_line()
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync{
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync cat >&2 << EOF
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync${TEST_NAME}: TESTING $1
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncEOF
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync}
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync## Set the failure message if it is not yet set.
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncfail_msg()
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync{
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync test -z "${failed}" && failed="FAILED: ${1}"
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync}
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# Get the directory where the script is located and the parent.
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncOUR_FOLDER=`dirname "$0"`
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncOUR_FOLDER=`cd "${OUR_FOLDER}" && pwd`
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncVBOX_FOLDER=`cd "${OUR_FOLDER}/.." && pwd`
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync[ -d "${VBOX_FOLDER}" ] ||
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync abort "Failed to change to directory ${VBOX_FOLDER}.\n"
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsynccd "${VBOX_FOLDER}"
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# Get our name for output.
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncTEST_NAME="$(basename "$0" .sh)"
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# Create a trivial test service in temporary directory $1 with name $2.
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsynctest_service()
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync{
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync cat > "${1}/${2}" << EOF
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync#!/bin/sh
025d7357441b87b062242068f4be85249ffc8da6vboxsynctrap "touch \"${1}/stopped\"; exit" TERM
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncecho "1: \${1} 2: \${2} 3: \${3}" > "${1}/started"
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncwhile true; do true; done
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncEOF
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncchmod u+x "${1}/${2}"
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync}
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync# Create a trivial test command in temporary directory $1 with name $2.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsynctest_oneshot()
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync{
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync cat > "${1}/${2}" << EOF
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync#!/bin/sh
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncif test "\${1}" = start; then
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync touch "${1}/started"
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncelse
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync rm "${1}/started"
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncfi
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncexit 0
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncEOF
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncchmod u+x "${1}/${2}"
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync}
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# Test some dodgy input values against generate_service_file.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync# Make sure there is a substitution pattern at the end too.
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncprint_line "generation of shell script from template."
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncinput='TEST1%DESCRIPTION%%%%SERVICE_NAME%%STOP_COMMAND% TST2 TEST %ARGUMENTS%%COMMAND%'
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncout=`echo "${input}" |
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync helpers/generate_service_file --command '/usr/bin
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncaries/hello
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncworld' --arguments 'p\x0a0\n\ \t' --format shell --description ''`
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncexpected='TEST1%hello
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncworld TST2 TEST '\''p
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync0
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync '"${tab}"\'\''/usr/bin
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncaries/hello
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncworld'\'
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsynccase "${out}" in ${expected})
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncecho "SUCCESS (1)";;
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync*)
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsynccat << EOF
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncFAILED: expected
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync${expected}
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncbut got
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync${out}
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncEOF
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncesac
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncinput='TEST%HAVE_STOP_COMMAND%%SERVICE_NAME%%STOP_COMMAND% TST2
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync TEST %COMMAND%'
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncout=`echo "${input}" |
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync helpers/generate_service_file --command '/usr/bin/hello' --format shell --description ''`
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncexpected='TEST TEST '\''/usr/bin/hello'\'''
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsynccase "${out}" in ${expected})
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncecho "SUCCESS (2)";;
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync*)
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsynccat << EOF
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncFAILED: expected
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync${expected}
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncbut got
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync${out}
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncEOF
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncesac
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncinput='TEST%HAVE_STOP_COMMAND%%SERVICE_NAME%%STOP_COMMAND% %STOP_ARGUMENTS% TST2
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync TEST %COMMAND%'
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncout=`echo "${input}" |
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync helpers/generate_service_file --command '/usr/bin/hello' --format shell --description '' --stop-command /usr/bin/stop --stop-arguments hello`
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncexpected='TESThello'\''/usr/bin/stop'\'' '\''hello'\'' TST2
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync TEST '\''/usr/bin/hello'\'''
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsynccase "${out}" in ${expected})
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncecho "SUCCESS (3)";;
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync*)
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsynccat << EOF
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncFAILED: expected
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync${expected}
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncbut got
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync${out}
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncEOF
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncesac
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Create a simulated init system layout.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynccreate_simulated_init_tree()
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync{
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync tmpdir="${1}"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync rm -rf "${tmpdir}"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync mkdir -m 0700 "${tmpdir}" || abort "Failed to create a temporary folder."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync mkdir -p "${tmpdir}/init.d/" "${tmpdir}/rc.d/init.d/"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync for i in 0 1 2 3 4 5 6; do
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync mkdir "${tmpdir}/rc${i}.d/" "${tmpdir}/rc.d/rc${i}.d/"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync done
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsync mkdir -p "${tmpdir}/runlevel/default" "${tmpdir}/runlevel/boot"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync mkdir "${tmpdir}/run"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync}
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Test an init script installation.
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncprint_line "installing an init script."
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncfailed=""
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# Create a simulated init system layout.
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsynctmpdir="${tmpbase}0"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynccreate_simulated_init_tree "${tmpdir}"
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# Create the service binary.
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsynctest_service "${tmpdir}" "service"
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# And install it.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncscripts/install_service --prefix "${tmpdir}" --enable -- --command "${tmpdir}/service" --arguments "test of my\ arguments" --description "My description" ||
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsync fail_msg "\"scripts/install_service\" failed."
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# Check that the main service file was created as specified.
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncif test -x "${tmpdir}/init.d/service"; then
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync grep "Short-Description: My description" "${tmpdir}/init.d/service" >/dev/null ||
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync fail_msg "Description not set in \"${tmpdir}/init.d/service\""
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncelse
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync fail_msg "\"${tmpdir}/init.d/service\" not correctly created."
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncfi
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsynctest -x "${tmpdir}/init.d/rc.d/service" &&
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync fail_msg "\"${tmpdir}/init.d/rc.d/service\" created but shouldn't have been."
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# Try to start the service using the symbolic links which should have been
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# created.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncif "${tmpdir}/rc3.d/S20service" --prefix "${tmpdir}" --lsb-functions "" start >/dev/null 2>&1; then
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync if grep "1: test 2: of 3: my arguments" "${tmpdir}/started" >/dev/null; then
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync test -f "${tmpdir}/stopped" &&
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync fail_msg "\"${tmpdir}/rc3.d/S20service\" stopped immediately."
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync else
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync fail_msg "\"${tmpdir}/rc3.d/S20service\" did not start correctly."
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync fi
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncelse
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync fail_msg "could not start \"${tmpdir}/rc3.d/S20service\"."
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncfi
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# Check the status.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync"${tmpdir}/rc.d/rc5.d/S20service" --prefix "${tmpdir}" --lsb-functions "" status >/dev/null 2>&1 ||
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync fail_msg "\"${tmpdir}/rc.d/rc5.d/S20service\" reported the wrong status."
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# Try to stop the service using the symbolic links which should have been
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# created.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncif "${tmpdir}/rc.d/rc6.d/K80service" --prefix "${tmpdir}" --lsb-functions "" stop >/dev/null 2>&1; then
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync test -f "${tmpdir}/stopped" ||
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync echo "\"${tmpdir}/rc.d/rc6.d/K80service\" did not stop correctly."
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncelse
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync fail_msg "could not stop \"${tmpdir}/rc.d/rc6.d/K80service\"."
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncfi
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# Check the status again - now it should be stopped.
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsync"${tmpdir}/runlevel/service" --prefix "${tmpdir}" --lsb-functions "" status >/dev/null 2>&1 &&
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsync fail_msg "\"${tmpdir}/runlevel/service\" reported the wrong status."
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync# Final summary.
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncif test -n "${failed}"; then
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync echo "${failed}"
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncelse
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsync echo SUCCESS
376e7522b2055ec5f2834c8e52dfefbee1c5ea8bvboxsyncfi
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync# Test an one shot init script installation.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncprint_line "installing a one shot init script."
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncfailed=""
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync# Create a simulated init system layout.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsynctmpdir="${tmpbase}0"
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsynccreate_simulated_init_tree "${tmpdir}"
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync# Create the command binary.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsynctest_oneshot "${tmpdir}" "command"
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync# And install the script.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncscripts/install_service --prefix "${tmpdir}" --enable -- --command "${tmpdir}/command" --arguments "start" --description "My description" --stop-command "${tmpdir}/command" --stop-arguments "stop" --one-shot ||
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync fail_msg "\"scripts/install_service\" failed."
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync# Sanity test.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsynctest -f "${tmpdir}/started" &&
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync fail_msg "\"${tmpdir}/started\" already exists!"
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync# Try to start the service using the symbolic links which should have been
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync# created.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncif "${tmpdir}/rc3.d/S20command" --prefix "${tmpdir}" --lsb-functions "" start >/dev/null 2>&1; then
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync test -f "${tmpdir}/started" ||
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync fail_msg "\"${tmpdir}/rc3.d/S20command\" did not start correctly."
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncelse
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync fail_msg "could not start \"${tmpdir}/rc3.d/S20command\"."
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncfi
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync# Try to stop the service using the symbolic links which should have been
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync# created.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncif "${tmpdir}/rc.d/rc6.d/K80command" --prefix "${tmpdir}" --lsb-functions "" stop >/dev/null 2>&1; then
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync test -f "${tmpdir}/started" &&
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync echo "\"${tmpdir}/rc.d/rc6.d/K80command\" did not stop correctly."
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncelse
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync fail_msg "could not stop \"${tmpdir}/rc.d/rc6.d/K80command\"."
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncfi
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync# Final summary.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncif test -n "${failed}"; then
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync echo "${failed}"
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncelse
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync echo SUCCESS
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncfi
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsync
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Test an init script removal.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncprint_line "removing an init script."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncfailed=""
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Create a simulated init system layout.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynctmpdir="${tmpbase}0"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynccreate_simulated_init_tree "${tmpdir}"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Create the service binary.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynctest_service "${tmpdir}" "service"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Install it.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncscripts/install_service --prefix "${tmpdir}" --enable -- --command "${tmpdir}/service" --arguments "test of my\ arguments" --description "My description" ||
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsync fail_msg "\"scripts/install_service\" failed."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# And remove it again.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncscripts/install_service --prefix "${tmpdir}" --remove -- --command "${tmpdir}/service" ||
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsync fail_msg "\"scripts/install_service\" failed."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# After uninstallation this should be the only file left in the init tree.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncrm "${tmpdir}/service"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynctest "x`find "${tmpdir}" -type f -o -type l`" = "x" ||
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync fail_msg "not all files were removed."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Final summary.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncif test -n "${failed}"; then
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync echo "${failed}"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncelse
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync echo SUCCESS
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncfi
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Test an enabled init script update with --disable.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncprint_line "updating an enabled init script with --disable."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncfailed=""
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Create a simulated init system layout.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynctmpdir="${tmpbase}1"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynccreate_simulated_init_tree "${tmpdir}"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Create the service binary.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynctest_service "${tmpdir}" "service"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Install it.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncscripts/install_service --prefix "${tmpdir}" --enable -- --command "${tmpdir}/service" --arguments "test of my\ arguments" --description "My description" ||
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsync fail_msg "\"scripts/install_service\" failed."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Install it disabled without forcing.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncscripts/install_service --prefix "${tmpdir}" --disable -- --command "${tmpdir}/service" --arguments "test of my\ arguments" --description "My description" ||
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsync fail_msg "\"scripts/install_service\" failed."
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsynctest "x`find "${tmpdir}"/rc*.d "${tmpdir}/runlevel" -type l | wc -l`" = "x15" ||
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync fail_msg "links were removed on non-forced disable."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Final summary.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncif test -n "${failed}"; then
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync echo "${failed}"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncelse
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync echo SUCCESS
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncfi
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Test updating a disabled init script with --enable.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncprint_line "updating a disabled init script with --enable."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncfailed=""
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Create a simulated init system layout.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynctmpdir="${tmpbase}2"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynccreate_simulated_init_tree "${tmpdir}"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Create the service binary.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynctest_service "${tmpdir}" "service"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Install it.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncscripts/install_service --prefix "${tmpdir}" --disable -- --command "${tmpdir}/service" --arguments "test of my\ arguments" --description "My description" ||
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsync fail_msg "\"scripts/install_service\" failed."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Install it disabled without forcing.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncscripts/install_service --prefix "${tmpdir}" --enable -- --command "${tmpdir}/service" --arguments "test of my\ arguments" --description "My description" ||
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsync fail_msg "\"scripts/install_service\" failed."
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsynctest "x`find "${tmpdir}"/rc*.d "${tmpdir}/runlevel" -type l`" = "x" ||
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync fail_msg "files were installed on non-forced enable."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Final summary.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncif test -n "${failed}"; then
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync echo "${failed}"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncelse
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync echo SUCCESS
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncfi
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Test an enabled init script update with --force-disable.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncprint_line "updating an enabled init script with --force-disable."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncfailed=""
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Create a simulated init system layout.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynctmpdir="${tmpbase}3"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynccreate_simulated_init_tree "${tmpdir}"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Create the service binary.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynctest_service "${tmpdir}" "service"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Install it.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncscripts/install_service --prefix "${tmpdir}" --enable -- --command "${tmpdir}/service" --arguments "test of my\ arguments" --description "My description" ||
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsync fail_msg "\"scripts/install_service\" failed."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Install it disabled without forcing.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncscripts/install_service --prefix "${tmpdir}" --force-disable -- --command "${tmpdir}/service" --arguments "test of my\ arguments" --description "My description" ||
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsync fail_msg "\"scripts/install_service\" failed."
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsynctest "x`find "${tmpdir}"/rc*.d "${tmpdir}/runlevel" -type l`" = "x" ||
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync fail_msg "links were not removed on forced disable."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Final summary.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncif test -n "${failed}"; then
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync echo "${failed}"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncelse
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync echo SUCCESS
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncfi
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Test updating a disabled init script with --force-enable.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncprint_line "updating a disabled init script with --force-enable."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncfailed=""
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Create a simulated init system layout.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynctmpdir="${tmpbase}4"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynccreate_simulated_init_tree "${tmpdir}"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Create the service binary.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsynctest_service "${tmpdir}" "service"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Install it.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncscripts/install_service --prefix "${tmpdir}" --disable -- --command "${tmpdir}/service" --arguments "test of my\ arguments" --description "My description" ||
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsync fail_msg "\"scripts/install_service\" failed."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Install it disabled without forcing.
71fdb328d336f29be4f9ba0f2c4623a76ebd775cvboxsyncscripts/install_service --prefix "${tmpdir}" --force-enable -- --command "${tmpdir}/service" --arguments "test of my\ arguments" --description "My description" ||
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsync fail_msg "\"scripts/install_service\" failed."
0061bacd3b997f9647e72c7d2c6a4106823dafacvboxsynctest "x`find "${tmpdir}"/rc*.d "${tmpdir}/runlevel" -type l | wc -l`" = "x15" ||
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync fail_msg "files were not installed on forced enable."
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync# Final summary.
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncif test -n "${failed}"; then
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync echo "${failed}"
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncelse
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsync echo SUCCESS
64c0ad75ee4c79c2c2138c5f7d07c6fe58357149vboxsyncfi