[Twisted-web] Possible bug in nevow.testutil.FakeRequest setHeaders and getHeaders

exarkun at twistedmatrix.com exarkun at twistedmatrix.com
Tue Sep 28 13:52:06 EDT 2010


On 05:23 pm, peter.westlake at pobox.com wrote:
>Recently my nevow web server's unit tests started to fail, because the
>tests used request.getHeader() to check that request.setHeader() had
>been called correctly. This used to work.
>
>I can see from testutil.py that setHeaders sets self.headers, but
>getHeaders gets a value from received_headers, and there is a test in
>test_testutil.py to make sure it does. So is this really how it is 
>meant
>to work? Is setHeader really meant to set something that getHeader 
>can't
>get? If so, what's the correct method for testing the result of
>setHeader?

It's correct that setHeader and getHeader operate on different data 
sets.  Less confusing names for what the two methods do would have been 
setResponseHeader and getRequestHeader respectively.

In newer versions of Twisted, the requests have two new attributes, 
requestHeaders and responseHeaders, with various methods for inspection 
and modification.  Nevow's Request class should inherit these.  However 
Nevow's FakeRequest probably doesn't.

The right way to test for headers is probably to fix the FakeRequest 
class so that it is more inspectable, and to verify that it actually 
behaves in the same way as a real request object.
>To reproduce the problem, run this with "trial":
>
>from nevow.testutil import FakeRequest, TestCase
>
>class TestHeaders(TestCase):
>    def setUp(self):
>        self.request = FakeRequest()
>
>    def test_set(self):
>        self.request.setHeader('location', 'somewhere')
>        self.failUnlessEqual(self.request.getHeader('location'),
>        'somewhere')
>
>Peter.

Jean-Paul



More information about the Twisted-web mailing list