Add tests for frontend_cache's `HTTPBackend.purge` (#4851)

* Add frontend_cache::TestBackendConfiguration::test_http that covers HTTPBackend::purge
* Add test cases for `frontend_cache::HTTPBackend::purge` that check network issues
pull/4853/head
Stas Rudakou 2018-10-27 11:36:36 +03:00 zatwierdzone przez Matt Westcott
rodzic fa9e5318b6
commit ff50c07934
2 zmienionych plików z 46 dodań i 0 usunięć

Wyświetl plik

@ -324,6 +324,7 @@ Contributors
* Jorge Barata
* Brady Moe
* Yi Huang
* Stas Rudakou
Translators
===========

Wyświetl plik

@ -1,3 +1,5 @@
from urllib.error import HTTPError, URLError
import mock
from django.core.exceptions import ImproperlyConfigured
from django.test import TestCase
@ -63,6 +65,49 @@ class TestBackendConfiguration(TestCase):
self.assertEqual(backends['cloudfront'].cloudfront_distribution_id, 'frontend')
def test_http(self):
"""Test that `HTTPBackend.purge` works when urlopen succeeds"""
self._test_http_with_side_effect(urlopen_side_effect=None)
def test_http_httperror(self):
"""Test that `HTTPBackend.purge` can handle `HTTPError`"""
http_error = HTTPError(
url='http://localhost:8000/home/events/christmas/',
code=500,
msg='Internal Server Error',
hdrs={},
fp=None
)
self._test_http_with_side_effect(urlopen_side_effect=http_error)
def test_http_urlerror(self):
"""Test that `HTTPBackend.purge` can handle `URLError`"""
url_error = URLError(reason='just for tests')
self._test_http_with_side_effect(urlopen_side_effect=url_error)
@mock.patch('wagtail.contrib.frontend_cache.backends.urlopen')
def _test_http_with_side_effect(self, urlopen_mock, urlopen_side_effect):
# given a backends configuration with one HTTP backend
backends = get_backends(backend_settings={
'varnish': {
'BACKEND': 'wagtail.contrib.frontend_cache.backends.HTTPBackend',
'LOCATION': 'http://localhost:8000',
},
})
self.assertEqual(set(backends.keys()), set(['varnish']))
self.assertIsInstance(backends['varnish'], HTTPBackend)
# and mocked urlopen that may or may not raise network-related exception
urlopen_mock.side_effect = urlopen_side_effect
# when making a purge request
backends.get('varnish').purge('http://www.wagtail.io/home/events/christmas/')
# then no exception is raised
# and mocked urlopen is called with a proper purge request
self.assertEqual(urlopen_mock.call_count, 1)
(purge_request,), _call_kwargs = urlopen_mock.call_args
self.assertEqual(purge_request.full_url, 'http://localhost:8000/home/events/christmas/')
def test_cloudfront_validate_distribution_id(self):
with self.assertRaises(ImproperlyConfigured):
get_backends(backend_settings={