2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2025-05-24 04:32:04 +00:00
xcat-core/xCAT-test/autotest/testcase/signal/test-sigint-genimage.sh

168 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
# Author: GONG Jie <neo@linux.vnet.ibm.com>
# 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