Skip to content

Commit 2ad17d3

Browse files
committed
mirrors: convert to pytest
1 parent 1592e68 commit 2ad17d3

File tree

1 file changed

+123
-141
lines changed

1 file changed

+123
-141
lines changed

mirrors/tests/test_mirrorcheck.py

Lines changed: 123 additions & 141 deletions
Original file line numberDiff line numberDiff line change
@@ -6,150 +6,132 @@
66
from ssl import CertificateError
77
from socket import timeout, error
88

9+
import pytest
910

1011
from django.utils.timezone import now
1112
from datetime import timedelta
1213

13-
14-
from django.test import TestCase
1514
from django.core.management import call_command
1615

17-
18-
from mirrors.tests import create_mirror_url
19-
from mirrors.models import MirrorLog, CheckLocation
20-
21-
22-
class MirrorCheckTest(TestCase):
23-
def setUp(self):
24-
self.mirror_url = create_mirror_url()
25-
26-
def tearDown(self):
27-
self.mirror_url.delete()
28-
29-
@mock.patch('urllib.request.Request')
30-
@mock.patch('urllib.request.urlopen')
31-
def test_invalid(self, urlopen, Request):
32-
urlopen.return_value.read.return_value = 'data'
33-
Request.get_host.return_value = 'archlinux.org'
34-
Request.type.return_value = 'https'
35-
36-
call_command('mirrorcheck')
37-
mirrorlog = MirrorLog.objects.first()
38-
self.assertNotEqual(mirrorlog.error, '')
39-
self.assertEqual(mirrorlog.is_success, False)
40-
41-
@mock.patch('urllib.request.Request')
42-
@mock.patch('urllib.request.urlopen')
43-
def test_valid(self, urlopen, Request):
44-
urlopen.return_value.read.return_value = str(int(time.time()))
45-
Request.get_host.return_value = 'archlinux.org'
46-
Request.type.return_value = 'https'
47-
48-
call_command('mirrorcheck')
49-
mirrorlog = MirrorLog.objects.first()
50-
self.assertEqual(mirrorlog.error, '')
51-
self.assertEqual(mirrorlog.is_success, True)
52-
53-
@mock.patch('urllib.request.Request')
54-
@mock.patch('urllib.request.urlopen')
55-
def test_valid_olddate(self, urlopen, Request):
56-
urlopen.return_value.read.return_value = str(int(time.time()))
57-
Request.get_host.return_value = 'archlinux.org'
58-
Request.type.return_value = 'https'
59-
60-
date = now() - timedelta(days=600)
61-
MirrorLog.objects.create(url=self.mirror_url, check_time=date)
62-
call_command('mirrorcheck')
63-
self.assertEqual(len(MirrorLog.objects.all()), 1)
64-
65-
@mock.patch('urllib.request.Request')
66-
@mock.patch('urllib.request.urlopen')
67-
def test_not_found(self, urlopen, Request):
68-
excp = HTTPError('https://archlinux.org/404.txt', 404, 'Not Found', '', None)
69-
urlopen.return_value.read.side_effect = excp
70-
Request.get_host.return_value = 'archlinux.org'
71-
Request.type.return_value = 'https'
72-
73-
call_command('mirrorcheck')
74-
mirrorlog = MirrorLog.objects.first()
75-
self.assertEqual(mirrorlog.error, str(excp))
76-
self.assertEqual(mirrorlog.is_success, False)
77-
78-
@mock.patch('urllib.request.Request')
79-
@mock.patch('urllib.request.urlopen')
80-
def test_not_found_variant(self, urlopen, Request):
81-
excp = BadStatusLine('')
82-
urlopen.return_value.read.side_effect = excp
83-
Request.get_host.return_value = 'archlinux.org'
84-
Request.type.return_value = 'https'
85-
86-
call_command('mirrorcheck')
87-
mirrorlog = MirrorLog.objects.first()
88-
self.assertIn('Exception in processing', mirrorlog.error)
89-
self.assertEqual(mirrorlog.is_success, False)
90-
91-
@mock.patch('urllib.request.Request')
92-
@mock.patch('urllib.request.urlopen')
93-
def test_cert_error(self, urlopen, Request):
94-
excp = CertificateError('certificate error')
95-
urlopen.return_value.read.side_effect = excp
96-
Request.get_host.return_value = 'archlinux.org'
97-
Request.type.return_value = 'https'
98-
99-
call_command('mirrorcheck')
100-
mirrorlog = MirrorLog.objects.first()
101-
self.assertIn('certificate error', mirrorlog.error)
102-
self.assertEqual(mirrorlog.is_success, False)
103-
104-
@mock.patch('urllib.request.Request')
105-
@mock.patch('urllib.request.urlopen')
106-
def test_general_httpexception(self, urlopen, Request):
107-
excp = URLError('550 No such file', '550.txt')
108-
urlopen.return_value.read.side_effect = excp
109-
Request.get_host.return_value = 'archlinux.org'
110-
Request.type.return_value = 'https'
111-
112-
call_command('mirrorcheck')
113-
mirrorlog = MirrorLog.objects.first()
114-
self.assertIn(excp.reason, mirrorlog.error)
115-
self.assertEqual(mirrorlog.is_success, False)
116-
117-
@mock.patch('urllib.request.Request')
118-
@mock.patch('urllib.request.urlopen')
119-
def test_socket_timeout(self, urlopen, Request):
120-
excp = timeout('timeout')
121-
urlopen.return_value.read.side_effect = excp
122-
Request.get_host.return_value = 'archlinux.org'
123-
Request.type.return_value = 'https'
124-
125-
call_command('mirrorcheck')
126-
mirrorlog = MirrorLog.objects.first()
127-
self.assertEqual('Connection timed out.', mirrorlog.error)
128-
self.assertEqual(mirrorlog.is_success, False)
129-
130-
@mock.patch('urllib.request.Request')
131-
@mock.patch('urllib.request.urlopen')
132-
def test_socket_error(self, urlopen, Request):
133-
excp = error('error')
134-
urlopen.return_value.read.side_effect = excp
135-
Request.get_host.return_value = 'archlinux.org'
136-
Request.type.return_value = 'https'
137-
138-
call_command('mirrorcheck')
139-
mirrorlog = MirrorLog.objects.first()
140-
self.assertEqual(str(excp), mirrorlog.error)
141-
self.assertEqual(mirrorlog.is_success, False)
142-
143-
def test_checklocation(self):
144-
with self.assertRaises(CheckLocation.DoesNotExist) as e:
145-
call_command('mirrorcheck', '-l', '1')
146-
self.assertEqual('CheckLocation matching query does not exist.', str(e.exception))
147-
148-
def test_checklocation_model(self):
149-
checkloc = CheckLocation.objects.create(hostname='archlinux.org',
150-
source_ip='1.1.1.1')
151-
with mock.patch('mirrors.management.commands.mirrorcheck.logger') as logger:
152-
call_command('mirrorcheck', '-l', '1')
153-
logger.info.assert_called()
154-
155-
checkloc.delete()
16+
from mirrors.models import CheckLocation, MirrorLog
17+
from mirrors.tests.conftest import HOSTNAME, PROTOCOL
18+
19+
20+
def mocked_request(urlopen, Request, return_value):
21+
urlopen.return_value.read.return_value = return_value
22+
Request.get_host.return_value = HOSTNAME
23+
Request.type.return_value = PROTOCOL
24+
25+
26+
def mocked_request_exception(urlopen, Request, excp):
27+
urlopen.return_value.read.side_effect = excp
28+
Request.get_host.return_value = HOSTNAME
29+
Request.type.return_value = PROTOCOL
30+
31+
32+
@mock.patch('urllib.request.Request')
33+
@mock.patch('urllib.request.urlopen')
34+
def test_invalid(urlopen, Request, mirrorurl):
35+
mocked_request(urlopen, Request, 'data')
36+
call_command('mirrorcheck')
37+
mirrorlog = MirrorLog.objects.first()
38+
assert mirrorlog.error != ''
39+
assert mirrorlog.is_success == False
40+
41+
@mock.patch('urllib.request.Request')
42+
@mock.patch('urllib.request.urlopen')
43+
def test_valid(urlopen, Request, mirrorurl):
44+
mocked_request(urlopen, Request, str(int(time.time())))
45+
call_command('mirrorcheck')
46+
mirrorlog = MirrorLog.objects.first()
47+
assert mirrorlog.error == ''
48+
assert mirrorlog.is_success == True
49+
50+
51+
@mock.patch('urllib.request.Request')
52+
@mock.patch('urllib.request.urlopen')
53+
def test_valid_olddate(urlopen, Request, mirrorurl):
54+
mocked_request(urlopen, Request, str(int(time.time())))
55+
date = now() - timedelta(days=600)
56+
MirrorLog.objects.create(url=mirrorurl, check_time=date)
57+
call_command('mirrorcheck')
58+
assert len(MirrorLog.objects.all()) == 1
59+
60+
61+
@mock.patch('urllib.request.Request')
62+
@mock.patch('urllib.request.urlopen')
63+
def test_not_found(urlopen, Request, mirrorurl):
64+
excp = HTTPError('https://archlinux.org/404.txt', 404, 'Not Found', '', None)
65+
mocked_request_exception(urlopen, Request, excp)
66+
call_command('mirrorcheck')
67+
mirrorlog = MirrorLog.objects.first()
68+
assert mirrorlog.error == str(excp)
69+
assert mirrorlog.is_success == False
70+
71+
72+
@mock.patch('urllib.request.Request')
73+
@mock.patch('urllib.request.urlopen')
74+
def test_not_found_variant(urlopen, Request, mirrorurl):
75+
excp = BadStatusLine('')
76+
mocked_request_exception(urlopen, Request, excp)
77+
call_command('mirrorcheck')
78+
mirrorlog = MirrorLog.objects.first()
79+
assert 'Exception in processing' in mirrorlog.error
80+
assert mirrorlog.is_success == False
81+
82+
83+
@mock.patch('urllib.request.Request')
84+
@mock.patch('urllib.request.urlopen')
85+
def test_cert_error(urlopen, Request, mirrorurl):
86+
excp = CertificateError('certificate error')
87+
mocked_request_exception(urlopen, Request, excp)
88+
call_command('mirrorcheck')
89+
mirrorlog = MirrorLog.objects.first()
90+
assert 'certificate error' in mirrorlog.error
91+
assert mirrorlog.is_success == False
92+
93+
94+
@mock.patch('urllib.request.Request')
95+
@mock.patch('urllib.request.urlopen')
96+
def test_general_httpexception(urlopen, Request, mirrorurl):
97+
excp = URLError('550 No such file', '550.txt')
98+
mocked_request_exception(urlopen, Request, excp)
99+
call_command('mirrorcheck')
100+
mirrorlog = MirrorLog.objects.first()
101+
assert excp.reason in mirrorlog.error
102+
assert mirrorlog.is_success == False
103+
104+
105+
@mock.patch('urllib.request.Request')
106+
@mock.patch('urllib.request.urlopen')
107+
def test_socket_timeout(urlopen, Request, mirrorurl):
108+
excp = timeout('timeout')
109+
mocked_request_exception(urlopen, Request, excp)
110+
111+
call_command('mirrorcheck')
112+
mirrorlog = MirrorLog.objects.first()
113+
assert 'Connection timed out.' in mirrorlog.error
114+
assert mirrorlog.is_success == False
115+
116+
117+
@mock.patch('urllib.request.Request')
118+
@mock.patch('urllib.request.urlopen')
119+
def test_socket_error(urlopen, Request, mirrorurl):
120+
excp = error('error')
121+
mocked_request_exception(urlopen, Request, excp)
122+
123+
call_command('mirrorcheck')
124+
mirrorlog = MirrorLog.objects.first()
125+
assert str(excp) in mirrorlog.error
126+
assert mirrorlog.is_success == False
127+
128+
129+
def test_checklocation_fail(db):
130+
with pytest.raises(CheckLocation.DoesNotExist) as e:
131+
call_command('mirrorcheck', '-l', '1')
132+
assert 'CheckLocation matching query does not exist.' == str(e.value)
133+
134+
def test_checklocation_model(checklocation):
135+
with mock.patch('mirrors.management.commands.mirrorcheck.logger') as logger:
136+
call_command('mirrorcheck', '-l', '1')
137+
logger.info.assert_called()

0 commit comments

Comments
 (0)