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)
return
self.settimeout(self.server.timeout)
while not self.finished:
if not self.handle_request():
return
@ -155,7 +155,8 @@ class Pathod(tcp.TCPServer):
LOGBUF = 500
def __init__( self,
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
@ -175,6 +176,7 @@ class Pathod(tcp.TCPServer):
self.craftanchor = craftanchor
self.sizelimit = sizelimit
self.noweb, self.nocraft, self.noapi, self.nohang = noweb, nocraft, noapi, nohang
self.timeout = timeout
if not noapi:
app.api()
self.app = app.app
@ -224,6 +226,14 @@ class Pathod(tcp.TCPServer):
)
)
return
except tcp.NetLibTimeout: # pragma: no cover
h.info("Timeout")
self.add_log(
dict(
type = "timeout",
)
)
return
def add_log(self, d):
if not self.noapi:

7
pathod
View File

@ -88,7 +88,8 @@ def main(parser, args):
noweb = args.noweb,
nocraft = args.nocraft,
noapi = args.noapi,
nohang = args.nohang
nohang = args.nohang,
timeout = args.timeout
)
except pathod.PathodError, v:
parser.error(str(v))
@ -134,6 +135,10 @@ if __name__ == "__main__":
"-s", dest='ssl', default=False, action="store_true",
help='Serve with SSL.'
)
parser.add_argument(
"-t", dest="timeout", type=int, default=None,
help="Connection timeout"
)
parser.add_argument(
"--limit-size", dest='sizelimit', default=None, type=str,
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
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):
noapi = True
def test_noapi(self):

View File

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