from libpathod import pathod, version from netlib import tcp, http import requests import tutils class TestPathod: def test_instantiation(self): p = pathod.Pathod( ("127.0.0.1", 0), anchors = [(".*", "200:da")] ) assert p.anchors tutils.raises("invalid regex", pathod.Pathod, ("127.0.0.1", 0), anchors=[("*", "200:da")]) tutils.raises("invalid page spec", pathod.Pathod, ("127.0.0.1", 0), anchors=[("foo", "bar")]) def test_logging(self): p = pathod.Pathod(("127.0.0.1", 0)) assert len(p.get_log()) == 0 id = p.add_log(dict(s="foo")) assert p.log_by_id(id) assert len(p.get_log()) == 1 p.clear_log() assert len(p.get_log()) == 0 for i in range(p.LOGBUF + 1): p.add_log(dict(s="foo")) assert len(p.get_log()) <= p.LOGBUF class TestNoWeb(tutils.DaemonTests): noweb = True def test_noweb(self): assert self.get("200:da").status_code == 200 assert self.getpath("/").status_code == 800 class TestTimeout(tutils.DaemonTests): timeout = 0.00001 def test_noweb(self): # FIXME: Add float values to spec language, reduce test timeout to # increase test performance tutils.raises("blank server response", self.pathoc, "get:/:p1,1") assert self.d.last_log()["type"] == "timeout" class TestNoApi(tutils.DaemonTests): noapi = True def test_noapi(self): assert self.getpath("/log").status_code == 404 r = self.getpath("/") assert r.status_code == 200 assert not "Log" in r.content class TestNotAfterConnect(tutils.DaemonTests): ssl = False not_after_connect = True def test_connect(self): v = self.pathoc(r"get:'http://foo.com/p/202':da", connect_to=("localhost", self.d.port)) assert v[1] == 202 class TestNohang(tutils.DaemonTests): nohang = True def test_nohang(self): r = self.get("200:p0,0") assert r.status_code == 800 l = self.d.last_log() assert "Pauses have been disabled" in l["msg"] class TestHexdump(tutils.DaemonTests): hexdump = True def test_hexdump(self): r = self.get(r"200:b'\xf0'") class CommonTests(tutils.DaemonTests): def test_binarydata(self): r = self.get(r"200:b'\xf0'") l = self.d.last_log() # FIXME: Other binary data elements def test_sizelimit(self): r = self.get("200:b@1g") assert r.status_code == 800 l = self.d.last_log() assert "too large" in l["msg"] def test_preline(self): v = self.pathoc(r"get:'/p/200':i0,'\r\n'") assert v[1] == 200 def test_info(self): assert tuple(self.d.info()["version"]) == version.IVERSION def test_logs(self): assert self.d.clear_log() tutils.raises("no requests logged", self.d.last_log) rsp = self.get("202:da") assert len(self.d.log()) == 1 assert self.d.clear_log() assert len(self.d.log()) == 0 def test_disconnect(self): rsp = self.get("202:b@100k:d200") assert len(rsp.content) < 200 def test_parserr(self): rsp = self.get("400:msg,b:") assert rsp.status_code == 800 def test_static(self): rsp = self.get("200:b