Left: | ||
Right: |
LEFT | RIGHT |
---|---|
1 # This file is part of the Adblock Plus web scripts, | 1 # This file is part of the Adblock Plus web scripts, |
2 # Copyright (C) 2006-present eyeo GmbH | 2 # Copyright (C) 2006-present eyeo GmbH |
3 # | 3 # |
4 # Adblock Plus is free software: you can redistribute it and/or modify | 4 # Adblock Plus is free software: you can redistribute it and/or modify |
5 # it under the terms of the GNU General Public License version 3 as | 5 # it under the terms of the GNU General Public License version 3 as |
6 # published by the Free Software Foundation. | 6 # published by the Free Software Foundation. |
7 # | 7 # |
8 # Adblock Plus is distributed in the hope that it will be useful, | 8 # Adblock Plus is distributed in the hope that it will be useful, |
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
11 # GNU General Public License for more details. | 11 # GNU General Public License for more details. |
12 # | 12 # |
13 # You should have received a copy of the GNU General Public License | 13 # You should have received a copy of the GNU General Public License |
14 # along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 14 # along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
15 | 15 |
16 from __future__ import unicode_literals | |
17 | |
16 import subprocess | 18 import subprocess |
Vasily Kuznetsov
2018/07/20 21:00:01
Same comment about ordering as in oauth2dl.py
Tudor Avram
2018/07/23 19:29:03
Acknowledged.
Tudor Avram
2018/07/31 09:20:17
Done.
| |
17 import pytest | 19 import pytest |
18 import json | 20 import json |
21 | |
19 from wsgi_intercept.interceptor import Httplib2Interceptor | 22 from wsgi_intercept.interceptor import Httplib2Interceptor |
20 | 23 |
21 import sitescripts.oauth2dl.bin.constants as cnts | 24 import sitescripts.oauth2dl.bin.constants as cnts |
22 from sitescripts.oauth2dl.utils.dummy_wsgi_app import main as intercept_app | 25 from sitescripts.oauth2dl.test.dummy_wsgi_app import main as intercept_app |
23 from sitescripts.oauth2dl.bin.oauth2dl import download_file, write_to_file | 26 from sitescripts.oauth2dl.bin.oauth2dl import download_file |
27 | |
28 | |
29 def get_valid_keyfile(): | |
30 return { | |
31 'private_key_id': 6, | |
32 'private_key': cnts.DUMMY_PRIVATE_KEY, | |
33 'client_email': 'firstpart@secondpart.com', | |
34 'client_id': '8', | |
35 'type': 'service_account', | |
36 } | |
24 | 37 |
25 | 38 |
26 def get_intercept_app(): | 39 def get_intercept_app(): |
27 """Return the intercepting WSGI application.""" | 40 """Return the intercepting WSGI application.""" |
28 return intercept_app | 41 return intercept_app |
29 | 42 |
30 | 43 |
31 def write_to_json(data, path): | 44 def write_to_json(data, path): |
32 """Write data to JSON.""" | 45 """Write data to JSON.""" |
33 with open(str(path), 'w') as f: | 46 with open(str(path), 'w') as f: |
34 json.dump(data, f) | 47 json.dump(data, f) |
35 | 48 |
36 | 49 |
37 @pytest.fixture | 50 @pytest.fixture |
38 def rootdir(tmpdir): | 51 def rootdir(tmpdir): |
39 """Directory with prepared key and downloadable files.""" | 52 """Directory with prepared key and downloadable files.""" |
40 rootdir = tmpdir.join('root') | 53 rootdir = tmpdir.join('root') |
41 rootdir.mkdir() | 54 rootdir.mkdir() |
42 | 55 |
43 # Keyfile missing a key - private_key_id | 56 # Keyfile missing a key - private_key_id |
44 invalid_keyfile_path = rootdir.join('keyfile_missing_key.json') | 57 invalid_keyfile_path = rootdir.join('keyfile_missing_key.json') |
45 data = { | 58 data = get_valid_keyfile() |
46 'private_key': cnts.DUMMY_PRIVATE_KEY, | 59 data.pop('private_key') |
47 'client_email': 'firstpart@secondpart.com', | |
48 'client_id': '8', | |
49 'type': 'service_account', | |
50 } | |
51 write_to_json(data, str(invalid_keyfile_path)) | 60 write_to_json(data, str(invalid_keyfile_path)) |
52 | 61 |
53 # Keyfile with invalid private key | 62 # Keyfile with invalid private key |
54 invalid_keyfile_path = rootdir.join('keyfile_invalid_private_key.json') | 63 invalid_keyfile_path = rootdir.join('keyfile_invalid_private_key.json') |
55 data = { | 64 data = get_valid_keyfile() |
56 'private_key_id': 6, | 65 data['private_key'] = data['private_key'][:-10] |
57 'private_key': cnts.DUMMY_PRIVATE_KEY[:-10], | |
58 'client_email': 'firstpart@secondpart.com', | |
59 'client_id': '8', | |
60 'type': 'service_account', | |
61 } | |
62 write_to_json(data, str(invalid_keyfile_path)) | 66 write_to_json(data, str(invalid_keyfile_path)) |
63 | 67 |
64 # Keyfile with wrong value for 'type' | 68 # Keyfile with wrong value for 'type' |
65 invalid_keyfile_path = rootdir.join('keyfile_invalid_type.json') | 69 invalid_keyfile_path = rootdir.join('keyfile_invalid_type.json') |
66 data = { | 70 data = get_valid_keyfile() |
67 'private_key_id': 6, | 71 data['type'] = 'invalid' |
68 'private_key': cnts.DUMMY_PRIVATE_KEY, | |
69 'client_email': 'firstpart@secondpart.com', | |
70 'client_id': '8', | |
71 'type': 'invalid', | |
72 } | |
73 write_to_json(data, str(invalid_keyfile_path)) | 72 write_to_json(data, str(invalid_keyfile_path)) |
74 | 73 |
75 # Valid (dummy) keyfile | 74 # Valid (dummy) keyfile |
76 valid_keyfile_path = rootdir.join('good_keyfile.json') | 75 valid_keyfile_path = rootdir.join('good_keyfile.json') |
77 data = { | 76 write_to_json(get_valid_keyfile(), str(valid_keyfile_path)) |
Vasily Kuznetsov
2018/07/20 21:00:01
There seems to be some repetition here, maybe we c
Tudor Avram
2018/07/31 09:20:17
Done.
| |
78 'private_key_id': 6, | |
79 'private_key': cnts.DUMMY_PRIVATE_KEY, | |
80 'client_email': 'firstpart@secondpart.com', | |
81 'client_id': '8', | |
82 'type': 'service_account', | |
83 } | |
84 write_to_json(data, str(valid_keyfile_path)) | |
85 | 77 |
86 # Downloadable file | 78 # Downloadable file |
87 rootdir.join('file_to_download').write('Success!') | 79 rootdir.join('file_to_download').write('Success!') |
88 | 80 |
89 # Downloadable file with utf-8 characters | 81 # Downloadable file with utf-8 characters |
90 rootdir.join('file_to_download_utf8').write('Ok! \u1234'.encode('utf-8'), | 82 rootdir.join('file_to_download_utf8').write('Ok \u1234'.encode('utf-8'), |
91 mode='wb') | 83 mode='wb') |
92 | 84 |
93 return rootdir | 85 return rootdir |
94 | 86 |
95 | 87 |
96 @pytest.fixture | 88 @pytest.fixture |
97 def dstfile(tmpdir): | 89 def dstfile(tmpdir): |
98 """Destination file for saving the downloaded whitelist.""" | 90 """Destination file for saving the downloaded whitelist.""" |
99 return tmpdir.join('dst') | 91 return tmpdir.join('dst') |
100 | 92 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
186 assert expected in data | 178 assert expected in data |
187 | 179 |
188 | 180 |
189 def test_download_wrong_url(rootdir): | 181 def test_download_wrong_url(rootdir): |
190 """Test authenticating and trying to download a file from an invalid url. | 182 """Test authenticating and trying to download a file from an invalid url. |
191 | 183 |
192 Uses a local server that simulates the interaction with the google API. | 184 Uses a local server that simulates the interaction with the google API. |
193 """ | 185 """ |
194 keyfile_path = str(rootdir.join('good_keyfile.json')) | 186 keyfile_path = str(rootdir.join('good_keyfile.json')) |
195 url = 'https://www.googleapis.com/download?path={0}'.format( | 187 url = 'https://www.googleapis.com/download?path={0}'.format( |
196 str(rootdir.join('file_to_downlaaoad_utf8'))) | 188 str(rootdir.join('inexistent_file'))) |
Vasily Kuznetsov
2018/07/20 21:00:01
..._donwlaaoad_... -- typo or on purpose? :)
Tudor Avram
2018/07/23 19:29:03
It was on purpose. I wanted to test the behaviour
Tudor Avram
2018/07/31 09:20:18
Done.
| |
197 scope = 'www.googleapis.com' | 189 scope = 'www.googleapis.com' |
198 | 190 |
199 with Httplib2Interceptor(get_intercept_app, host='www.googleapis.com', | 191 with Httplib2Interceptor(get_intercept_app, host='www.googleapis.com', |
200 port=443): | 192 port=443): |
201 headers, data = download_file(url, keyfile_path, scope) | 193 headers, data = download_file(url, keyfile_path, scope) |
202 | 194 |
203 assert 'NOT FOUND' in data.upper() | 195 assert 'NOT FOUND' in data.upper() |
204 assert headers['status'] == '404' | 196 assert headers['status'] == '404' |
205 | |
206 | |
207 def test_script_run_as_file(): | |
208 """Test the script's handling of relative imports.""" | |
209 command = 'python sitescripts/oauth2dl/bin/oauth2dl.py ' | |
210 _, stderr, _ = run_script(cmd=command) | |
211 | |
212 assert 'ValueError' not in stderr | |
213 assert 'ImportError' not in stderr | |
214 | |
215 | |
216 @pytest.mark.parametrize('file, expected', [ | |
217 ('file_to_download', 'Success!'), | |
218 ('file_to_download_utf8', '\u1234'), | |
219 ]) | |
220 def test_write_to_file(rootdir, dstfile, file, expected): | |
221 """Test if the script writes the data correctly.""" | |
222 data = rootdir.join(file).read().encode('utf-8') | |
223 write_to_file(data, str(dstfile)) | |
224 | |
225 assert expected in dstfile.read(mode='rb').decode('utf-8') | |
LEFT | RIGHT |