(self)
| 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') |
nothing calls this directly
no test coverage detected