2f27a0ed3c
run_process will use screen if USE_SCREEN=True (the default), otherwise it will simply start the requested service. Therefore wherever screen_it used, run_process can be instead. Where stop_screen was found it has been replaced with stop_process. A tail_log function has been added which will tail a logfile in a screen if USE_SCREEN is True. lib/template has been updated to reflect the use of the new functions. When using sg the quoting in run_process gets very complicated. To get around this run_process and the functions it calls accepts an optional third argument. If set it is a group to be used with sg. Change-Id: Ia3843818014f7c6c7526ef3aa9676bbddb8a85ca
110 lines
2.4 KiB
Bash
Executable File
110 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# tests/exec.sh - Test DevStack run_process() and stop_process()
|
|
#
|
|
# exec.sh start|stop|status
|
|
#
|
|
# Set USE_SCREEN True|False to change use of screen.
|
|
#
|
|
# This script emulates the basic exec envirnment in ``stack.sh`` to test
|
|
# the process spawn and kill operations.
|
|
|
|
if [[ -z $1 ]]; then
|
|
echo "$0 start|stop"
|
|
exit 1
|
|
fi
|
|
|
|
TOP_DIR=$(cd $(dirname "$0")/.. && pwd)
|
|
source $TOP_DIR/functions
|
|
|
|
USE_SCREEN=${USE_SCREEN:-False}
|
|
|
|
ENABLED_SERVICES=fake-service
|
|
|
|
SERVICE_DIR=/tmp
|
|
SCREEN_NAME=test
|
|
SCREEN_LOGDIR=${SERVICE_DIR}/${SCREEN_NAME}
|
|
|
|
|
|
# Kill background processes on exit
|
|
trap clean EXIT
|
|
clean() {
|
|
local r=$?
|
|
jobs -p
|
|
kill >/dev/null 2>&1 $(jobs -p)
|
|
exit $r
|
|
}
|
|
|
|
|
|
# Exit on any errors so that errors don't compound
|
|
trap failed ERR
|
|
failed() {
|
|
local r=$?
|
|
jobs -p
|
|
kill >/dev/null 2>&1 $(jobs -p)
|
|
set +o xtrace
|
|
[ -n "$LOGFILE" ] && echo "${0##*/} failed: full log in $LOGFILE"
|
|
exit $r
|
|
}
|
|
|
|
function status {
|
|
if [[ -r $SERVICE_DIR/$SCREEN_NAME/fake-service.pid ]]; then
|
|
pstree -pg $(cat $SERVICE_DIR/$SCREEN_NAME/fake-service.pid)
|
|
fi
|
|
ps -ef | grep fake
|
|
}
|
|
|
|
function setup_screen {
|
|
if [[ ! -d $SERVICE_DIR/$SCREEN_NAME ]]; then
|
|
rm -rf $SERVICE_DIR/$SCREEN_NAME
|
|
mkdir -p $SERVICE_DIR/$SCREEN_NAME
|
|
fi
|
|
|
|
if [[ "$USE_SCREEN" == "True" ]]; then
|
|
# Create a new named screen to run processes in
|
|
screen -d -m -S $SCREEN_NAME -t shell -s /bin/bash
|
|
sleep 1
|
|
|
|
# Set a reasonable status bar
|
|
if [ -z "$SCREEN_HARDSTATUS" ]; then
|
|
SCREEN_HARDSTATUS='%{= .} %-Lw%{= .}%> %n%f %t*%{= .}%+Lw%< %-=%{g}(%{d}%H/%l%{g})'
|
|
fi
|
|
screen -r $SCREEN_NAME -X hardstatus alwayslastline "$SCREEN_HARDSTATUS"
|
|
fi
|
|
|
|
# Clear screen rc file
|
|
SCREENRC=$TOP_DIR/tests/$SCREEN_NAME-screenrc
|
|
if [[ -e $SCREENRC ]]; then
|
|
echo -n > $SCREENRC
|
|
fi
|
|
}
|
|
|
|
# Mimic logging
|
|
# Set up output redirection without log files
|
|
# Copy stdout to fd 3
|
|
exec 3>&1
|
|
if [[ "$VERBOSE" != "True" ]]; then
|
|
# Throw away stdout and stderr
|
|
#exec 1>/dev/null 2>&1
|
|
:
|
|
fi
|
|
# Always send summary fd to original stdout
|
|
exec 6>&3
|
|
|
|
|
|
if [[ "$1" == "start" ]]; then
|
|
echo "Start service"
|
|
setup_screen
|
|
run_process fake-service "$TOP_DIR/tests/fake-service.sh"
|
|
sleep 1
|
|
status
|
|
elif [[ "$1" == "stop" ]]; then
|
|
echo "Stop service"
|
|
stop_process fake-service
|
|
status
|
|
elif [[ "$1" == "status" ]]; then
|
|
status
|
|
else
|
|
echo "Unknown command"
|
|
exit 1
|
|
fi
|