MCPcopy
hub / github.com/cherrypy/cherrypy / testGzip

Method testGzip

cherrypy/test/test_encoding.py:369–423  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

367 self.assertStatus('400 Bad Request')
368
369 def testGzip(self):
370 zbuf = io.BytesIO()
371 zfile = gzip.GzipFile(mode='wb', fileobj=zbuf, compresslevel=9)
372 zfile.write(b'Hello, world')
373 zfile.close()
374
375 self.getPage('/gzip/', headers=[('Accept-Encoding', 'gzip')])
376 self.assertInBody(zbuf.getvalue()[:3])
377 self.assertHeader('Vary', 'Accept-Encoding')
378 self.assertHeader('Content-Encoding', 'gzip')
379
380 # Test when gzip is denied.
381 self.getPage('/gzip/', headers=[('Accept-Encoding', 'identity')])
382 self.assertHeader('Vary', 'Accept-Encoding')
383 self.assertNoHeader('Content-Encoding')
384 self.assertBody('Hello, world')
385
386 self.getPage('/gzip/', headers=[('Accept-Encoding', 'gzip;q=0')])
387 self.assertHeader('Vary', 'Accept-Encoding')
388 self.assertNoHeader('Content-Encoding')
389 self.assertBody('Hello, world')
390
391 # Test that trailing comma doesn't cause IndexError
392 # Ref: https://github.com/cherrypy/cherrypy/issues/988
393 self.getPage('/gzip/', headers=[('Accept-Encoding', 'gzip,deflate,')])
394 self.assertStatus(200)
395 self.assertNotInBody('IndexError')
396
397 self.getPage('/gzip/', headers=[('Accept-Encoding', '*;q=0')])
398 self.assertStatus(406)
399 self.assertNoHeader('Content-Encoding')
400 self.assertErrorPage(406, 'identity, gzip')
401
402 # Test for ticket #147
403 self.getPage('/gzip/noshow', headers=[('Accept-Encoding', 'gzip')])
404 self.assertNoHeader('Content-Encoding')
405 self.assertStatus(500)
406 self.assertErrorPage(500, pattern='IndexError\n')
407
408 # In this case, there's nothing we can do to deliver a
409 # readable page, since 1) the gzip header is already set,
410 # and 2) we may have already written some of the body.
411 # The fix is to never stream yields when using gzip.
412 if (cherrypy.server.protocol_version == 'HTTP/1.0' or
413 getattr(cherrypy.server, 'using_apache', False)):
414 self.getPage('/gzip/noshow_stream',
415 headers=[('Accept-Encoding', 'gzip')])
416 self.assertHeader('Content-Encoding', 'gzip')
417 self.assertInBody('\x1f\x8b\x08\x00')
418 else:
419 # The wsgiserver will simply stop sending data, and the HTTP client
420 # will error due to an incomplete chunk-encoded stream.
421 self.assertRaises((ValueError, IncompleteRead), self.getPage,
422 '/gzip/noshow_stream',
423 headers=[('Accept-Encoding', 'gzip')])
424
425 def test_UnicodeHeaders(self):
426 self.getPage('/cookies_and_headers')

Callers

nothing calls this directly

Calls 4

writeMethod · 0.80
getPageMethod · 0.80
assertErrorPageMethod · 0.80
closeMethod · 0.45

Tested by

no test coverage detected