/usr/share/pyshared/cherrypy/test/test_gzip_filter.py is in python-cherrypy 2.3.0-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | import test
test.prefer_parent_path()
import gzip, StringIO
import cherrypy
def setup_server():
class Root:
def index(self):
yield "Hello, world"
index.exposed = True
def noshow(self):
# Test for ticket #147, where yield showed no exceptions (content-
# encoding was still gzip even though traceback wasn't zipped).
raise IndexError()
yield "Here be dragons"
noshow.exposed = True
def noshow_stream(self):
# Test for ticket #147, where yield showed no exceptions (content-
# encoding was still gzip even though traceback wasn't zipped).
raise IndexError()
yield "Here be dragons"
noshow_stream.exposed = True
cherrypy.root = Root()
cherrypy.config.update({
'global': {'server.log_to_screen': False,
'server.environment': 'production',
'server.show_tracebacks': True,
'gzip_filter.on': True,
},
'/noshow_stream': {'stream_response': True},
})
import helper
europoundUtf8 = u'\x80\xa3'.encode('utf-8')
class GzipFilterTest(helper.CPWebCase):
def testGzipFilter(self):
zbuf = StringIO.StringIO()
zfile = gzip.GzipFile(mode='wb', fileobj=zbuf, compresslevel=9)
zfile.write("Hello, world")
zfile.close()
self.getPage('/', headers=[("Accept-Encoding", "gzip")])
self.assertInBody(zbuf.getvalue()[:3])
self.assertHeader("Vary", "Accept-Encoding")
# Test when gzip is denied.
self.getPage('/', headers=[("Accept-Encoding", "identity")])
self.assertNoHeader("Vary")
self.assertBody("Hello, world")
self.getPage('/', headers=[("Accept-Encoding", "gzip;q=0")])
self.assertNoHeader("Vary")
self.assertBody("Hello, world")
self.getPage('/', headers=[("Accept-Encoding", "*;q=0")])
self.assertStatus(406)
self.assertNoHeader("Vary")
self.assertErrorPage(406, "identity, gzip")
# Test for ticket #147
self.getPage('/noshow', headers=[("Accept-Encoding", "gzip")])
self.assertNoHeader('Content-Encoding')
self.assertStatus(500)
self.assertErrorPage(500, pattern="IndexError\n")
# In this case, there's nothing we can do to deliver a
# readable page, since 1) the gzip header is already set,
# and 2) we may have already written some of the body.
# The fix is to never stream yields when using gzip.
self.getPage('/noshow_stream',
headers=[("Accept-Encoding", "gzip")])
self.assertHeader('Content-Encoding', 'gzip')
self.assertMatchesBody(r"Unrecoverable error in the server.$")
if __name__ == "__main__":
setup_server()
helper.testmain()
|