[Ovirt-devel] [PATCH node] Update autobuild and autotest scripts for new build structure
Mike Burns
mburns at redhat.com
Mon Mar 29 15:37:03 UTC 2010
On Fri, 2010-03-26 at 18:25 -0400, Mike Burns wrote:
> Autobuild has to be updated to call make in the recipe directory
> and move the resulting iso to the main build directory.
>
> Importing the existing autotest.sh script from ovirt-node-image
>
> Signed-off-by: Mike Burns <mburns at redhat.com>
> ---
> autobuild.sh | 7 +
> autotest.sh | 764 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 771 insertions(+), 0 deletions(-)
>
> diff --git a/autobuild.sh b/autobuild.sh
> index 0ac1e58..8517164 100755
> --- a/autobuild.sh
> +++ b/autobuild.sh
> @@ -41,3 +41,10 @@ if [ -f /usr/bin/rpmbuild ]; then
> fi
> rpmbuild --nodeps --define "extra_release $EXTRA_RELEASE" -ta --clean *.tar.gz
> fi
> +
> +#make iso
> +cd recipe
> +make
previous line should be
make ovirt-node-image.iso
I will re-submit this patch when the final version of Darryl's patches
get accepted.
> +
> +#copy iso back to main directory for autotest.sh
> +cp *iso ..
> diff --git a/autotest.sh b/autotest.sh
> index 05a7907..32a60d9 100755
> --- a/autotest.sh
> +++ b/autotest.sh
> @@ -1,2 +1,766 @@
> #!/bin/bash
> +#
> +# oVirt node autotest script
> +#
> +# Copyright (C) 2009 Red Hat, Inc.
> +# Written by Darryl L. Pierce <dpierce at redhat.com>
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; version 2 of the License.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
> +# MA 02110-1301, USA. A copy of the GNU General Public License is
> +# also available at http://www.gnu.org/copyleft/gpl.html.
>
> +# To include autotesting on the build system, you need to insert the
> +# following snippet *BEFORE* the text that reads "Output Stages":
> +# ---8<[begin]---
> +# # Integration test
> +# {
> +# name = integration
> +# label = Test group
> +# module = Test::AutoBuild::Stage::Test
> +# # Don't abort entire cycle if the module test fails
> +# critical = 0
> +# }
> +# ---8<[end]---
> +#
> +# This will, for each module whose autobuild.sh is run, to have a matching
> +# autotest.sh to run as well.
> +#
> +# To run these tests locally, you will need to open port 69 TCP and UDP and have
> +# an ISO file.
> +
> +ME=$(basename "$0")
> +WORKDIR=$(mktemp -d)
> +warn() { printf '%s: %s\n' "$ME" "$*" >&2; }
> +die() { warn "$*"; exit 1; }
> +debug() { if $debugging; then log "[DEBUG] %s" "$*"; fi }
> +
> +trap '__st=$?; cleanup_after_testing; exit $__st' 1 2 3 13 15
> +trap 'cleanup_after_testing' 0
> +
> +# set -e
> +# set -u
> +
> +log () {
> + date=$(date)
> + printf "${date} $*\n"
> +}
> +
> +usage () {
> + cat <<EOF
> +Usage: $ME [-n test_name] [LOGFILE]
> + -i: set the ISO filename (defualt: ovirt-node-image.iso)
> + -n: the name of the specific autotest to run (default: run all autotests)
> + -d: enable more verbose output (default: disabled)
> + -t: change the timeout between markers (in ms, default: 120)
> + -v: enable tracing (default: disabled)
> + -w: launch virt-viewer for each VM (default: no window shown)
> + -h: display this help and exit
> +EOF
> +}
> +
> +# $1 - the test function to call
> +execute_test () {
> + local testname=$1
> +
> + if [ -z $testname ]; then die "Missing test name"; fi
> +
> + log "Executing test: $testname"
> +
> + eval $testname
> +
> + rc=$?
> + log "Completed test: $testname [result=$rc]"
> +
> + if [ $rc -ne 0 ]; then
> + log "Build fails smoke tests."
> + fi
> +
> + return $rc
> +}
> +
> +# setup a node for pxeboot
> +# $1 - the working directory
> +# $2 - kernel arguments; if present then they replace all default flags
> +setup_pxeboot () {
> + local workdir=$1
> + local kernelargs=$2
> + local pxedefault=$workdir/tftpboot/pxelinux.cfg/default
> +
> + debug "setup for pxeboot: isofile=${isofile} workdir=${workdir} kernelargs='${kernelargs}' pxedefault=${pxedefault}"
> + (cd $workdir && sudo livecd-iso-to-pxeboot $isofile) > /dev/null 2>&1
> + sudo chmod -R 777 $workdir
> +
> + # set default kernel arguments if none were provided
> + # the defaults boot in standalone mode
> + if [ -z "$kernelargs" ]; then
> + kernelargs="standalone"
> + fi
> +
> + local definition="DEFAULT pxeboot"
> + definition="${definition}\nTIMEOUT 20"
> + definition="${definition}\nPROMPT 0"
> + definition="${definition}\nLABEL pxeboot"
> + definition="${definition}\n KERNEL vmlinuz0"
> + definition="${definition}\n IPAPPEND 2"
> + definition="${definition}\n APPEND rootflags=loop initrd=initrd0.img root=/${isoname} rootfstype=auto console=tty0 check console=ttyS0,115200n8 $kernelargs"
> +
> + debug "pxeboot definition=\n${definition}"
> + sudo bash -c "printf \"${definition}\" > $pxedefault"
> +}
> +
> +# Starts a simple instance of dnsmasq.
> +# $1 - the iface on which dnsmasq works
> +# $2 - the root for tftp files
> +# $3 - the mac address for the node (ignored if blank)
> +# $4 - the nodename
> +start_dnsmasq () {
> + local iface=$1
> + local tftproot=$2
> + local macaddress=$3
> + local nodename=$4
> + local pidfile=$2/dnsmasq.pid
> +
> + stop_dnsmasq
> + debug "Starting dnsmasq"
> + dns_startup="sudo /usr/sbin/dnsmasq --read-ethers
> + --dhcp-range=${NETWORK}.100,${NETWORK}.254,255.255.255.0,24h
> + --conf-file=
> + --interface=${iface}
> + --bind-interfaces
> + --except-interface=lo
> + --dhcp-boot=tftpboot/pxelinux.0
> + --enable-tftp
> + --tftp-root=${tftproot}
> + --log-facility=$WORKDIR/dnsmasq-${nodename}.log
> + --log-queries
> + --log-dhcp
> + --pid-file=${pidfile}"
> + if [ -n "$macaddress" ]; then
> + dns_startup="${dns_startup} --dhcp-host=${macaddress},${NODE_ADDRESS}"
> + fi
> + # start dnsmasq
> + eval $dns_startup
> + debug "pidfile=$pidfile"
> + DNSMASQ_PID=$(sudo cat $pidfile)
> + debug "DNSMASQ_PID=${DNSMASQ_PID}"
> +}
> +
> +# Kills the running instance of dnsmasq.
> +stop_dnsmasq () {
> + if [ -n "${DNSMASQ_PID-}" -a "${DNSMASQ_PID-}" != "0" ]; then
> + local check=$(ps -ef | awk "/${DNSMASQ_PID}/"' { if ($2 ~ '"${DNSMASQ_PID}"') print $2 }')
> +
> + if [[ "${check}" == "${DNSMASQ_PID}" ]]; then
> + sudo kill -9 $DNSMASQ_PID
> + return
> + fi
> + fi
> + DNSMASQ_PID="0"
> +}
> +
> +# Creates a virt network.
> +# $1 - the node name
> +# $2 - the network interface name
> +# $3 - use DHCP (any value)
> +# $4 - start dnsmsq (def. false)
> +start_networking () {
> + local nodename=$1
> + local ifacename=$2
> + local use_dhcp=${3-false}
> + local start_dnsmasq=${4-false}
> + local workdir=$5
> + local definition=""
> + local network=$NETWORK
> + local xmlfile=$WORKDIR/$nodename-$ifacename.xml
> +
> + debug "start_networking ()"
> + for var in nodename ifacename use_dhcp start_dnsmasq workdir network xmlfile; do
> + eval debug "::$var: \$$var"
> + done
> +
> + definition="<network>\n<name>${ifacename}</name>\n<forward mode='nat' />\n<bridge name='${ifacename}' stp='on' forwardDelay='0' />"
> + definition="${definition}\n<ip address='${network}.1' netmask='255.255.255.0'>"
> + if $use_dhcp; then
> + definition="${definition}\n<dhcp>\n<range start='${network}.100' end='${network}.199' />\n</dhcp>"
> + fi
> + definition="${definition}\n</ip>\n</network>"
> +
> + debug "Saving network definition file to: ${xmlfile}\n"
> + sudo printf "${definition}" > $xmlfile
> + sudo virsh net-define $xmlfile > /dev/null 2>&1
> + debug "Starting network."
> + sudo virsh net-start $ifacename > /dev/null 2>&1
> +
> + if [ "${use_dhcp}" == "false" ]; then
> + if $start_dnsmasq; then
> + start_dnsmasq $ifacename $workdir "" $nodename
> + fi
> + fi
> +}
> +
> +# Destroys the test network interface
> +# $1 - the network name
> +# $2 - stop dnsmasq (def. false)
> +stop_networking () {
> + local networkname=${1-}
> + local stop_dnsmasq=${2-true}
> +
> + # if no network was supplied, then check for the global network
> + if [ -z "$networkname" ]; then
> + networkname=${NETWORK_NAME-}
> + fi
> +
> + # exit if preserve was enabled
> + if $preserve_vm; then return; fi
> +
> + if [ -n "${networkname}" ]; then
> + debug "Destroying network interface: ${networkname}"
> + check=$(sudo virsh net-list --all)
> + if [[ "${check}" =~ "${networkname}" ]]; then
> + if [[ "{$check}" =~ active ]]; then
> + sudo virsh net-destroy $networkname > /dev/null 2>&1
> + fi
> + sudo virsh net-undefine $networkname > /dev/null 2>&1
> + fi
> + fi
> +
> + if $stop_dnsmasq; then
> + stop_dnsmasq
> + fi
> +}
> +
> +# creates a HD disk file
> +# $1 - filename for disk file
> +# $2 - size (##M or ##G)
> +create_hard_disk () {
> + local filename=$1
> + local size=$2
> +
> + debug "Creating hard disk: filename=${filename} size=${size}"
> + sudo qemu-img create -f raw $filename "${size}M" > /dev/null 2>&1
> + sudo chcon -t virt_image_t $filename > /dev/null 2>&1
> +}
> +
> +# Creates the XML for a virtual machine.
> +# $1 - the file to write the xml
> +# $2 - the node name
> +# $3 - memory size (in kb)
> +# $4 - boot device
> +# $5 - the local hard disk (if blank then no disk is used)
> +# $6 - the cdrom disk (if blank then no cdrom is used)
> +# $7 - the network bridge (if blank then 'default' is used)
> +# $8 - optional arguments
> +define_node () {
> + local filename=$1
> + local nodename=$2
> + local memory=$3
> + local boot_device=$4
> + local harddrive=$5
> + local cddrive=$6
> + local bridge=${7-default}
> + local options=${8-}
> + local result=""
> +
> + # flexible options
> + # define defaults, then allow the caller to override them as needed
> + local arch=$(uname -i)
> + local serial="true"
> + local vncport="-1"
> + local bootdev='hd'
> +
> + # first destroy the node
> + destroy_node $nodename
> +
> + if [ -n "$options" ]; then eval "$options"; fi
> +
> + debug "define_node ()"
> + for var in filename nodename memory harddrive cddrive bridge options arch serial vncport bootdev; do
> +eval debug "::$var: \$$var"
> + done
> +
> + result="<domain type='kvm'>\n<name>${nodename}</name>\n<memory>${memory}</memory>\n <vcpu>1</vcpu>"
> +
> + # begin the os section
> + # inject the boot device
> + result="${result}\n<os>\n<type arch='${arch}' machine='pc'>hvm</type>"
> + result="${result}\n<boot dev='${boot_device}' />"
> + result="${result}\n</os>"
> +
> + # virtual machine features
> + result="${result}\n<features>"
> + result="${result}\n<acpi />"
> + if [ -z "${noapic-}" ]; then result="${result}\n<apic />"; fi
> + result="${result}\n<pae /></features>"
> + result="${result}\n<clock offset='utc' />"
> + result="${result}\n<on_poweroff>destroy</on_poweroff>"
> + result="${result}\n<on_reboot>restart</on_reboot>"
> + result="${result}\n<on_crash>restart</on_crash>"
> +
> + # add devices
> + result="${result}\n<devices>"
> + # inject the hard disk if defined
> + if [ -n "$harddrive" ]; then
> + debug "Adding a hard drive to the node"
> + result="${result}\n<disk type='file' device='disk'>"
> + result="${result}\n<source file='$harddrive' />"
> + result="${result}\n<target dev='vda' bus='virtio' />"
> + result="${result}\n</disk>"
> + fi
> + # inject the cdrom drive if defined
> + if [ -n "$cddrive" ]; then
> + debug "Adding a CDROM drive to the node"
> + result="${result}\n<disk type='file' device='cdrom'>"
> + result="${result}\n<source file='${cddrive}' />"
> + result="${result}\n<target dev='hdc' bus='ide' />"
> + result="${result}\n</disk>"
> + fi
> + # inject the bridge network
> + result="${result}\n<interface type='network'>"
> + result="${result}\n<source network='${bridge}' />"
> + result="${result}\n</interface>"
> + # inject the serial port
> + if [ -n "$serial" ]; then
> + result="${result}\n<serial type='pty' />"
> + fi
> + # inject the vnc port
> + if [ -n "$vncport" ]; then
> + result="${result}\n<console type='pty' />"
> + result="${result}\n<graphics type='vnc' port='${vncport}' autoport='yes' keyman='en-us' />"
> + fi
> + # finish the device section
> + result="${result}\n</devices>"
> +
> + result="${result}\n</domain>"
> +
> + debug "Node definition: ${filename}"
> + sudo printf "$result" > $filename
> +
> + # now define the vm
> + sudo virsh define $filename > /dev/null 2>&1
> +
> + if [ $? != 0 ]; then die "Unable to define virtual machine: $nodename"; fi
> +}
> +
> +# $1 - the node name
> +# $2 - the boot device (def. "hd")
> +# $3 - the memory size in kb (def. 524288)
> +# $4 - hard disk size (if blank then no hard disk)
> +# $5 - the cd drive image file (if blank then no cd drive)
> +# $6 - option arguments
> +configure_node () {
> + local nodename=$1
> + local boot_device=$2
> + local memory=$3
> + local hdsize=$4
> + local hdfile=""
> + local cdfile=$5
> + local args=$6
> + local nodefile=$WORKDIR/$nodename.xml
> +
> + if [ -z "${boot_device}" ]; then boot_device="hd"; fi
> + if [ -z "${memory}" ]; then memory="524288"; fi
> +
> + debug "configure_node ()"
> + for var in nodename boot_device memory hdsize hdfile cdfile args nodefile; do
> + eval debug "::$var: \$$var"
> + done
> +
> + # create the hard disk file
> + if [ -n "${hdsize}" ]; then
> + hdfile=$WORKDIR/$nodename-hd.img
> + create_hard_disk $hdfile $hdsize
> + fi
> +
> + define_node $nodefile $nodename "${memory}" "${boot_device}" "${hdfile}" "${cdfile}" $IFACE_NAME "${args}"
> +}
> +
> +# $1 - the node name
> +# $2 - undefine the node (def. true)
> +destroy_node () {
> + local nodename=$1
> + local undefine=${2-true}
> +
> + # if preserving nodes then exit
> + if $preserve_vm; then return; fi
> +
> + if [ -n "${nodename}" ]; then
> + check=$(sudo virsh list --all)
> + if [[ "${check}" =~ "${nodename}" ]]; then
> + if [[ "${check}" =~ running ]]; then
> + sudo virsh destroy $nodename > /dev/null 2>&1
> + fi
> + if $undefine; then
> + sudo virsh undefine $nodename > /dev/null 2>&1
> + fi
> + fi
> + fi
> +}
> +
> +# for each test created, add it to the follow array:
> +tests=''; testcount=0;
> +
> +# $1 - test name
> +add_test () {
> + tests="${tests} $1"
> +}
> +
> +# $1 - node name
> +start_virt_viewer () {
> + local nodename=$1
> +
> + sudo virt-viewer $nodename > /dev/null 2>&1&
> +}
> +
> +# $1 - the node's name
> +# $2 - kernel arguments
> +# $3 - working directory
> +boot_with_pxe () {
> + local nodename=$1
> + local kernel_args=$2
> + local workdir=$3
> +
> + debug "boot_with_pxe ()"
> + debug "- workdir: ${workdir}"
> + debug "- nodename: ${nodename}"
> + debug "- kernel_args: ${kernel_args}"
> +
> + setup_pxeboot $workdir "${kernel_args}"
> +
> + sudo virsh start $nodename > /dev/null 2>&1
> + if $show_viewer; then
> + start_virt_viewer $nodename
> + fi
> +}
> +
> +# $1 - the node's name
> +boot_from_hd () {
> + local nodename=$1
> +
> + debug "boot_from_hd ()"
> + debug "::nodename: ${nodename}"
> +
> + sudo virsh start $nodename > /dev/null 2>&1
> + if $show_viewer; then
> + start_virt_viewer $nodename
> + fi
> +}
> +
> +# $1 - the node name
> +# $2 - the old boot device
> +# $3 - the new boot device
> +substitute_boot_device () {
> + local nodename=$1
> + local old_device=$2
> + local new_device=$3
> + local new_node_file=$WORKDIR/$nodename-new.xml
> +
> + if [ -n "${nodename}" ]; then
> + local xml=$(sudo virsh dumpxml $nodename | sed "s/boot dev='"${old_device}"'/boot dev='"${new_device}"'/")
> +
> + sudo printf "${xml}" > $new_node_file
> +
> + sudo virsh define $new_node_file
> + fi
> +}
> +
> +add_test "test_stateless_pxe"
> +test_stateless_pxe () {
> + local nodename="${vm_prefix}-stateless-pxe"
> + local workdir=$WORKDIR
> +
> + start_networking $nodename $IFACE_NAME false true $workdir
> +
> + configure_node "${nodename}" "network" "" "10000" "" "local noapic=true"
> + boot_with_pxe "${nodename}" "standalone firstboot=no" "${workdir}"
> +
> + expect -c '
> +set timeout '${timeout_period}'
> +
> +log_file -noappend stateless-pxe.log
> +
> +spawn sudo virsh console '"${nodename}"'
> +
> +expect {
> + -exact "Linux version" { send_log "\n\nMarker 1\n\n"; exp_continue }
> + -exact "Starting ovirt-early:" { send_log "\n\nMarker 2\n\n"; exp_continue }
> + -exact "Starting ovirt:" { send_log "\n\nMarker 3\n\n"; exp_continue }
> + -exact "Starting ovirt-post:" { send_log "\n\nMarker 4\n\n"; exp_continue }
> + -re "localhost.*login:" { send_log "\n\nMarker 5\n\n"; exit }
> + timeout {
> +send_log "\nTimeout waiting for marker..\n\n"
> +exit 1
> + } eof {
> +send_log "Unexpected end of file."
> +exit 2
> + }
> +}
> +
> +send_log "\n\nUnexpected end of interaction.\n\n"
> +exit 3'
> + result=$?
> +
> + destroy_node $nodename
> + stop_networking $IFACE_NAME true
> +
> + return $result
> +}
> +
> +add_test "test_stateless_pxe_with_nohd"
> +test_stateless_pxe_with_nohd () {
> + local nodename="${vm_prefix}-stateless-pxe-nohd"
> + local workdir=$WORKDIR
> +
> + start_networking $nodename $IFACE_NAME false true $workdir
> +
> + configure_node "${nodename}" "network" "" "" "" "local noapic=true"
> + boot_with_pxe "${nodename}" "firstboot=no" "${workdir}"
> +
> + expect -c '
> +set timeout '${timeout_period}'
> +
> +log_file -noappend stateless-pxe.log
> +
> +spawn sudo virsh console '"${nodename}"'
> +
> +expect {
> + -exact "Linux version" { send_log "\n\nMarker 1\n\n"; exp_continue }
> + -exact "Starting ovirt-early:" { send_log "\n\nMarker 2\n\n"; exp_continue }
> + -exact "Starting ovirt:" { send_log "\n\nMarker 3\n\n"; exp_continue }
> + -exact "Starting ovirt-post:" { send_log "\n\nMarker 4\n\n"; exp_continue }
> + -re "localhost.*login:" { send_log "\n\nMarker 5\n\n"; exit }
> + timeout {
> + send_log "\nTimeout waiting for marker..\n\n"
> + exit 1
> + } eof {
> + send_log "Unexpected end of file."
> + exit 2
> + }
> +}
> +
> +send_log "\n\nUnexpected end of interaction.\n\n"
> +exit 3'
> +
> + result=$?
> +
> + destroy_node $nodename
> + stop_networking $IFACE_NAME true
> +
> + return $result
> +}
> +
> +add_test "test_stateful_pxe"
> +test_stateful_pxe () {
> + local nodename="${vm_prefix}-stateful-pxe"
> + local workdir=$WORKDIR
> + local ipaddress=${NODE_ADDRESS}
> +
> + for var in nodename workdir ipaddress; do
> + eval debug "::\$$var: $var"
> + done
> +
> + start_networking $nodename $IFACE_NAME false true $workdir
> +
> + configure_node "${nodename}" "network" "" "10000" "" "local noapic=true"
> + boot_with_pxe "${nodename}" "standalone storage_init=/dev/vda local_boot ip=${ipaddress}" ${workdir}
> +
> + # verify the booting and installation
> + expect -c '
> +set timeout '${timeout_period}'
> +log_file -noappend stateful-pxe.log
> +
> +spawn sudo virsh console '"${nodename}"'
> +
> +expect {
> + -exact "Linux version" { send_log "\n\nMarker 1\n\n"; exp_continue }
> + -exact "Starting ovirt-early:" { send_log "\n\nMarker 2\n\n"; exp_continue }
> + -exact "Starting ovirt:" { send_log "\n\nMarker 3\n\n"; exp_continue }
> + -exact "Starting ovirt-post:" { send_log "\n\nMarker 4\n\n"; exp_continue }
> + -exact "Starting ovirt-firstpost:" { send_log "\n\nMarker 5\n\n"; exp_continue }
> + -exact "Starting partitioning of /dev/vda" { send_log "\n\nMarker 6\n\n"; exp_continue }
> + -exact "Restarting system" { send_log "\n\nMarker 7\n\n"; exit }
> + timeout {
> +send_log "\nTimeout waiting for marker..\n\n"
> +exit 1
> + } eof {
> +send_log "Unexpected end of file."
> +exit 2
> + }
> +}
> +
> +send_log "\n\nUnexpected end of interaction.\n\n"
> +exit 3'
> + result=$?
> +
> + # only continue if we're in a good state
> + if [ $result -eq 0 ]; then
> + destroy_node "${nodename}" false
> + substitute_boot_device "${nodename}" "network" "hd"
> + boot_from_hd "${nodename}"
> +
> + expect -c '
> +set timeout '${timeout_period}'
> +log_file stateful-pxe.log
> +
> +send_log "Restarted node, booting from hard disk.\n"
> +
> +spawn sudo virsh console '"${nodename}"'
> +
> +expect {
> + -re "localhost.*login:" { send_log "\n\nLogin marker found\n\n"; exit }
> +
> + timeout {
> +send_log "\nMarker not found.\n\n"
> +exit 1
> + } eof {
> +send_log "Unexpected end of file."
> +exit 2
> + }
> +}
> +
> +send_log "\n\nUnexpected end of interaction.\n\n"
> +
> +exit 3
> +'
> +
> + expect -c '
> +set timeout 3
> +log_file stateful-pxe.log
> +
> +spawn ping -c 3 '"${ipaddress}"'
> +
> +expect {
> + -exact "64 bytes from '"${ipaddress}"'" { send_log "\n\nGot ping response!\n"; send_log "\n\nNetworking verified!\n"; exit }
> +
> + timeout {
> +send_log "\nMarker not found.\n\n"
> +exit 1
> + } eof {
> +send_log "Unexpected end of file."
> +exit 2
> + }
> +}
> +
> +send_log "\n\nUnexpected end of interaction.\n\n"
> +
> +exit 3'
> +
> +result=$?
> + fi
> +
> + destroy_node $nodename
> + stop_networking $IFACE_NAME true
> +
> + return $result
> +
> +}
> +
> +# configures the environment for testing
> +setup_for_testing () {
> + debug "WORKDIR=${WORKDIR}"
> + debug "isofile=${isofile}"
> + debug "isoname=${isoname}"
> + IFACE_NAME=testbr$$
> + debug "IFACE_NAME=${IFACE_NAME}"
> + NETWORK=192.168.$(echo "scale=0; print $$ % 255" | bc -l)
> + debug "NETWORK=${NETWORK}"
> + NODE_ADDRESS=$NETWORK.100
> + debug "NODE_ADDRESS=${NODE_ADDRESS}"
> + DNSMASQ_PID=0
> + debug "preserve_vm=${preserve_vm}"
> +}
> +
> +# cleans up any loose ends
> +cleanup_after_testing () {
> + debug "Cleaning up"
> + stop_dnsmasq
> + stop_networking
> + # destroy any running vms
> + vm_list=$(sudo virsh list --all | awk '/'${vm_prefix}-'/ { print $2 }')
> + test -n "$vm_list" && for vm in $vm_list; do
> + destroy_node $vm
> + done
> + stop_networking
> +
> + # do not delete the work directory if preserve was specified
> + if $preserve_vm; then return; fi
> +
> + rm -rf $WORKDIR
> +}
> +
> +# check commandline options
> +test=''
> +debugging=false
> +isofile="${PWD}/ovirt-node-image.iso"
> +show_viewer=false
> +vm_prefix="$$"
> +preserve_vm=false
> +timeout_period="120"
> +
> +while getopts di:n:pt:vwh c; do
> + case $c in
> + d) debugging=true;;
> + i) isofile=($OPTARG);;
> + n) tests=($OPTARG);;
> + p) preserve_vm=true;;
> + t) timeout_period=($OPTARG);;
> + v) set -v;;
> + w) show_viewer=true;;
> + h) usage; exit 0;;
> + '?') die "invalid option \`-$OPTARG'";;
> + :) die "missing argument to \`-$OPTARG' option";;
> + *) die "internal error";;
> + esac
> +done
> +
> +isoname=$(basename $isofile)
> +isofile="$(cd `dirname $isofile`; pwd)/${isoname}"
> +
> +if ! [ -s "${isofile}" ]; then
> + die "Missing or invalid file: ${isofile}"
> +fi
> +
> +shift $(($OPTIND - 1))
> +
> +set +u
> +if [ $# -gt 0 -a -n "$1" ]; then RESULTS=$1; else RESULTS=autotest.log; fi
> +set -u
> +
> +result_file=$WORKDIR/results.log
> +debug "result_file=${result_file}"
> +
> +log "Logging results to file: ${RESULTS}"
> +{
> + setup_for_testing
> +
> + log "Begin Testing: ${isoname}"
> + log "Tests: ${tests}"
> + log "Timeout: ${timeout_period} ms"
> +
> + for test in ${tests}; do
> + execute_test $test
> + result=$?
> +
> + if [ $result != 0 ]; then
> + echo "${result}" > $result_file
> + break
> + fi
> + done
> +
> + log "End Testing: ${isoname}"
> +
> +} | sudo tee --append $RESULTS
> +
> +if [ -s "$result_file" ]; then
> + exit $(cat $result_file)
> +fi
More information about the ovirt-devel
mailing list