Fix SERVER_PORT for Page.dummy_request() when page is attached to Site with 443 port. (#4950)

pull/4954/head
Sergey Fedoseev 2018-12-08 01:17:17 +05:00 zatwierdzone przez Matt Westcott
rodzic 056096c2de
commit 5f7b7230a2
4 zmienionych plików z 30 dodań i 1 usunięć

Wyświetl plik

@ -4,6 +4,8 @@ Changelog
2.5 (xx.xx.xxxx) - IN DEVELOPMENT
~~~~~~~~~~~~~~~~
* Fix: Set `SERVER_PORT` to 443 in `Page.dummy_request()` for HTTPS sites (Sergey Fedoseev)
2.4 (xx.xx.xxxx) - IN DEVELOPMENT
~~~~~~~~~~~~~~~~

Wyświetl plik

@ -18,6 +18,8 @@ Other features
Bug fixes
~~~~~~~~~
* Set ``SERVER_PORT`` to 443 in ``Page.dummy_request()`` for HTTPS sites (Sergey Fedoseev)
Upgrade considerations
======================

Wyświetl plik

@ -1215,7 +1215,7 @@ class Page(AbstractPage, index.Indexed, ClusterableModel, metaclass=PageBase):
url_info = urlparse(url)
hostname = url_info.hostname
path = url_info.path
port = url_info.port or 80
port = url_info.port or (443 if url_info.scheme == 'https' else 80)
scheme = url_info.scheme
else:
# Cannot determine a URL to this page - cobble one together based on

Wyświetl plik

@ -1364,6 +1364,31 @@ class TestDummyRequest(TestCase):
self.assertIn('wsgi.multiprocess', request.META)
self.assertIn('wsgi.run_once', request.META)
def test_dummy_request_for_accessible_page_https(self):
Site.objects.update(port=443)
event_index = Page.objects.get(url_path='/home/events/')
request = event_index.dummy_request()
# request should have the correct path and hostname for this page
self.assertEqual(request.path, '/events/')
self.assertEqual(request.META['HTTP_HOST'], 'localhost')
# check other env vars required by the WSGI spec
self.assertEqual(request.META['REQUEST_METHOD'], 'GET')
self.assertEqual(request.META['SCRIPT_NAME'], '')
self.assertEqual(request.META['PATH_INFO'], '/events/')
self.assertEqual(request.META['SERVER_NAME'], 'localhost')
self.assertEqual(request.META['SERVER_PORT'], 443)
self.assertEqual(request.META['SERVER_PROTOCOL'], 'HTTP/1.1')
self.assertEqual(request.META['wsgi.version'], (1, 0))
self.assertEqual(request.META['wsgi.url_scheme'], 'https')
self.assertIn('wsgi.input', request.META)
self.assertIn('wsgi.errors', request.META)
self.assertIn('wsgi.multithread', request.META)
self.assertIn('wsgi.multiprocess', request.META)
self.assertIn('wsgi.run_once', request.META)
def test_dummy_request_for_accessible_page_with_original_request(self):
event_index = Page.objects.get(url_path='/home/events/')
original_headers = {