def test_contentLength(self):
        """
        Content-Length header should be discarded when compression is in use.
        """
        self.assertNotIn('content-length', self.request.headers)
        self.wrapper.setHeader(b'content-length', 1234)
        self.assertNotIn('content-length', self.request.headers)

        self.request.setHeader(b'content-length', 1234)
        self.wrapper = CompressingRequestWrapper(self.request)
        self.assertNotIn('content-length', self.request.headers)
Exemple #2
0
    def test_contentLength(self):
        """
        Content-Length header should be discarded when compression is in use.
        """
        self.assertFalse(
            self.request.responseHeaders.hasHeader('content-length'))
        self.wrapper.setHeader('content-length', 1234)
        self.assertFalse(
            self.request.responseHeaders.hasHeader('content-length'))

        self.request.setHeader('content-length', 1234)
        self.wrapper = CompressingRequestWrapper(self.request)
        self.assertFalse(
            self.request.responseHeaders.hasHeader('content-length'))
    def test_contentLength(self):
        """
        Content-Length header should be discarded when compression is in use.
        """
        self.assertNotIn('content-length', self.request.headers)
        self.wrapper.setHeader('content-length', 1234)
        self.assertNotIn('content-length', self.request.headers)

        self.request.setHeader('content-length', 1234)
        self.wrapper = CompressingRequestWrapper(self.request)
        self.assertNotIn('content-length', self.request.headers)
Exemple #4
0
    def test_contentLength(self):
        """
        Content-Length header should be discarded when compression is in use.
        """
        self.assertFalse(
            self.request.responseHeaders.hasHeader('content-length'))
        self.wrapper.setHeader('content-length', 1234)
        self.assertFalse(
            self.request.responseHeaders.hasHeader('content-length'))

        self.request.setHeader('content-length', 1234)
        self.wrapper = CompressingRequestWrapper(self.request)
        self.assertFalse(
            self.request.responseHeaders.hasHeader('content-length'))
Exemple #5
0
 def setUp(self):
     """
     Wrap a request fake to test the wrapper.
     """
     self.request = FakeRequest()
     self.wrapper = CompressingRequestWrapper(self.request)
Exemple #6
0
class RequestWrapperTests(TestCase):
    """
    Tests for L{CompressingRequestWrapper}.
    """
    def setUp(self):
        """
        Wrap a request fake to test the wrapper.
        """
        self.request = FakeRequest()
        self.wrapper = CompressingRequestWrapper(self.request)


    def test_attributes(self):
        """
        Attributes on the wrapper should be forwarded to the underlying
        request.
        """
        attributes = ['method', 'uri', 'path', 'args', 'requestHeaders']
        for attrName in attributes:
            self.assertIdentical(getattr(self.wrapper, attrName),
                                 getattr(self.request, attrName))


    def test_missingAttributes(self):
        """
        Attributes that are not part of the interfaces being proxied should not
        be proxied.
        """
        self.assertRaises(AttributeError, getattr, self.wrapper, 'doesntexist')
        self.request._privateTestAttribute = 42
        self.assertRaises(AttributeError, getattr, self.wrapper, '_privateTestAttribute')


    def test_contentLength(self):
        """
        Content-Length header should be discarded when compression is in use.
        """
        self.assertFalse(
            self.request.responseHeaders.hasHeader('content-length'))
        self.wrapper.setHeader('content-length', 1234)
        self.assertFalse(
            self.request.responseHeaders.hasHeader('content-length'))

        self.request.setHeader('content-length', 1234)
        self.wrapper = CompressingRequestWrapper(self.request)
        self.assertFalse(
            self.request.responseHeaders.hasHeader('content-length'))


    def test_responseHeaders(self):
        """
        Content-Encoding header should be set appropriately.
        """
        self.assertEqual(
            self.request.responseHeaders.getRawHeaders('content-encoding'),
            ['gzip'])


    def test_lazySetup(self):
        """
        The gzip prelude should only be written once real data is written.

        This is necessary to avoid terminating the header too quickly.
        """
        self.assertEqual(self.request.accumulator, '')
        self.wrapper.write('foo')
        self.assertNotEqual(self.request.accumulator, '')


    def _ungzip(self, data):
        """
        Un-gzip some data.
        """
        s = StringIO(data)
        return GzipFile(fileobj=s, mode='rb').read()


    def test_encoding(self):
        """
        Response content should be written out in compressed format.
        """
        self.wrapper.write('foo')
        self.wrapper.write('bar')
        self.wrapper.finishRequest(True)
        self.assertEqual(self._ungzip(self.request.accumulator), 'foobar')


    def test_finish(self):
        """
        Calling C{finishRequest()} on the wrapper should cause the underlying
        implementation to be called.
        """
        self.wrapper.finishRequest(True)
        self.assertTrue(self.request.finished)
 def setUp(self):
     """
     Wrap a request fake to test the wrapper.
     """
     self.request = FakeRequest()
     self.wrapper = CompressingRequestWrapper(self.request)
class RequestWrapperTests(TestCase):
    """
    Tests for L{CompressingRequestWrapper}.
    """
    def setUp(self):
        """
        Wrap a request fake to test the wrapper.
        """
        self.request = FakeRequest()
        self.wrapper = CompressingRequestWrapper(self.request)

    def test_attributes(self):
        """
        Attributes on the wrapper should be forwarded to the underlying
        request.
        """
        attributes = ['method', 'uri', 'path', 'args', 'received_headers']
        for attrName in attributes:
            self.assertIdentical(getattr(self.wrapper, attrName),
                                 getattr(self.request, attrName))

    def test_missingAttributes(self):
        """
        Attributes that are not part of the interfaces being proxied should not
        be proxied.
        """
        self.assertRaises(AttributeError, getattr, self.wrapper, 'doesntexist')
        self.request._privateTestAttribute = 42
        self.assertRaises(AttributeError, getattr, self.wrapper,
                          '_privateTestAttribute')

    def test_contentLength(self):
        """
        Content-Length header should be discarded when compression is in use.
        """
        self.assertNotIn('content-length', self.request.headers)
        self.wrapper.setHeader(b'content-length', 1234)
        self.assertNotIn('content-length', self.request.headers)

        self.request.setHeader(b'content-length', 1234)
        self.wrapper = CompressingRequestWrapper(self.request)
        self.assertNotIn('content-length', self.request.headers)

    def test_responseHeaders(self):
        """
        Content-Encoding header should be set appropriately.
        """
        self.assertEqual(self.request.headers['content-encoding'], 'gzip')

    def test_lazySetup(self):
        """
        The gzip prelude should only be written once real data is written.

        This is necessary to avoid terminating the header too quickly.
        """
        self.assertEqual(self.request.accumulator, '')
        self.wrapper.write('foo')
        self.assertNotEqual(self.request.accumulator, '')

    def _ungzip(self, data):
        """
        Un-gzip some data.
        """
        s = StringIO(data)
        return GzipFile(fileobj=s, mode='rb').read()

    def test_encoding(self):
        """
        Response content should be written out in compressed format.
        """
        self.wrapper.write('foo')
        self.wrapper.write('bar')
        self.wrapper.finishRequest(True)
        self.assertEqual(self._ungzip(self.request.accumulator), 'foobar')

    def test_finish(self):
        """
        Calling C{finishRequest()} on the wrapper should cause the underlying
        implementation to be called.
        """
        self.wrapper.finishRequest(True)
        self.assertTrue(self.request.finished)