summaryrefslogtreecommitdiffstats
path: root/mirrors
diff options
context:
space:
mode:
authorJelle van der Waa <jelle@vdwaa.nl>2019-02-21 19:58:10 +0100
committerJelle van der Waa <jelle@vdwaa.nl>2019-02-21 19:58:10 +0100
commit6875265c1097d74bc6cad0decfa27ac11bf75789 (patch)
tree7e8015061687fc65791641807d1e07fa2eec7d04 /mirrors
parente79a651582fd58e55b2995176fa009bf4cc35c7e (diff)
downloadarchweb-6875265c1097d74bc6cad0decfa27ac11bf75789.tar.gz
archweb-6875265c1097d74bc6cad0decfa27ac11bf75789.zip
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.
Diffstat (limited to 'mirrors')
-rw-r--r--mirrors/tests/test_mirrorcheck.py55
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')