diff options
author | Jelle van der Waa <jelle@vdwaa.nl> | 2019-02-21 19:58:10 +0100 |
---|---|---|
committer | Jelle van der Waa <jelle@vdwaa.nl> | 2019-02-21 19:58:10 +0100 |
commit | 6875265c1097d74bc6cad0decfa27ac11bf75789 (patch) | |
tree | 7e8015061687fc65791641807d1e07fa2eec7d04 | |
parent | e79a651582fd58e55b2995176fa009bf4cc35c7e (diff) |
mirrors: tests: add exception handling tests
Include more tests for exception handling cases, refactor this later
using pytest fixture's so there is no need for massive code duplication.
-rw-r--r-- | mirrors/tests/test_mirrorcheck.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/mirrors/tests/test_mirrorcheck.py b/mirrors/tests/test_mirrorcheck.py index fd52fe67..c4a6450d 100644 --- a/mirrors/tests/test_mirrorcheck.py +++ b/mirrors/tests/test_mirrorcheck.py @@ -1,7 +1,10 @@ import time +from http.client import BadStatusLine from unittest import mock from urllib.error import HTTPError, URLError +from ssl import CertificateError +from socket import timeout, error from django.utils.timezone import now @@ -75,6 +78,32 @@ class MirrorCheckTest(TestCase): @mock.patch('urllib.request.Request') @mock.patch('urllib.request.urlopen') def test_not_found_variant(self, urlopen, Request): + excp = BadStatusLine('') + urlopen.return_value.read.side_effect = excp + Request.get_host.return_value = 'archlinux.org' + Request.type.return_value = 'https' + + call_command('mirrorcheck') + mirrorlog = MirrorLog.objects.first() + self.assertIn('Exception in processing', mirrorlog.error) + self.assertEqual(mirrorlog.is_success, False) + + @mock.patch('urllib.request.Request') + @mock.patch('urllib.request.urlopen') + def test_cert_error(self, urlopen, Request): + excp = CertificateError('certificate error') + urlopen.return_value.read.side_effect = excp + Request.get_host.return_value = 'archlinux.org' + Request.type.return_value = 'https' + + call_command('mirrorcheck') + mirrorlog = MirrorLog.objects.first() + self.assertIn('certificate error', mirrorlog.error) + self.assertEqual(mirrorlog.is_success, False) + + @mock.patch('urllib.request.Request') + @mock.patch('urllib.request.urlopen') + def test_general_httpexception(self, urlopen, Request): excp = URLError('550 No such file', '550.txt') urlopen.return_value.read.side_effect = excp Request.get_host.return_value = 'archlinux.org' @@ -85,6 +114,32 @@ class MirrorCheckTest(TestCase): self.assertIn(excp.reason, mirrorlog.error) self.assertEqual(mirrorlog.is_success, False) + @mock.patch('urllib.request.Request') + @mock.patch('urllib.request.urlopen') + def test_socket_timeout(self, urlopen, Request): + excp = timeout('timeout') + urlopen.return_value.read.side_effect = excp + Request.get_host.return_value = 'archlinux.org' + Request.type.return_value = 'https' + + call_command('mirrorcheck') + mirrorlog = MirrorLog.objects.first() + self.assertEqual('Connection timed out.', mirrorlog.error) + self.assertEqual(mirrorlog.is_success, False) + + @mock.patch('urllib.request.Request') + @mock.patch('urllib.request.urlopen') + def test_socket_error(self, urlopen, Request): + excp = error('error') + urlopen.return_value.read.side_effect = excp + Request.get_host.return_value = 'archlinux.org' + Request.type.return_value = 'https' + + call_command('mirrorcheck') + mirrorlog = MirrorLog.objects.first() + self.assertEqual(str(excp), mirrorlog.error) + self.assertEqual(mirrorlog.is_success, False) + def test_checklocation(self): with self.assertRaises(CheckLocation.DoesNotExist) as e: call_command('mirrorcheck', '-l', '1') |