testsite.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from __future__ import print_function
  2. from six.moves.urllib.parse import urljoin
  3. from twisted.internet import reactor
  4. from twisted.web import server, resource, static, util
  5. class SiteTest(object):
  6. def setUp(self):
  7. super(SiteTest, self).setUp()
  8. self.site = reactor.listenTCP(0, test_site(), interface="127.0.0.1")
  9. self.baseurl = "http://localhost:%d/" % self.site.getHost().port
  10. def tearDown(self):
  11. super(SiteTest, self).tearDown()
  12. self.site.stopListening()
  13. def url(self, path):
  14. return urljoin(self.baseurl, path)
  15. class NoMetaRefreshRedirect(util.Redirect):
  16. def render(self, request):
  17. content = util.Redirect.render(self, request)
  18. return content.replace(b'http-equiv=\"refresh\"',
  19. b'http-no-equiv=\"do-not-refresh-me\"')
  20. def test_site():
  21. r = resource.Resource()
  22. r.putChild(b"text", static.Data(b"Works", "text/plain"))
  23. r.putChild(b"html", static.Data(b"<body><p class='one'>Works</p><p class='two'>World</p></body>", "text/html"))
  24. r.putChild(b"enc-gb18030", static.Data(b"<p>gb18030 encoding</p>", "text/html; charset=gb18030"))
  25. r.putChild(b"redirect", util.Redirect(b"/redirected"))
  26. r.putChild(b"redirect-no-meta-refresh", NoMetaRefreshRedirect(b"/redirected"))
  27. r.putChild(b"redirected", static.Data(b"Redirected here", "text/plain"))
  28. return server.Site(r)
  29. if __name__ == '__main__':
  30. port = reactor.listenTCP(0, test_site(), interface="127.0.0.1")
  31. print("http://localhost:%d/" % port.getHost().port)
  32. reactor.run()