#!/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 environment 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