diff --git a/xCAT-test/autotest/testcase/signal/cases0 b/xCAT-test/autotest/testcase/signal/cases0 new file mode 100644 index 000000000..efd959a5e --- /dev/null +++ b/xCAT-test/autotest/testcase/signal/cases0 @@ -0,0 +1,4 @@ +start:genimage_sigint +cmd:/opt/xcat/share/xcat/tools/autotest/testcase/signal/test-sigint-genimage.sh +check:rc==0 +end diff --git a/xCAT-test/autotest/testcase/signal/test-sigint-genimage.sh b/xCAT-test/autotest/testcase/signal/test-sigint-genimage.sh new file mode 100755 index 000000000..53fff28b1 --- /dev/null +++ b/xCAT-test/autotest/testcase/signal/test-sigint-genimage.sh @@ -0,0 +1,167 @@ +#!/bin/bash + +# Author: GONG Jie +# Create: 2016-10-17 +# Update: 2016-10-21 +# Version: 1.3.0 + +# +# warn_if_bad Put out warning message(s) if $1 has bad RC. +# +# $1 0 (pass) or non-zero (fail). +# $2+ Remaining arguments printed only if the $1 is non-zero. +# +# Incoming $1 is returned unless it is 0 +# +function warn_if_bad() +{ + local -i rc="$1" + local script="${0##*/}" + + # Ignore if no problems + [ "${rc}" -eq "0" ] && return 0 + + # Broken + shift + echo "${script}: $@" >&2 + return "${rc}" +} + +# +# exit_if_bad Put out error message(s) if $1 has bad RC. +# +# $1 0 (pass) or non-zero (fail). +# $2+ Remaining arguments printed only if the $1 is non-zero. +# +# Exits with 1 unless $1 is 0 +# +function exit_if_bad() +{ + warn_if_bad "$@" || exit 1 + return 0 +} + +# +# check_root_or_break +# +# Breaks the script if not running as root. +# +# If this returns 1, the invoker MUST abort the script. +# +# returns 0 if running as root +# returns 1 if not (and breaks the script) +# +function check_root_or_exit() +{ + [ "${UID}" -eq "0" ] + exit_if_bad "$?" "Must be run by UID=0. Actual UID=${UID}." + return 0 +} + +# +# check_executes Check for executable(s) +# +# Returns 0 if true. +# Returns 1 if not. +# +function check_executes() +{ + local cmd + local all_ok="yes" + for cmd in "$@" + do + if ! type "${cmd}" &>/dev/null + then + echo "Command \"${cmd}\" not found" >&2 + all_ok="no" + fi + done + [ "${all_ok}" = "yes" ] +} + +# +# check_exec_or_exit Check for required executables. +# +# Exits (not returns) if commands listed on command line do not exist. +# +# Returns 0 if true. +# Exits with 1 if not. +# +function check_exec_or_exit() +{ + check_executes "$@" + exit_if_bad "$?" "Above listed required command(s) not found" + return 0 +} + +# +# internal_setup Script setup +# +# Returns 0 on success. +# Exits (not returns) with 1 on failure. +# +function internal_setup() +{ + # Trap exit for internal_cleanup function. + trap "internal_cleanup" 0 + + umask 0077 + + check_exec_or_exit cat cpio find grep tail tee touch xargs +} + +# +# internal_cleanup Script cleanup (reached via trap 0) +# +# Destory any temporarily facility created by internal_setup. +# +function internal_cleanup() +{ + custom_cleanup +} + +function custom_cleanup() +{ + rm -rf "/install/netboot/testing0000" +} + + +PATH="/opt/xcat/bin:/opt/xcat/sbin:/bin:/sbin:/usr/bin:/usr/sbin" + +OSIMAGE="$(lsdef -t osimage | grep -- -netboot-compute | head -n 1)" +[ -n "${OSIMAGE}" ] +exit_if_bad "$?" "Diskless osimage not found" + +lsdef -t osimage "${OSIMAGE}" -z | sed -e 's/^.*:$/compute_9999z/' | mkdef -z + +# The new osimage name is compute_9999z +OSIMAGE="compute_9999z" + +lsdef -t osimage "${OSIMAGE}" +exit_if_bad "$?" "Diskless osimage ${OSIMAGE} not created" + +chdef -t osimage "${OSIMAGE}" "rootimgdir=/install/netboot/testing0000/${OSIMAGE}" +exit_if_bad "$?" "Command chdef failed" + +genimage "${OSIMAGE}" & +CHILD="$!" + +sleep 1 + +kill -0 "${CHILD}" +exit_if_bad "$?" "Process not found" + +kill -SIGINT "${CHILD}" +exit_if_bad "$?" "Send SIGINT failed" + +sleep 2 + +ps axo comm | grep genimage +[ "$?" -ne "0" ] +exit_if_bad "$?" "Still running 000" + +ps axo pgrp | grep "${CHILD}" +[ "$?" -ne "0" ] +exit_if_bad "$?" "Still running 001" + +exit 0