Add timeout argument to Pathod, and matching -t command-line option.
This commit is contained in:
parent
8bb81be2b0
commit
915bcfbd30
|
@ -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
7
pathod
|
@ -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.'
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue