def _testDataForward(self, data, method="GET", body=""): """ Build a fake proxy connection, and send C{data} over it, checking that it's forwarded to the originating request. """ # Connect everything clientTransport = StringTransportWithDisconnection() serverTransport = StringTransportWithDisconnection() channel = DummyChannel(serverTransport) parent = DummyParent(channel) serverTransport.protocol = channel client = ProxyClient(method, '/foo', 'HTTP/1.0', {"accept": "text/html"}, body, parent) clientTransport.protocol = client client.makeConnection(clientTransport) # Check data sent self.assertEquals( clientTransport.value(), "%s /foo HTTP/1.0\r\n" "connection: close\r\n" "accept: text/html\r\n\r\n%s" % (method, body)) # Fake an answer client.dataReceived(data) # Check that the data has been forwarded self.assertEquals(serverTransport.value(), data) clientTransport.loseConnection() self.assertIsInstance(channel.lostReason, ConnectionDone)
def _testDataForward(self, data, method="GET", body=""): """ Build a fake proxy connection, and send C{data} over it, checking that it's forwarded to the originating request. """ # Connect everything clientTransport = StringTransportWithDisconnection() serverTransport = StringTransportWithDisconnection() channel = DummyChannel(serverTransport) parent = DummyParent(channel) serverTransport.protocol = channel client = ProxyClient(method, '/foo', 'HTTP/1.0', {"accept": "text/html"}, body, parent) clientTransport.protocol = client client.makeConnection(clientTransport) # Check data sent self.assertEquals(clientTransport.value(), "%s /foo HTTP/1.0\r\n" "connection: close\r\n" "accept: text/html\r\n\r\n%s" % (method, body)) # Fake an answer client.dataReceived(data) # Check that the data has been forwarded self.assertEquals(serverTransport.value(), data) clientTransport.loseConnection() self.assertIsInstance(channel.lostReason, ConnectionDone)
def _testDataForward(self, code, message, headers, body, method="GET", requestBody="", loseConnection=True): """ Build a fake proxy connection, and send C{data} over it, checking that it's forwarded to the originating request. """ request = DummyRequest(['foo']) # Connect a proxy client to a fake transport. clientTransport = StringTransportWithDisconnection() client = ProxyClient(method, '/foo', 'HTTP/1.0', {"accept": "text/html"}, requestBody, request) clientTransport.protocol = client client.makeConnection(clientTransport) # Check data sent self.assertEquals( clientTransport.value(), "%s /foo HTTP/1.0\r\n" "connection: close\r\n" "accept: text/html\r\n\r\n%s" % (method, requestBody)) # Fake an answer client.dataReceived("HTTP/1.0 %d %s\r\n" % (code, message)) for (header, values) in headers: for value in values: client.dataReceived("%s: %s\r\n" % (header, value)) client.dataReceived("\r\n" + body) # Check that the response data has been forwarded back to the original # requester. self.assertEquals(request.responseCode, code) self.assertEquals(request.responseMessage, message) receivedHeaders = list(request.responseHeaders.getAllRawHeaders()) receivedHeaders.sort() expectedHeaders = headers[:] expectedHeaders.sort() self.assertEquals(receivedHeaders, expectedHeaders) self.assertEquals(''.join(request.written), body) # Check that when the response is done, the request is finished. if loseConnection: clientTransport.loseConnection() # Even if we didn't call loseConnection, the transport should be # disconnected. This lets us not rely on the server to close our # sockets for us. self.assertFalse(clientTransport.connected) self.assertEquals(request.finished, 1)
def _testDataForward(self, code, message, headers, body, method="GET", requestBody="", loseConnection=True): """ Build a fake proxy connection, and send C{data} over it, checking that it's forwarded to the originating request. """ request = DummyRequest(['foo']) # Connect a proxy client to a fake transport. clientTransport = StringTransportWithDisconnection() client = ProxyClient(method, '/foo', 'HTTP/1.0', {"accept": "text/html"}, requestBody, request) clientTransport.protocol = client client.makeConnection(clientTransport) # Check data sent self.assertEquals(clientTransport.value(), "%s /foo HTTP/1.0\r\n" "connection: close\r\n" "accept: text/html\r\n\r\n%s" % (method, requestBody)) # Fake an answer client.dataReceived("HTTP/1.0 %d %s\r\n" % (code, message)) for (header, values) in headers: for value in values: client.dataReceived("%s: %s\r\n" % (header, value)) client.dataReceived("\r\n" + body) # Check that the response data has been forwarded back to the original # requester. self.assertEquals(request.responseCode, code) self.assertEquals(request.responseMessage, message) receivedHeaders = list(request.responseHeaders.getAllRawHeaders()) receivedHeaders.sort() expectedHeaders = headers[:] expectedHeaders.sort() self.assertEquals(receivedHeaders, expectedHeaders) self.assertEquals(''.join(request.written), body) # Check that when the response is done, the request is finished. if loseConnection: clientTransport.loseConnection() # Even if we didn't call loseConnection, the transport should be # disconnected. This lets us not rely on the server to close our # sockets for us. self.assertFalse(clientTransport.connected) self.assertEquals(request.finished, 1)