tests/test_graceful_restart.sh
#!/bin/bash

PYTHON="coverage run -a"
URL=http://127.0.0.1/file


# setup processes
$PYTHON shadowsocks/local.py -c tests/graceful.json &
LOCAL=$!

$PYTHON shadowsocks/server.py -c tests/graceful.json --forbidden-ip "" &
SERVER=$!

python tests/graceful_server.py &
GSERVER=$!

sleep 1

python tests/graceful_cli.py &
GCLI=$!

sleep 1

# graceful restart server: send SIGQUIT to old process and start a new one
kill -s SIGQUIT $SERVER
sleep 0.5
$PYTHON shadowsocks/server.py -c tests/graceful.json --forbidden-ip "" &
NEWSERVER=$!

sleep 1

# check old server
ps x | grep -v grep | grep $SERVER
OLD_SERVER_RUNNING1=$?
# old server should not quit at this moment
echo old server running: $OLD_SERVER_RUNNING1

sleep 1

# close connections on old server
kill -s SIGKILL $GCLI
kill -s SIGKILL $GSERVER
kill -s SIGINT $LOCAL

sleep 11

# check old server
ps x | grep -v grep | grep $SERVER
OLD_SERVER_RUNNING2=$?
# old server should quit at this moment
echo old server running: $OLD_SERVER_RUNNING2

kill -s SIGINT $SERVER
# new server is expected running
kill -s SIGINT $NEWSERVER || exit 1

if [ $OLD_SERVER_RUNNING1 -ne 0 ]; then
    exit 1
fi

if [ $OLD_SERVER_RUNNING2 -ne 1 ]; then
    sleep 1
    exit 1
fi
