sapling/tests/test-patchpython.py
Jun Wu e9776efcd7 patchpython: fix test-check tests
Summary: Resolve pyflakes issues caused by patchpython.

Test Plan: `arc unit`

Reviewers: #sourcecontrol, durham

Reviewed By: durham

Subscribers: mjpieters

Differential Revision: https://phabricator.intern.facebook.com/D4051110

Signature: t1:4051110:1476985498:3582ddf70780537a7902fece3ab847bc9effd744
2016-10-20 16:03:31 +01:00

64 lines
1.7 KiB
Python

import errno
import os
import signal
import socket
import sys
import time
try:
import SocketServer
except ImportError:
# Python 3
import socketserver as SocketServer
# Make sure we use patchpython.py in this repo, unaffected by PYTHONPATH
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../hgext3rd'))
import patchpython
assert patchpython # pass pyflakes "import but unused" check
def testnozombies():
class reportpidhandler(SocketServer.StreamRequestHandler):
def handle(self):
self.wfile.write('%s' % (os.getpid(),))
class server(SocketServer.ForkingMixIn, SocketServer.UnixStreamServer):
pass
socketpath = 'testsocket'
pid = os.fork()
if pid > 0:
# client
waittime = 0
while not os.path.exists(socketpath):
time.sleep(0.1)
waittime += 0.1
if waittime > 5:
assert False, 'server timed out'
try:
pids = []
for i in xrange(5):
s = socket.socket(socket.AF_UNIX)
s.connect(socketpath)
buf = s.recv(1024)
s.close()
pids.append(int(buf))
# give the server some time to do cleanup
time.sleep(0.5)
for p in pids:
try:
os.kill(p, 0)
assert False, 'zombie process detected'
except OSError as ex:
if ex.errno != errno.ESRCH:
raise
finally:
os.kill(pid, signal.SIGTERM) # stop server
os.unlink(socketpath)
else:
# server
s = server(socketpath, reportpidhandler)
s.serve_forever(poll_interval=0.1)
testnozombies()