diff --git a/libpathod/pathoc.py b/libpathod/pathoc.py index 7b49d0b19..9320b1c5e 100644 --- a/libpathod/pathoc.py +++ b/libpathod/pathoc.py @@ -22,6 +22,9 @@ class Pathoc(tcp.TCPClient): raise PathocError(v) def request(self, spec): + """ + Return an (httpversion, code, msg, headers, content) tuple. + """ r = rparse.parse_request({}, spec) r.serve(self.wfile) self.wfile.flush() diff --git a/test/test_pathoc.py b/test/test_pathoc.py new file mode 100644 index 000000000..c6128e22b --- /dev/null +++ b/test/test_pathoc.py @@ -0,0 +1,27 @@ +import json +from libpathod import pathoc, test, version +import tutils + + + +class TestDaemon: + @classmethod + def setUpAll(self): + self.d = test.Daemon( + staticdir=tutils.test_data.path("data"), + anchors=[("/anchor/.*", "202")] + ) + + @classmethod + def tearDownAll(self): + self.d.shutdown() + + def setUp(self): + self.d.clear_log() + + def test_info(self): + c = pathoc.Pathoc("127.0.0.1", self.d.port) + c.connect() + _, _, _, _, content = c.request("get:/api/info") + assert tuple(json.loads(content)["version"]) == version.IVERSION + diff --git a/test/test_pathod.py b/test/test_pathod.py index 4073926fb..bf15bc23f 100644 --- a/test/test_pathod.py +++ b/test/test_pathod.py @@ -1,4 +1,5 @@ -from libpathod import pathod +import requests +from libpathod import pathod, test, version import tutils class _TestApplication: @@ -36,3 +37,51 @@ class TestPathod: for i in range(p.LOGBUF + 1): p.add_log(dict(s="foo")) assert len(p.get_log()) <= p.LOGBUF + + +class TestDaemon: + @classmethod + def setUpAll(self): + self.d = test.Daemon( + staticdir=tutils.test_data.path("data"), + anchors=[("/anchor/.*", "202")] + ) + + @classmethod + def tearDownAll(self): + self.d.shutdown() + + def setUp(self): + self.d.clear_log() + + def getpath(self, path): + return requests.get("http://localhost:%s/%s"%(self.d.port, path)) + + def get(self, spec): + return requests.get("http://localhost:%s/p/%s"%(self.d.port, spec)) + + def test_info(self): + assert tuple(self.d.info()["version"]) == version.IVERSION + + def test_logs(self): + rsp = self.get("202") + 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