def test_redirect_to_same_host(self): finished = self.fetcher.fetch_title('http://foo.test/', hostname_tag=True) request, result = self.protocol.requests.pop() redirect_headers = Headers() redirect_headers.addRawHeader('Location', 'http://foo.test/bar') response = Response._construct(('HTTP', 1, 1), 301, 'Moved Permanently', redirect_headers, AbortableStringTransport(), request) result.callback(response) request, result = self.protocol.requests.pop() response = Response._construct(('HTTP', 1, 1), 200, 'OK', Headers(), AbortableStringTransport(), request) result.callback(response) finished.addCallback(self.assertEqual, u'[foo.test] Unknown document') return finished
def test_no_redirect(self): finished = self.fetcher.fetch_title('http://foo.test/', hostname_tag=True) request, result = self.protocol.requests.pop() response = Response._construct(('HTTP', 1, 1), 200, 'OK', Headers(), AbortableStringTransport(), request) result.callback(response) finished.addCallback(self.assertEqual, u'[foo.test] Unknown document') return finished
def test_tag_iri_to_uri(self): finished = self.fetcher.fetch_title(u'http://ドメイン名例.test/', hostname_tag=True) request, result = self.protocol.requests.pop() response = Response._construct(('HTTP', 1, 1), 200, 'OK', Headers(), AbortableStringTransport(), request) result.callback(response) finished.addCallback( self.assertEqual, u'[ドメイン名例.test → xn--eckwd4c7cu47r2wf.test] ' u'Unknown document') return finished
def test_soft_redirect(self): self.fetcher.extractors = { 'text/html': SoftRedirectExtractor(u'http://bar.test/') } finished = self.fetcher.fetch_title('http://foo.test/', hostname_tag=True) request, result = self.protocol.requests.pop() redirect_headers = Headers() redirect_headers.addRawHeader('Content-Type', 'text/html') response = Response._construct(('HTTP', 1, 1), 200, 'OK', redirect_headers, AbortableStringTransport(), request) result.callback(response) request, result = self.protocol.requests.pop() response = Response._construct(('HTTP', 1, 1), 200, 'OK', Headers(), AbortableStringTransport(), request) result.callback(response) finished.addCallback(self.assertEqual, u'[foo.test → bar.test] Unknown document') return finished
def assert_delivery(self, data, expected): finished = Deferred() finished.addCallback(self.assertEqual, expected) response = Response(('HTTP', 1, 1), 200, 'OK', Headers(), AbortableStringTransport()) protocol = TruncatingReadBodyProtocol(response.code, response.phrase, finished, max_bytes=8) response.deliverBody(protocol) response._bodyDataReceived(data) response._bodyDataFinished() return finished
def test_infinite_hard_redirection(self): finished = self.fetcher.fetch_title(u'http://foo.test/', hostname_tag=True, friendly_errors=True) while self.protocol.requests: request, result = self.protocol.requests.pop() redirect_headers = Headers() redirect_headers.addRawHeader('Location', 'http://foo.test/') response = Response._construct( ('HTTP', 1, 1), 301, 'Moved Permanently', redirect_headers, AbortableStringTransport(), request) result.callback(response) finished.addCallback(self.assertEqual, u'[foo.test] Encountered too many redirects.') return finished
def test_infinite_soft_redirection(self): self.fetcher.extractors = { 'text/html': SoftRedirectExtractor(u'http://foo.test/') } finished = self.fetcher.fetch_title(u'http://foo.test/', hostname_tag=True, friendly_errors=True) while self.protocol.requests: request, result = self.protocol.requests.pop() redirect_headers = Headers() redirect_headers.addRawHeader('Content-Type', 'text/html') response = Response._construct(('HTTP', 1, 1), 200, 'OK', redirect_headers, AbortableStringTransport(), request) result.callback(response) finished.addCallback(self.assertEqual, u'[foo.test] Encountered too many redirects.') return finished