commit d8edfdb62d4b9210353301497ad19d6ce4932a42
Author: Tom Prince <tom.prince@ualberta.net>
Date:   Mon Mar 12 00:18:52 2012 -0400

    Fix view_setResponseCode

diff --git twisted/web/server.py twisted/web/server.py
index 8edab18..9f4555a 100644
--- twisted/web/server.py
+++ twisted/web/server.py
@@ -286,10 +286,10 @@ class Request(pb.Copyable, http.Request, components.Componentized):
         """
         self.setETag(tag)
 
-    def view_setResponseCode(self, issuer, code):
+    def view_setResponseCode(self, issuer, code, message=None):
         """Remote version of setResponseCode; same interface.
         """
-        self.setResponseCode(code)
+        self.setResponseCode(code, message)
 
     def view_registerProducer(self, issuer, producer, streaming):
         """Remote version of registerProducer; same interface.
diff --git twisted/web/test/test_distrib.py twisted/web/test/test_distrib.py
index 172dab3..2a81f6c 100755
--- twisted/web/test/test_distrib.py
+++ twisted/web/test/test_distrib.py
@@ -19,9 +19,10 @@ from twisted.internet import reactor, defer
 from twisted.trial import unittest
 from twisted.spread import pb
 from twisted.spread.banana import SIZE_LIMIT
-from twisted.web import http, distrib, client, resource, static, server
+from twisted.web import http, distrib, client, resource, static, server, http_headers
 from twisted.web.test.test_web import DummyRequest
 from twisted.web.test._util import _render
+from twisted.test import proto_helpers
 
 
 class MySite(server.Site):
@@ -101,7 +102,9 @@ class DistribTest(unittest.TestCase):
         @param **kwargs: Extra keyword arguments to pass to L{getPage} when
             requesting the resource.
 
-        @return: A L{Deferred} which fires with the result of the request.
+        @return: A L{Deferred} which fires with a tuple consiting of a
+            L{twisted.test.proto_helpers.AccumulatingProtocol} containing the
+            body of the response and an L{IResposne} with the response itself.
         """
         distribRoot = resource.Resource()
         distribRoot.putChild("child", child)
@@ -120,10 +123,17 @@ class DistribTest(unittest.TestCase):
         self.addCleanup(mainPort.stopListening)
         mainAddr = mainPort.getHost()
 
-        return client.getPage("http://%s:%s/child" % (
+        d = client.Agent(reactor).request("GET", "http://%s:%s/child" % (
             mainAddr.host, mainAddr.port), **kwargs)
 
-
+        def cbCollectBody(response):
+            protocol = proto_helpers.AccumulatingProtocol()
+            response.deliverBody(protocol)
+            d = protocol.closedDeferred = defer.Deferred()
+            d.addCallback(lambda _: (protocol, response))
+            return d
+        d.addCallback(cbCollectBody)
+        return d
 
     def test_requestHeaders(self):
         """
@@ -138,13 +148,50 @@ class DistribTest(unittest.TestCase):
                     request.requestHeaders.getAllRawHeaders()))
                 return ""
 
+	headers = http_headers.Headers()
+	headers.addRawHeader('foo', 'bar')
         request = self._requestTest(
-            ReportRequestHeaders(), headers={'foo': 'bar'})
+            ReportRequestHeaders(), headers=headers)
         def cbRequested(result):
             self.assertEqual(requestHeaders['Foo'], ['bar'])
         request.addCallback(cbRequested)
         return request
 
+    def test_requestResponseCode(self):
+        """
+	The response code can be set by the request object passed to a
+        distributed resource's C{render} method.
+        """
+        class SetResponseCode(resource.Resource):
+            def render(self, request):
+		request.setResponseCode(200)
+                return ""
+
+        request = self._requestTest(SetResponseCode())
+        def cbRequested(result):
+            self.assertEqual(result[0].data, "")
+            self.assertEqual(result[1].code, 200)
+            self.assertEqual(result[1].phrase, "OK")
+        request.addCallback(cbRequested)
+        return request
+
+    def test_requestResponseCodeMessage(self):
+        """
+	The response code and message can be set by the request object passed to a
+        distributed resource's C{render} method.
+        """
+        class SetResponseCode(resource.Resource):
+            def render(self, request):
+		request.setResponseCode(200, "some-message")
+                return ""
+
+        request = self._requestTest(SetResponseCode())
+        def cbRequested(result):
+            self.assertEqual(result[0].data, "")
+            self.assertEqual(result[1].code, 200)
+            self.assertEqual(result[1].phrase, "some-message")
+        request.addCallback(cbRequested)
+        return request
 
     def test_largeWrite(self):
         """
@@ -159,6 +206,7 @@ class DistribTest(unittest.TestCase):
                 return server.NOT_DONE_YET
 
         request = self._requestTest(LargeWrite())
+        request.addCallback(lambda result: result[0].data)
         request.addCallback(self.assertEqual, 'x' * SIZE_LIMIT + 'y')
         return request
 
@@ -173,6 +221,7 @@ class DistribTest(unittest.TestCase):
                 return 'x' * SIZE_LIMIT + 'y'
 
         request = self._requestTest(LargeReturn())
+        request.addCallback(lambda result: result[0].data)
         request.addCallback(self.assertEqual, 'x' * SIZE_LIMIT + 'y')
         return request
 
