Add timeout argument to Pathod, and matching -t command-line option.

This commit is contained in:
Aldo Cortesi 2012-10-01 12:01:02 +13:00
parent 8bb81be2b0
commit 915bcfbd30
4 changed files with 30 additions and 4 deletions

View File

@ -145,7 +145,7 @@ class PathodHandler(tcp.BaseHandler):
) )
self.info(s) self.info(s)
return return
self.settimeout(self.server.timeout)
while not self.finished: while not self.finished:
if not self.handle_request(): if not self.handle_request():
return return
@ -155,7 +155,8 @@ class Pathod(tcp.TCPServer):
LOGBUF = 500 LOGBUF = 500
def __init__( self, def __init__( self,
addr, ssloptions=None, craftanchor="/p/", staticdir=None, anchors=None, addr, ssloptions=None, craftanchor="/p/", staticdir=None, anchors=None,
sizelimit=None, noweb=False, nocraft=False, noapi=False, nohang=False sizelimit=None, noweb=False, nocraft=False, noapi=False, nohang=False,
timeout=None
): ):
""" """
addr: (address, port) tuple. If port is 0, a free port will be addr: (address, port) tuple. If port is 0, a free port will be
@ -175,6 +176,7 @@ class Pathod(tcp.TCPServer):
self.craftanchor = craftanchor self.craftanchor = craftanchor
self.sizelimit = sizelimit self.sizelimit = sizelimit
self.noweb, self.nocraft, self.noapi, self.nohang = noweb, nocraft, noapi, nohang self.noweb, self.nocraft, self.noapi, self.nohang = noweb, nocraft, noapi, nohang
self.timeout = timeout
if not noapi: if not noapi:
app.api() app.api()
self.app = app.app self.app = app.app
@ -224,6 +226,14 @@ class Pathod(tcp.TCPServer):
) )
) )
return return
except tcp.NetLibTimeout: # pragma: no cover
h.info("Timeout")
self.add_log(
dict(
type = "timeout",
)
)
return
def add_log(self, d): def add_log(self, d):
if not self.noapi: if not self.noapi:

7
pathod
View File

@ -88,7 +88,8 @@ def main(parser, args):
noweb = args.noweb, noweb = args.noweb,
nocraft = args.nocraft, nocraft = args.nocraft,
noapi = args.noapi, noapi = args.noapi,
nohang = args.nohang nohang = args.nohang,
timeout = args.timeout
) )
except pathod.PathodError, v: except pathod.PathodError, v:
parser.error(str(v)) parser.error(str(v))
@ -134,6 +135,10 @@ if __name__ == "__main__":
"-s", dest='ssl', default=False, action="store_true", "-s", dest='ssl', default=False, action="store_true",
help='Serve with SSL.' help='Serve with SSL.'
) )
parser.add_argument(
"-t", dest="timeout", type=int, default=None,
help="Connection timeout"
)
parser.add_argument( parser.add_argument(
"--limit-size", dest='sizelimit', default=None, type=str, "--limit-size", dest='sizelimit', default=None, type=str,
help='Size limit of served responses. Understands size suffixes, i.e. 100k.' help='Size limit of served responses. Understands size suffixes, i.e. 100k.'

View File

@ -34,6 +34,15 @@ class TestNoWeb(tutils.DaemonTests):
assert self.getpath("/").status_code == 800 assert self.getpath("/").status_code == 800
class TestTimeout(tutils.DaemonTests):
timeout = 0.1
def test_noweb(self):
# FIXME: Add float values to spec language, reduce test timeout to
# increase test performance
assert self.get("200:p1,1").status_code == 200
assert self.d.last_log()["type"] == "timeout"
class TestNoApi(tutils.DaemonTests): class TestNoApi(tutils.DaemonTests):
noapi = True noapi = True
def test_noapi(self): def test_noapi(self):

View File

@ -8,6 +8,7 @@ class DaemonTests:
noapi = False noapi = False
nohang = False nohang = False
ssl = False ssl = False
timeout = None
@classmethod @classmethod
def setUpAll(self): def setUpAll(self):
self.d = test.Daemon( self.d = test.Daemon(
@ -17,7 +18,8 @@ class DaemonTests:
sizelimit=1*1024*1024, sizelimit=1*1024*1024,
noweb = self.noweb, noweb = self.noweb,
noapi = self.noapi, noapi = self.noapi,
nohang = self.nohang nohang = self.nohang,
timeout = self.timeout,
) )
@classmethod @classmethod