Log message for revision 106842: Add tests for content compression codepaths in setBody.
Changed: U Zope/branches/tseaver-fix_wsgi/src/ZPublisher/HTTPResponse.py U Zope/branches/tseaver-fix_wsgi/src/ZPublisher/tests/testHTTPResponse.py -=- Modified: Zope/branches/tseaver-fix_wsgi/src/ZPublisher/HTTPResponse.py =================================================================== --- Zope/branches/tseaver-fix_wsgi/src/ZPublisher/HTTPResponse.py 2009-12-22 02:42:09 UTC (rev 106841) +++ Zope/branches/tseaver-fix_wsgi/src/ZPublisher/HTTPResponse.py 2009-12-22 03:03:48 UTC (rev 106842) @@ -515,7 +515,9 @@ self.setHeader('content-type', content_type) self.setHeader('content-length', len(self.body)) + self.insertBase() + if self.use_HTTP_content_compression and \ self.headers.get('content-encoding', 'gzip') == 'gzip': # use HTTP content encoding to compress body contents unless @@ -544,10 +546,10 @@ # respect Accept-Encoding client header vary = self.getHeader('Vary') if vary is None or 'Accept-Encoding' not in vary: - self.appendHeader('Vary','Accept-Encoding') + self.appendHeader('Vary', 'Accept-Encoding') return self - def enableHTTPCompression(self,REQUEST={},force=0,disable=0,query=0): + def enableHTTPCompression(self, REQUEST={}, force=0, disable=0, query=0): """Enable HTTP Content Encoding with gzip compression if possible REQUEST -- used to check if client can accept compression Modified: Zope/branches/tseaver-fix_wsgi/src/ZPublisher/tests/testHTTPResponse.py =================================================================== --- Zope/branches/tseaver-fix_wsgi/src/ZPublisher/tests/testHTTPResponse.py 2009-12-22 02:42:09 UTC (rev 106841) +++ Zope/branches/tseaver-fix_wsgi/src/ZPublisher/tests/testHTTPResponse.py 2009-12-22 03:03:48 UTC (rev 106842) @@ -622,26 +622,76 @@ self.assertEqual(response.body, AFTER) self.assertEqual(response.getHeader('Content-Length'), str(len(AFTER))) + def test_setBody_calls_insertBase(self): + response = self._makeOne() + lamb = {} + def _insertBase(): + lamb['flavor'] = 'CURRY' + response.insertBase = _insertBase + response.setBody('Garlic Naan') + self.assertEqual(lamb['flavor'], 'CURRY') - #TODO - #def test_setBody_w_base(self): #def test_setBody_w_HTTP_content_compression(self): - def test_setBody_compression_vary(self): + def test_setBody_compression_uncompressible_mimetype(self): + BEFORE = 'foo' * 100 # body must get smaller on compression + response = self._makeOne() + response.setHeader('Content-Type', 'image/jpeg') + response.enableHTTPCompression({'HTTP_ACCEPT_ENCODING': 'gzip'}) + response.setBody(BEFORE) + self.failIf(response.getHeader('Content-Encoding')) + self.assertEqual(response.body, BEFORE) + + def test_setBody_compression_existing_encoding(self): + BEFORE = 'foo' * 100 # body must get smaller on compression + response = self._makeOne() + response.setHeader('Content-Encoding', 'piglatin') + response.enableHTTPCompression({'HTTP_ACCEPT_ENCODING': 'gzip'}) + response.setBody(BEFORE) + self.assertEqual(response.getHeader('Content-Encoding'), 'piglatin') + self.assertEqual(response.body, BEFORE) + + def test_setBody_compression_too_short_to_gzip(self): + BEFORE = 'foo' # body must get smaller on compression + response = self._makeOne() + response.enableHTTPCompression({'HTTP_ACCEPT_ENCODING': 'gzip'}) + response.setBody(BEFORE) + self.failIf(response.getHeader('Content-Encoding')) + self.assertEqual(response.body, BEFORE) + + def test_setBody_compression_no_prior_vary_header(self): # Vary header should be added here response = self._makeOne() - response.enableHTTPCompression(REQUEST={'HTTP_ACCEPT_ENCODING': 'gzip'}) - response.setBody('foo'*100) # body must get smaller on compression - self.assertEqual('Accept-Encoding' in response.getHeader('Vary'), True) - # But here it would be unnecessary + response.enableHTTPCompression({'HTTP_ACCEPT_ENCODING': 'gzip'}) + response.setBody('foo' * 100) # body must get smaller on compression + self.failUnless('Accept-Encoding' in response.getHeader('Vary')) + + def test_setBody_compression_w_prior_vary_header_wo_encoding(self): + # Vary header should be added here response = self._makeOne() - response.enableHTTPCompression(REQUEST={'HTTP_ACCEPT_ENCODING': 'gzip'}) - response.setHeader('Vary', 'Accept-Encoding,Accept-Language') - before = response.getHeader('Vary') + response.setHeader('Vary', 'Cookie') + response.enableHTTPCompression({'HTTP_ACCEPT_ENCODING': 'gzip'}) + response.setBody('foo' * 100) # body must get smaller on compression + self.failUnless('Accept-Encoding' in response.getHeader('Vary')) + + def test_setBody_compression_w_prior_vary_header_incl_encoding(self): + # Vary header already had Accept-Ecoding', do'nt munge + PRIOR = 'Accept-Encoding,Accept-Language' + response = self._makeOne() + response.enableHTTPCompression({'HTTP_ACCEPT_ENCODING': 'gzip'}) + response.setHeader('Vary', PRIOR) response.setBody('foo'*100) - self.assertEqual(before, response.getHeader('Vary')) + self.assertEqual(response.getHeader('Vary'), PRIOR) + def test_setBody_compression_no_prior_vary_header_but_forced(self): + # Compression forced, don't add a Vary entry for compression. + response = self._makeOne() + response.enableHTTPCompression({'HTTP_ACCEPT_ENCODING': 'gzip'}, + force=True) + response.setBody('foo' * 100) # body must get smaller on compression + self.assertEqual(response.getHeader('Vary'), None) + def test_suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(HTTPResponseTests, 'test')) _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org https://mail.zope.org/mailman/listinfo/zope-checkins