tstInstallerLinux.sh revision cf0c5109e04ca2939c011edb5ac034987591fd9e
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse#!/bin/sh
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse#
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse# Oracle VM VirtualBox
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse# VirtualBox linux installation script unit test
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse#
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse# Copyright (C) 2007-2011 Oracle Corporation
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse#
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse# This file is part of VirtualBox Open Source Edition (OSE), as
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse# available from http://www.virtualbox.org. This file is free software;
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse# you can redistribute it and/or modify it under the terms of the GNU
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse# General Public License (GPL) as published by the Free Software
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse# Foundation, in version 2 as it comes in the "COPYING" file of the
bc8fd1b0b1afdf89b8d28eefa8cd74e26ba97986fielding# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse#
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse#include installer-utils.sh
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrseCERRS=0
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrseecho "Testing udev rule generation"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrseextern_test_input_install_udev() {
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse command="$1"
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse shift
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse case "$command" in
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse "which") my_which "$@";;
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse "test") my_test "$@";;
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse "rm") my_rm "$@";;
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse *) echo Unknown command $command >&2; exit 1;;
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse esac
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse}
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrsesetup_test_input_install_udev() {
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse # Set up unit testing environment for the "install_udev" function below.
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse TEST_NAME="$1" # used to identify the current test
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse TEST_UDEV_VERSION="$2" # udev version to simulate
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse EXTERN=extern_test_input_install_udev
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse eval 'my_which() { echo test_udev ; }'
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse eval 'my_test() { true ; }'
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse eval 'my_rm() { case "$2" in "/etc/udev/rules.d/60-vboxdrv.rules") true ;; *) echo "rm: bad file name \"$2\"!"; false ;; esac ; }'
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse eval 'test_udev() { echo "$TEST_UDEV_VERSION" ; }'
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse DELETED_UDEV_FILE=""
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse}
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rsesetup_test_input_install_udev ".run, udev-59" 59
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rseudev_59_rules=`cat <<'UDEV_END'
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rseKERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rseSUBSYSTEM=="usb_device", ACTION=="add", RUN+="/opt/VirtualBox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rseSUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", RUN+="/opt/VirtualBox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rseSUBSYSTEM=="usb_device", ACTION=="remove", RUN+="/opt/VirtualBox/VBoxCreateUSBNode.sh --remove $major $minor"
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rseSUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN+="/opt/VirtualBox/VBoxCreateUSBNode.sh --remove $major $minor"
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rseUDEV_END`
d86ef5503dcbc38e87c0e03cd3e1f16458cb6323rse
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrseinstall_udev_output="`install_udev vboxusers 0660 /opt/VirtualBox`"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrsecase "$install_udev_output" in
6ace32dacb8313226eb9019275d0e4fa45a15148rse "$udev_59_rules") ;;
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse *)
a943533fd4d91d114af622731a405407990c4fb1rse echo "Bad output for udev version 59. Expected:"
a943533fd4d91d114af622731a405407990c4fb1rse echo "$udev_59_rules"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse echo "Actual:"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse echo "$install_udev_output"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse CERRS="`expr "$CERRS" + 1`"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse ;;
7933d4a963def02417113b6798d87a36395053b0rseesac
7933d4a963def02417113b6798d87a36395053b0rse
71c00f988beb28388702e14cb7fe06f08bd792bbdougmsetup_test_input_install_udev ".run, udev-55" 55
71c00f988beb28388702e14cb7fe06f08bd792bbdougm
71c00f988beb28388702e14cb7fe06f08bd792bbdougmudev_55_rules=`cat <<'UDEV_END'
7933d4a963def02417113b6798d87a36395053b0rseKERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"
71c00f988beb28388702e14cb7fe06f08bd792bbdougmUDEV_END`
71c00f988beb28388702e14cb7fe06f08bd792bbdougm
71c00f988beb28388702e14cb7fe06f08bd792bbdougminstall_udev_output="`install_udev vboxusers 0660 /opt/VirtualBox`"
7933d4a963def02417113b6798d87a36395053b0rsecase "$install_udev_output" in
71c00f988beb28388702e14cb7fe06f08bd792bbdougm "$udev_55_rules") ;;
71c00f988beb28388702e14cb7fe06f08bd792bbdougm *)
71c00f988beb28388702e14cb7fe06f08bd792bbdougm echo "Bad output for udev version 55. Expected:"
7933d4a963def02417113b6798d87a36395053b0rse echo "$udev_55_rules"
7933d4a963def02417113b6798d87a36395053b0rse echo "Actual:"
d1bb6e2664788e0437acc18e877562c9a796d7cerse echo "$install_udev_output"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse CERRS="`expr "$CERRS" + 1`"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse ;;
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrseesac
7933d4a963def02417113b6798d87a36395053b0rse
7933d4a963def02417113b6798d87a36395053b0rsesetup_test_input_install_udev ".run, udev-54" 54
7933d4a963def02417113b6798d87a36395053b0rse
7933d4a963def02417113b6798d87a36395053b0rseudev_54_rules=`cat <<'UDEV_END'
7933d4a963def02417113b6798d87a36395053b0rseKERNEL="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="root", MODE="0600"
71c00f988beb28388702e14cb7fe06f08bd792bbdougmUDEV_END`
71c00f988beb28388702e14cb7fe06f08bd792bbdougm
7933d4a963def02417113b6798d87a36395053b0rseinstall_udev_output="`install_udev root 0600 /usr/lib/virtualbox`"
7933d4a963def02417113b6798d87a36395053b0rsecase "$install_udev_output" in
7933d4a963def02417113b6798d87a36395053b0rse "$udev_54_rules") ;;
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse *)
7933d4a963def02417113b6798d87a36395053b0rse echo "Bad output for udev version 54. Expected:"
7933d4a963def02417113b6798d87a36395053b0rse echo "$udev_54_rules"
7933d4a963def02417113b6798d87a36395053b0rse echo "Actual:"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse echo "$install_udev_output"
7933d4a963def02417113b6798d87a36395053b0rse CERRS="`expr "$CERRS" + 1`"
7933d4a963def02417113b6798d87a36395053b0rse ;;
7933d4a963def02417113b6798d87a36395053b0rseesac
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrseecho "Testing device node setup"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrseextern_test_input_install_device_node_setup() {
7933d4a963def02417113b6798d87a36395053b0rse command="$1"
7933d4a963def02417113b6798d87a36395053b0rse shift
7933d4a963def02417113b6798d87a36395053b0rse case "$command" in
7933d4a963def02417113b6798d87a36395053b0rse "install_udev")
7933d4a963def02417113b6798d87a36395053b0rse do_install_udev "$@";;
7933d4a963def02417113b6798d87a36395053b0rse "install_create_usb_node_for_sysfs")
7933d4a963def02417113b6798d87a36395053b0rse do_install_create_usb_node_for_sysfs "$@";;
7933d4a963def02417113b6798d87a36395053b0rse *)
7933d4a963def02417113b6798d87a36395053b0rse echo Unknown command $command >&2; exit 1;;
7933d4a963def02417113b6798d87a36395053b0rse esac
7933d4a963def02417113b6798d87a36395053b0rse}
7933d4a963def02417113b6798d87a36395053b0rse
7933d4a963def02417113b6798d87a36395053b0rsesetup_test_input_install_device_node_setup() {
7933d4a963def02417113b6798d87a36395053b0rse # Set up unit testing environment for the "install_udev" function below.
7933d4a963def02417113b6798d87a36395053b0rse test_drv_grp="$1" # The expected vboxdrv group
7933d4a963def02417113b6798d87a36395053b0rse test_drv_mode="$2" # The expected vboxdrv mode
7933d4a963def02417113b6798d87a36395053b0rse test_inst_dir="$3" # The expected installation directory
7933d4a963def02417113b6798d87a36395053b0rse test_usb_grp="$4" # The expected USB node group
7933d4a963def02417113b6798d87a36395053b0rse udev_rule_file=/dev/null
7933d4a963def02417113b6798d87a36395053b0rse sysfs_usb_devices=test_sysfs_path
7933d4a963def02417113b6798d87a36395053b0rse EXTERN=extern_test_input_install_device_node_setup
7933d4a963def02417113b6798d87a36395053b0rse eval 'do_install_udev() { test "$1" = "${test_drv_grp}" \
7933d4a963def02417113b6798d87a36395053b0rse -a "$2" = "${test_drv_mode}" \
7933d4a963def02417113b6798d87a36395053b0rse -a "$3" = "${test_inst_dir}" \
7933d4a963def02417113b6798d87a36395053b0rse -a "$4" = "${test_usb_grp}" \
7933d4a963def02417113b6798d87a36395053b0rse -a "$5" = "${INSTALL_NO_UDEV}" \
7933d4a963def02417113b6798d87a36395053b0rse || echo "do_install_udev: bad parameters: $@" >&2 ; }'
7933d4a963def02417113b6798d87a36395053b0rse eval 'do_install_create_usb_node_for_sysfs() { \
7933d4a963def02417113b6798d87a36395053b0rse test "$1" = "${sysfs_usb_devices}" \
7933d4a963def02417113b6798d87a36395053b0rse -a "$2" = "${test_inst_dir}/VBoxCreateUSBNode.sh" \
7933d4a963def02417113b6798d87a36395053b0rse -a "$3" = "${test_usb_grp}" \
7933d4a963def02417113b6798d87a36395053b0rse || echo "do_install_create_usb_node_for_sysfs: \
7933d4a963def02417113b6798d87a36395053b0rsebad parameters: $@" >&2 ; }'
7933d4a963def02417113b6798d87a36395053b0rse}
7933d4a963def02417113b6798d87a36395053b0rse
7933d4a963def02417113b6798d87a36395053b0rseunset INSTALL_NO_GROUP
7933d4a963def02417113b6798d87a36395053b0rseunset INSTALL_NO_UDEV
7933d4a963def02417113b6798d87a36395053b0rsesetup_test_input_install_device_node_setup vboxusers 0660 /opt/VirtualBox \
7933d4a963def02417113b6798d87a36395053b0rse vboxusb
7933d4a963def02417113b6798d87a36395053b0rse
7933d4a963def02417113b6798d87a36395053b0rsecommand="install_device_node_setup vboxusers 0660 /opt/VirtualBox vboxusb"
7933d4a963def02417113b6798d87a36395053b0rseerr="`${command} 2>&1`"
7933d4a963def02417113b6798d87a36395053b0rsetest -n "${err}" && {
7933d4a963def02417113b6798d87a36395053b0rse echo "${command} failed."
7933d4a963def02417113b6798d87a36395053b0rse echo "Error: ${err}"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse CERRS="`expr "$CERRS" + 1`"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse}
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrseINSTALL_NO_GROUP=1
7933d4a963def02417113b6798d87a36395053b0rseunset INSTALL_NO_UDEV
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrsesetup_test_input_install_device_node_setup root 0660 /opt/VirtualBox root
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse
7933d4a963def02417113b6798d87a36395053b0rsecommand="install_device_node_setup vboxusers 0660 /opt/VirtualBox vboxusb"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrseerr="`${command} 2>&1`"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrsetest -n "${err}" && {
8fdc55d1624c714391fe1f93ebafe98ace427f4adougm echo "${command} failed."
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse echo "Error: ${err}"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse CERRS="`expr "$CERRS" + 1`"
7933d4a963def02417113b6798d87a36395053b0rse}
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrseunset INSTALL_NO_GROUP
7933d4a963def02417113b6798d87a36395053b0rseINSTALL_NO_UDEV=1
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrsesetup_test_input_install_device_node_setup vboxusers 0660 /opt/VirtualBox \
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse vboxusb
7933d4a963def02417113b6798d87a36395053b0rse
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrsecommand="install_device_node_setup vboxusers 0660 /opt/VirtualBox vboxusb"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrseerr="`${command} 2>&1`"
7933d4a963def02417113b6798d87a36395053b0rsetest -n "${err}" && {
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse echo "${command} failed."
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse echo "Error: ${err}"
7933d4a963def02417113b6798d87a36395053b0rse CERRS="`expr "$CERRS" + 1`"
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse}
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrseecho "Done. Error count $CERRS."
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse