Browse Source

fix daemon and add fastopen tests

auth
clowwindy 10 years ago
parent
commit
5ea8403e56
  1. 7
      .jenkins.sh
  2. 13
      shadowsocks/daemon.py
  3. 2
      tests/test.py
  4. 1
      tests/test_daemon.sh

7
.jenkins.sh

@ -46,6 +46,13 @@ run_test python tests/test.py --with-coverage -c tests/workers.json
run_test python tests/test.py --with-coverage -s tests/ipv6.json -c tests/ipv6-client-side.json run_test python tests/test.py --with-coverage -s tests/ipv6.json -c tests/ipv6-client-side.json
run_test python tests/test.py --with-coverage -b "-m rc4-md5 -k testrc4 -s 127.0.0.1 -p 8388" -a "-m rc4-md5 -k testrc4 -s 127.0.0.1 -p 8388 -l 1081" run_test python tests/test.py --with-coverage -b "-m rc4-md5 -k testrc4 -s 127.0.0.1 -p 8388" -a "-m rc4-md5 -k testrc4 -s 127.0.0.1 -p 8388 -l 1081"
run_test python tests/test.py --with-coverage -b "-m aes-256-cfb -k testrc4 -s 127.0.0.1 -p 8388" -a "-m aes-256-cfb -k testrc4 -s 127.0.0.1 -p 8388 -l 1081" run_test python tests/test.py --with-coverage -b "-m aes-256-cfb -k testrc4 -s 127.0.0.1 -p 8388" -a "-m aes-256-cfb -k testrc4 -s 127.0.0.1 -p 8388 -l 1081"
if [ -f /proc/sys/net/ipv4/tcp_fastopen ] ; then
if [ 3 -eq `cat /proc/sys/net/ipv4/tcp_fastopen` ] ; then
run_test python tests/test.py --with-coverage -c tests/fastopen.json
fi
fi
coverage combine && coverage report --include=shadowsocks/* coverage combine && coverage report --include=shadowsocks/*
rm -rf htmlcov rm -rf htmlcov
rm -rf tmp rm -rf tmp

13
shadowsocks/daemon.py

@ -100,19 +100,21 @@ def freopen(f, mode, stream):
def daemon_start(pid_file, log_file): def daemon_start(pid_file, log_file):
# fork only once because we are sure parent will exit
pid = os.fork()
assert pid != -1
def handle_exit(signum, _): def handle_exit(signum, _):
if signum == signal.SIGTERM: if signum == signal.SIGTERM:
sys.exit(0) sys.exit(0)
sys.exit(1) sys.exit(1)
if pid > 0:
# parent waits for its child
signal.signal(signal.SIGINT, handle_exit) signal.signal(signal.SIGINT, handle_exit)
signal.signal(signal.SIGTERM, handle_exit) signal.signal(signal.SIGTERM, handle_exit)
# fork only once because we are sure parent will exit
pid = os.fork()
assert pid != -1
if pid > 0:
# parent waits for its child
time.sleep(5) time.sleep(5)
sys.exit(0) sys.exit(0)
@ -135,7 +137,6 @@ def daemon_start(pid_file, log_file):
freopen(log_file, 'a', sys.stderr) freopen(log_file, 'a', sys.stderr)
except IOError as e: except IOError as e:
logging.error(e) logging.error(e)
os.kill(ppid, signal.SIGINT)
sys.exit(1) sys.exit(1)

2
tests/test.py

@ -138,9 +138,7 @@ try:
finally: finally:
for p in [p1, p2]: for p in [p1, p2]:
try: try:
print('kill', file=sys.stderr)
os.kill(p.pid, signal.SIGINT) os.kill(p.pid, signal.SIGINT)
print('waitpid', file=sys.stderr)
os.waitpid(p.pid, 0) os.waitpid(p.pid, 0)
except OSError: except OSError:
pass pass

1
tests/test_daemon.sh

@ -39,6 +39,5 @@ run_test 0 -c tests/aes.json -d restart --pid-file tmp/shadowsocks.pid --log-fil
run_test 0 -c tests/aes.json -d stop --pid-file tmp/shadowsocks.pid --log-file tmp/shadowsocks.log run_test 0 -c tests/aes.json -d stop --pid-file tmp/shadowsocks.pid --log-file tmp/shadowsocks.log
run_test 1 -c tests/aes.json -d start --pid-file tmp/not_exist/shadowsocks.pid --log-file tmp/shadowsocks.log run_test 1 -c tests/aes.json -d start --pid-file tmp/not_exist/shadowsocks.pid --log-file tmp/shadowsocks.log
run_test 1 -c tests/aes.json -d start --pid-file tmp/shadowsocks.pid --log-file tmp/not_exist/shadowsocks.log
done done

Loading…
Cancel
Save