def test_renderRealRequest(self): """ The request managed by L{WebSocketsResource.render} doesn't contain unnecessary HTTP headers like I{Content-Type} or I{Transfer-Encoding}. """ channel = DummyChannel() channel.transport = StringTransportWithDisconnection() channel.transport.protocol = channel request = Request(channel, False) headers = { "upgrade": "Websocket", "connection": "Upgrade", "sec-websocket-key": "secure", "sec-websocket-version": "13"} for key, value in headers.items(): request.requestHeaders.setRawHeaders(key, [value]) request.method = "GET" request.clientproto = "HTTP/1.1" result = self.resource.render(request) self.assertEqual(NOT_DONE_YET, result) self.assertEqual( [("Connection", ["Upgrade"]), ("Upgrade", ["WebSocket"]), ("Sec-Websocket-Accept", ["oYBv54i42V5dw6KnZqOFroecUTc="])], list(request.responseHeaders.getAllRawHeaders())) self.assertEqual( "HTTP/1.1 101 Switching Protocols\r\n" "Connection: Upgrade\r\n" "Upgrade: WebSocket\r\n" "Sec-Websocket-Accept: oYBv54i42V5dw6KnZqOFroecUTc=\r\n\r\n", channel.transport.value()) self.assertEqual(101, request.code) self.assertIdentical(None, request.transport)
def renderRequest(self, headers=None, url="/test", ssl=False, queued=False, body=None): """ Render a request against C{self.site}, writing the WebSocket handshake. """ if headers is None: headers = [ ("Upgrade", "WebSocket"), ("Connection", "Upgrade"), ("Host", "localhost"), ("Origin", "http://localhost/")] channel = DummyChannel() if ssl: channel.transport = channel.SSL() channel.site = self.site request = self.site.requestFactory(channel, queued) for k, v in headers: request.requestHeaders.addRawHeader(k, v) request.gotLength(0) request.requestReceived("GET", url, "HTTP/1.1") if body: request.channel._transferDecoder.finishCallback(body) return channel
def channelFactory(): channel = DummyChannel() channel.transport = DummyChannel.SSL() return channel
def makeChannel(): channel = DummyChannel() channel.transport = DummyChannel.TCP() channel.transport.port = portNumber return channel
def requestMock( path: bytes, method: bytes = b"GET", host: bytes = b"localhost", port: int = 8080, isSecure: bool = False, body: bytes = b"", headers: Optional[Mapping[bytes, Sequence[bytes]]] = None, ) -> IRequest: if not headers: headers = {} if not body: body = b"" path, qpath = (path.split(b"?", 1) + [b""])[:2] request = server.Request(DummyChannel(), False) request.site = Mock(server.Site) request.gotLength(len(body)) request.content = BytesIO() request.content.write(body) request.content.seek(0) request.args = parse_qs(qpath) request.requestHeaders = Headers(headers) request.setHost(host, port, isSecure) request.uri = path request.prepath = [] request.postpath = path.split(b"/")[1:] request.method = method request.clientproto = b"HTTP/1.1" request.setHeader = Mock(wraps=request.setHeader) request.setResponseCode = Mock(wraps=request.setResponseCode) request._written = BytesIO() request.finishCount = 0 request.writeCount = 0 def registerProducer(producer, streaming): request.producer = producer for _ in range(2): if request.producer: request.producer.resumeProducing() def unregisterProducer(): request.producer = None def finish(): request.finishCount += 1 if not request.startedWriting: request.write(b"") if not request.finished: request.finished = True request._cleanup() def write(data): request.writeCount += 1 request.startedWriting = True if not request.finished: request._written.write(data) else: raise RuntimeError("Request.write called on a request after " "Request.finish was called.") def getWrittenData(): return request._written.getvalue() request.finish = finish request.write = write request.getWrittenData = getWrittenData request.registerProducer = registerProducer request.unregisterProducer = unregisterProducer request.processingFailed = Mock(wraps=request.processingFailed) return request
def mock_get_request(path, method=b"GET"): request = server.Request(DummyChannel(), False) request.uri = path request.method = method request.clientproto = b'HTTP/1.1' return request