Mercurial > p > roundup > code
annotate test/test_liveserver.py @ 6747:d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
Patch by Marcus Priesch caches a loaded tracker instance and reuse it
for future client sessions.
It is enabled by a feature flag in wsgi.py since it arrived during the
2.2.0 beta period.
The provided wsgi.py is modified to enable it. Testing is run with
flag enabled and disabled.
Ralf Schlatterbeck and Marcus tested it on one of their larger more
complex trackers and it sped up the response time to a client request
by a factor of 3 (270ms down to about 80-85ms).
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sat, 02 Jul 2022 14:04:00 -0400 |
| parents | 9a1f5e496e6c |
| children | be3fd5e9577e |
| rev | line source |
|---|---|
|
6570
198875530c04
fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents:
6569
diff
changeset
|
1 import shutil, errno, pytest, json, gzip, os, re |
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
2 |
| 6650 | 3 from roundup import i18n |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
4 from roundup.anypy.strings import b2s |
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
5 from roundup.cgi.wsgi_handler import RequestDispatcher |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
6 from .wsgi_liveserver import LiveServerTestCase |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
7 from . import db_test_base |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
8 |
|
6548
de5f5f9c02f2
Fix spurious content-ty on 304; xfail css Cache-Control
John Rouillard <rouilj@ieee.org>
parents:
6546
diff
changeset
|
9 from wsgiref.validate import validator |
|
de5f5f9c02f2
Fix spurious content-ty on 304; xfail css Cache-Control
John Rouillard <rouilj@ieee.org>
parents:
6546
diff
changeset
|
10 |
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
11 try: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
12 import requests |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
13 skip_requests = lambda func, *args, **kwargs: func |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
14 except ImportError: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
15 from .pytest_patcher import mark_class |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
16 skip_requests = mark_class(pytest.mark.skip( |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
17 reason='Skipping liveserver tests: requests library not available')) |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
18 |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
19 try: |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
20 import brotli |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
21 skip_brotli = lambda func, *args, **kwargs: func |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
22 except ImportError: |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
23 from .pytest_patcher import mark_class |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
24 skip_brotli = mark_class(pytest.mark.skip( |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
25 reason='Skipping brotli tests: brotli library not available')) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
26 brotli = None |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
27 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
28 try: |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
29 import zstd |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
30 skip_zstd = lambda func, *args, **kwargs: func |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
31 except ImportError: |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
32 from .pytest_patcher import mark_class |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
33 skip_zstd = mark_class(pytest.mark.skip( |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
34 reason='Skipping zstd tests: zstd library not available')) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
35 |
|
6569
3ae0c0fb2d08
Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents:
6568
diff
changeset
|
36 import sys |
|
3ae0c0fb2d08
Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents:
6568
diff
changeset
|
37 |
|
3ae0c0fb2d08
Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents:
6568
diff
changeset
|
38 _py3 = sys.version_info[0] > 2 |
|
3ae0c0fb2d08
Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents:
6568
diff
changeset
|
39 |
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
40 @skip_requests |
|
6747
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
41 class WsgiSetup(LiveServerTestCase): |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
42 # have chicken and egg issue here. Need to encode the base_url |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
43 # in the config file but we don't know it until after |
| 6650 | 44 # the server is started and has read the config.ini. |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
45 # so only allow one port number |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
46 port_range = (9001, 9001) # default is (8080, 8090) |
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
47 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
48 dirname = '_test_instance' |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
49 backend = 'anydbm' |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
50 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
51 @classmethod |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
52 def setup_class(cls): |
| 6650 | 53 '''All tests in this class use the same roundup instance. |
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
54 This instance persists across all tests. |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
55 Create the tracker dir here so that it is ready for the |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
56 create_app() method to be called. |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
57 ''' |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
58 # tests in this class. |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
59 # set up and open a tracker |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
60 cls.instance = db_test_base.setupTracker(cls.dirname, cls.backend) |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
61 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
62 # open the database |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
63 cls.db = cls.instance.open('admin') |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
64 |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
65 # set the url the test instance will run at. |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
66 cls.db.config['TRACKER_WEB'] = "http://localhost:9001/" |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
67 # set up mailhost so errors get reported to debuging capture file |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
68 cls.db.config.MAILHOST = "localhost" |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
69 cls.db.config.MAIL_HOST = "localhost" |
|
6567
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
70 cls.db.config.MAIL_DEBUG = "../_test_tracker_mail.log" |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
71 cls.db.config.WEB_CSRF_ENFORCE_HEADER_ORIGIN = "required" |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
72 cls.db.config.WEB_ALLOWED_API_ORIGINS = "https://client.com" |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
73 |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
74 cls.db.config['WEB_CSRF_ENFORCE_HEADER_X-REQUESTED-WITH'] = "required" |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
75 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
76 # enable static precompressed files |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
77 cls.db.config.WEB_USE_PRECOMPRESSED_FILES = 1 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
78 |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
79 cls.db.config.save() |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
80 |
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
81 cls.db.commit() |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
82 cls.db.close() |
| 6650 | 83 |
| 84 # Force locale config to find locales in checkout not in | |
| 85 # installed directories | |
| 86 cls.backup_domain = i18n.DOMAIN | |
| 87 cls.backup_locale_dirs = i18n.LOCALE_DIRS | |
| 88 i18n.LOCALE_DIRS = ['locale'] | |
| 89 i18n.DOMAIN = '' | |
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
90 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
91 @classmethod |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
92 def teardown_class(cls): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
93 '''Close the database and delete the tracker directory |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
94 now that the app should be exiting. |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
95 ''' |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
96 if cls.db: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
97 cls.db.close() |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
98 try: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
99 shutil.rmtree(cls.dirname) |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
100 except OSError as error: |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
101 if error.errno not in (errno.ENOENT, errno.ESRCH): raise |
| 6650 | 102 i18n.LOCALE_DIRS = cls.backup_locale_dirs |
| 103 i18n.DOMAIN = cls.backup_domain | |
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
104 |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
105 def create_app(self): |
|
6747
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
106 '''The wsgi app to start - no feature_flags set.''' |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
107 |
|
6569
3ae0c0fb2d08
Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents:
6568
diff
changeset
|
108 if _py3: |
|
3ae0c0fb2d08
Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents:
6568
diff
changeset
|
109 return validator(RequestDispatcher(self.dirname)) |
|
3ae0c0fb2d08
Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents:
6568
diff
changeset
|
110 else: |
|
3ae0c0fb2d08
Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents:
6568
diff
changeset
|
111 # wsgiref/validator.py InputWrapper::readline is broke and |
|
3ae0c0fb2d08
Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents:
6568
diff
changeset
|
112 # doesn't support the max bytes to read argument. |
|
3ae0c0fb2d08
Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents:
6568
diff
changeset
|
113 return RequestDispatcher(self.dirname) |
|
3ae0c0fb2d08
Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents:
6568
diff
changeset
|
114 |
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
115 |
|
6747
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
116 class BaseTestCases(WsgiSetup): |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
117 """Class with all tests to run against wsgi server. Is reused when |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
118 wsgi server is started with various feature flags |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
119 """ |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
120 |
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
121 def test_start_page(self): |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
122 """ simple test that verifies that the server can serve a start page. |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
123 """ |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
124 f = requests.get(self.url_base()) |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
125 self.assertEqual(f.status_code, 200) |
|
6383
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
126 self.assertTrue(b'Roundup' in f.content) |
|
e9760702bf0c
Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
127 self.assertTrue(b'Creator' in f.content) |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
128 |
|
6640
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
129 def test_start_in_german(self): |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
130 """ simple test that verifies that the server can serve a start page |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
131 and translate text to german. Use page title and remeber login |
|
6648
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
132 checkbox label as translation test points.. |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
133 |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
134 use: |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
135 url parameter @language |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
136 cookie set by param |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
137 set @language to none and verify language cookie is unset |
|
6640
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
138 """ |
|
6648
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
139 |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
140 # test url parameter |
|
6640
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
141 f = requests.get(self.url_base() + "?@language=de") |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
142 self.assertEqual(f.status_code, 200) |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
143 print(f.content) |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
144 self.assertTrue(b'Roundup' in f.content) |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
145 self.assertTrue(b'Aufgabenliste' in f.content) |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
146 self.assertTrue(b'dauerhaft anmelden?' in f.content) |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
147 |
|
6648
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
148 # test language cookie - should still be german |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
149 bluemonster = f.cookies |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
150 f = requests.get(self.url_base(), cookies=bluemonster) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
151 self.assertEqual(f.status_code, 200) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
152 print(f.content) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
153 self.assertTrue(b'Roundup' in f.content) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
154 self.assertTrue(b'Aufgabenliste' in f.content) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
155 self.assertTrue(b'dauerhaft anmelden?' in f.content) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
156 |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
157 # unset language cookie, should be english |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
158 f = requests.get(self.url_base() + "?@language=none") |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
159 self.assertEqual(f.status_code, 200) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
160 print(f.content) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
161 self.assertTrue(b'Roundup' in f.content) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
162 self.assertFalse(b'Aufgabenliste' in f.content) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
163 self.assertFalse(b'dauerhaft anmelden?' in f.content) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
164 with self.assertRaises(KeyError): |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
165 l = f.cookies['roundup_language'] |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
166 |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
167 # check with Accept-Language header |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
168 alh = {"Accept-Language": |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
169 "fr;q=0.2, en;q=0.8, de;q=0.9, *;q=0.5"} |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
170 f = requests.get(self.url_base(), headers=alh) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
171 self.assertEqual(f.status_code, 200) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
172 print(f.content) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
173 self.assertTrue(b'Roundup' in f.content) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
174 self.assertTrue(b'Aufgabenliste' in f.content) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
175 self.assertTrue(b'dauerhaft anmelden?' in f.content) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
176 |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
177 def test_byte_Ranges(self): |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
178 """ Roundup only handles one simple two number range. |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
179 Range: 10-20 |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
180 |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
181 The following are not supported. |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
182 Range: 10-20, 25-30 |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
183 Range: 10- |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
184 |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
185 Also If-Range only supports strong etags not dates or weak etags. |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
186 |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
187 """ |
|
6655
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
188 |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
189 # get whole file uncompressed. Extract content length and etag |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
190 # for future use |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
191 f = requests.get(self.url_base() + "/@@file/style.css", |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
192 headers = {"Accept-Encoding": "identity"}) |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
193 # store etag for condition range testing |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
194 etag = f.headers['etag'] |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
195 expected_length = f.headers['content-length'] |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
196 |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
197 # get first 11 bytes unconditionally (0 index really??) |
|
6648
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
198 hdrs = {"Range": "bytes=0-10"} |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
199 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
200 self.assertEqual(f.status_code, 206) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
201 self.assertEqual(f.content, b"/* main pag") |
|
6655
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
202 # compression disabled for length < 100, so we can use 11 here |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
203 self.assertEqual(f.headers['content-length'], '11') |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
204 self.assertEqual(f.headers['content-range'], |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
205 "bytes 0-10/%s"%expected_length) |
|
6648
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
206 |
|
6655
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
207 # conditional request 11 bytes since etag matches 206 code |
|
6648
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
208 hdrs['If-Range'] = etag |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
209 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
210 self.assertEqual(f.status_code, 206) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
211 self.assertEqual(f.content, b"/* main pag") |
|
6655
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
212 # compression disabled for length < 100, so we can use 11 here |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
213 self.assertEqual(f.headers['content-length'], '11') |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
214 self.assertEqual(f.headers['content-range'], |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
215 "bytes 0-10/%s"%expected_length) |
|
6648
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
216 |
|
6655
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
217 # conditional request returns all bytes as etag isn't correct 200 code |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
218 hdrs['If-Range'] = etag[2:] # bad tag |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
219 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs) |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
220 self.assertEqual(f.status_code, 200) |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
221 # not checking content length since it could be compressed |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
222 self.assertNotIn('content-range', f.headers, 'content-range should not be present') |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
223 |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
224 # range is too large, but etag is bad also, return whole file 200 code |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
225 hdrs['Range'] = "0-99999" # too large |
|
6648
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
226 hdrs['If-Range'] = etag[2:] # bad tag |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
227 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs) |
|
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
228 self.assertEqual(f.status_code, 200) |
|
6655
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
229 # not checking content length since it could be compressed |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
230 self.assertNotIn('content-range', f.headers, 'content-range should not be present') |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
231 |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
232 # range is too large, but etag is specified so return whole file |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
233 # 200 code |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
234 hdrs['Range'] = "bytes=0-99999" # too large |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
235 hdrs['If-Range'] = etag # any tag works |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
236 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs) |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
237 self.assertEqual(f.status_code, 200) |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
238 # not checking content length since it could be compressed |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
239 self.assertNotIn('content-range', f.headers, 'content-range should not be present') |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
240 |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
241 # range too large, not if-range so error code 416 |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
242 hdrs['Range'] = "bytes=0-99999" # too large |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
243 del(hdrs['If-Range']) |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
244 print(hdrs) |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
245 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs) |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
246 self.assertEqual(f.status_code, 416) |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
247 self.assertEqual(f.headers['content-range'], |
|
a193653d6fa4
Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents:
6651
diff
changeset
|
248 "bytes */%s"%expected_length) |
|
6648
53c9b62494e6
Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents:
6640
diff
changeset
|
249 |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
250 def test_rest_preflight_collection(self): |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
251 # no auth for rest csrf preflight |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
252 f = requests.options(self.url_base() + '/rest/data/user', |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
253 headers = {'content-type': "", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
254 'x-requested-with': "rest", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
255 'Access-Control-Request-Headers': |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
256 "x-requested-with", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
257 'Access-Control-Request-Method': "PUT", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
258 'Origin': "https://client.com"}) |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
259 print(f.status_code) |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
260 print(f.headers) |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
261 print(f.content) |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
262 |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
263 self.assertEqual(f.status_code, 204) |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
264 |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
265 expected = { 'Access-Control-Allow-Origin': 'https://client.com', |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
266 'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-Requested-With, X-HTTP-Method-Override', |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
267 'Allow': 'OPTIONS, GET, POST', |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
268 'Access-Control-Allow-Methods': 'OPTIONS, GET, POST', |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
269 'Access-Control-Allow-Credentials': 'true', |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
270 } |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
271 |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
272 # use dict comprehension to filter headers to the ones we want to check |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
273 self.assertEqual({ key: value for (key, value) in |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
274 f.headers.items() if key in expected }, |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
275 expected) |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
276 |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
277 # use invalid Origin |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
278 f = requests.options(self.url_base() + '/rest/data/user', |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
279 headers = {'content-type': "application/json", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
280 'x-requested-with': "rest", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
281 'Access-Control-Request-Headers': |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
282 "x-requested-with", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
283 'Access-Control-Request-Method': "PUT", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
284 'Origin': "ZZZ"}) |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
285 |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
286 self.assertEqual(f.status_code, 400) |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
287 |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
288 expected = '{ "error": { "status": 400, "msg": "Client is not ' \ |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
289 'allowed to use Rest Interface." } }' |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
290 self.assertEqual(b2s(f.content), expected) |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
291 |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
292 |
|
6525
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
293 def test_rest_invalid_method_collection(self): |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
294 # use basic auth for rest endpoint |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
295 f = requests.put(self.url_base() + '/rest/data/user', |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
296 auth=('admin', 'sekrit'), |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
297 headers = {'content-type': "", |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
298 'X-Requested-With': "rest", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
299 'Origin': "https://client.com"}) |
|
6525
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
300 print(f.status_code) |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
301 print(f.headers) |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
302 print(f.content) |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
303 |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
304 self.assertEqual(f.status_code, 405) |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
305 expected = { 'Access-Control-Allow-Origin': 'https://client.com', |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
306 'Access-Control-Allow-Credentials': 'true', |
|
6525
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
307 'Allow': 'DELETE, GET, OPTIONS, POST', |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
308 } |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
309 |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
310 print(f.headers) |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
311 # use dict comprehension to remove fields like date, |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
312 # content-length etc. from f.headers. |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
313 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected) |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
314 |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
315 content = json.loads(f.content) |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
316 |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
317 exp_content = "Method PUT not allowed. Allowed: DELETE, GET, OPTIONS, POST" |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
318 self.assertEqual(exp_content, content['error']['msg']) |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
319 |
|
6386
2a2da73e1e26
Remove Connection: close header for 501 error handling rest
John Rouillard <rouilj@ieee.org>
parents:
6385
diff
changeset
|
320 def test_http_options(self): |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
321 """ options returns an unimplemented error for this case.""" |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
322 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
323 # do not send content-type header for options |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
324 f = requests.options(self.url_base() + '/', |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
325 headers = {'content-type': ""}) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
326 # options is not implemented for the non-rest interface. |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
327 self.assertEqual(f.status_code, 501) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
328 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
329 def test_rest_endpoint_root_options(self): |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
330 # use basic auth for rest endpoint |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
331 f = requests.options(self.url_base() + '/rest', |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
332 auth=('admin', 'sekrit'), |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
333 headers = {'content-type': "", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
334 'Origin': "http://localhost:9001", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
335 }) |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
336 print(f.status_code) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
337 print(f.headers) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
338 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
339 self.assertEqual(f.status_code, 204) |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
340 expected = { 'Access-Control-Allow-Origin': 'http://localhost:9001', |
|
6525
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
341 'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-Requested-With, X-HTTP-Method-Override', |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
342 'Allow': 'OPTIONS, GET', |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
343 'Access-Control-Allow-Credentials': 'true', |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
344 'Access-Control-Allow-Methods': 'OPTIONS, GET', |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
345 'Access-Control-Allow-Credentials': 'true', |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
346 } |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
347 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
348 # use dict comprehension to remove fields like date, |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
349 # content-length etc. from f.headers. |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
350 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
351 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
352 def test_rest_endpoint_data_options(self): |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
353 # use basic auth for rest endpoint |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
354 f = requests.options(self.url_base() + '/rest/data', |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
355 auth=('admin', 'sekrit'), |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
356 headers = {'content-type': "", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
357 'Origin': "http://localhost:9001", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
358 }) |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
359 print(f.status_code) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
360 print(f.headers) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
361 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
362 self.assertEqual(f.status_code, 204) |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
363 expected = { 'Access-Control-Allow-Origin': 'http://localhost:9001', |
|
6525
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
364 'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-Requested-With, X-HTTP-Method-Override', |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
365 'Allow': 'OPTIONS, GET', |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
366 'Access-Control-Allow-Methods': 'OPTIONS, GET', |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
367 'Access-Control-Allow-Credentials': 'true', |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
368 } |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
369 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
370 # use dict comprehension to remove fields like date, |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
371 # content-length etc. from f.headers. |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
372 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
373 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
374 def test_rest_endpoint_collection_options(self): |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
375 # use basic auth for rest endpoint |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
376 f = requests.options(self.url_base() + '/rest/data/user', |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
377 auth=('admin', 'sekrit'), |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
378 headers = {'content-type': "", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
379 'Origin': "http://localhost:9001", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
380 }) |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
381 print(f.status_code) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
382 print(f.headers) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
383 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
384 self.assertEqual(f.status_code, 204) |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
385 expected = { 'Access-Control-Allow-Origin': 'http://localhost:9001', |
|
6525
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
386 'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-Requested-With, X-HTTP-Method-Override', |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
387 'Allow': 'OPTIONS, GET, POST', |
|
6526
3c8322e3fe25
Fix test and remove pdb invocation.
John Rouillard <rouilj@ieee.org>
parents:
6525
diff
changeset
|
388 'Access-Control-Allow-Methods': 'OPTIONS, GET, POST', |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
389 'Access-Control-Allow-Credentials': 'true', |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
390 } |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
391 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
392 # use dict comprehension to remove fields like date, |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
393 # content-length etc. from f.headers. |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
394 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
395 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
396 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
397 def test_rest_endpoint_item_options(self): |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
398 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
399 f = requests.options(self.url_base() + '/rest/data/user/1', |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
400 auth=('admin', 'sekrit'), |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
401 headers = {'content-type': "", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
402 'Origin': "http://localhost:9001", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
403 }) |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
404 print(f.status_code) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
405 print(f.headers) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
406 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
407 self.assertEqual(f.status_code, 204) |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
408 expected = { 'Access-Control-Allow-Origin': 'http://localhost:9001', |
|
6525
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
409 'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-Requested-With, X-HTTP-Method-Override', |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
410 'Allow': 'OPTIONS, GET, PUT, DELETE, PATCH', |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
411 'Access-Control-Allow-Methods': 'OPTIONS, GET, PUT, DELETE, PATCH', |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
412 'Access-Control-Allow-Credentials': 'true', |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
413 } |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
414 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
415 # use dict comprehension to remove fields like date, |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
416 # content-length etc. from f.headers. |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
417 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
418 |
|
6385
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
419 def test_rest_endpoint_attribute_options(self): |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
420 # use basic auth for rest endpoint |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
421 f = requests.options(self.url_base() + '/rest/data/user/1/username', |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
422 auth=('admin', 'sekrit'), |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
423 headers = {'content-type': "", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
424 'Origin': "http://localhost:9001", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
425 }) |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
426 print(f.status_code) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
427 print(f.headers) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
428 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
429 self.assertEqual(f.status_code, 204) |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
430 expected = { 'Access-Control-Allow-Origin': 'http://localhost:9001', |
|
6525
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
431 'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-Requested-With, X-HTTP-Method-Override', |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
432 'Allow': 'OPTIONS, GET, PUT, DELETE, PATCH', |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
433 'Access-Control-Allow-Methods': 'OPTIONS, GET, PUT, DELETE, PATCH', |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
434 'Access-Control-Allow-Credentials': 'true', |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
435 } |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
436 |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
437 # use dict comprehension to remove fields like date, |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
438 # content-length etc. from f.headers. |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
439 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected) |
|
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
440 |
|
6385
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
441 ## test a read only property. |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
442 |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
443 f = requests.options(self.url_base() + '/rest/data/user/1/creator', |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
444 auth=('admin', 'sekrit'), |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
445 headers = {'content-type': "", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
446 'Origin': "http://localhost:9001", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
447 }) |
|
6385
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
448 print(f.status_code) |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
449 print(f.headers) |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
450 |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
451 self.assertEqual(f.status_code, 204) |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
452 expected1 = dict(expected) |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
453 expected1['Allow'] = 'OPTIONS, GET' |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
454 expected1['Access-Control-Allow-Methods'] = 'OPTIONS, GET' |
|
6385
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
455 |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
456 # use dict comprehension to remove fields like date, |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
457 # content-length etc. from f.headers. |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
458 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected1) |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
459 |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
460 ## test a property that doesn't exist |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
461 f = requests.options(self.url_base() + '/rest/data/user/1/zot', |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
462 auth=('admin', 'sekrit'), |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
463 headers = {'content-type': ""}) |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
464 print(f.status_code) |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
465 print(f.headers) |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
466 |
|
8c43129f29ca
Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents:
6384
diff
changeset
|
467 self.assertEqual(f.status_code, 404) |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
468 |
|
6640
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
469 def test_rest_login_rate_limit(self): |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
470 """login rate limit applies to api endpoints. Only failure |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
471 logins count though. So log in 10 times in a row |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
472 to verify that valid username/passwords aren't limited. |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
473 """ |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
474 |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
475 for i in range(10): |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
476 # use basic auth for rest endpoint |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
477 |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
478 f = requests.options(self.url_base() + '/rest/data', |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
479 auth=('admin', 'sekrit'), |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
480 headers = {'content-type': ""} |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
481 ) |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
482 print(f.status_code) |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
483 print(f.headers) |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
484 |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
485 self.assertEqual(f.status_code, 204) |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
486 expected = { 'Access-Control-Allow-Origin': '*', |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
487 'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-Requested-With, X-HTTP-Method-Override', |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
488 'Allow': 'OPTIONS, GET', |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
489 'Access-Control-Allow-Methods': 'HEAD, OPTIONS, GET, POST, PUT, DELETE, PATCH', |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
490 'Access-Control-Allow-Credentials': 'true', |
|
6640
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
491 } |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
492 |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
493 for i in range(10): |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
494 # use basic auth for rest endpoint |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
495 |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
496 f = requests.options(self.url_base() + '/rest/data', |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
497 auth=('admin', 'ekrit'), |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
498 headers = {'content-type': ""} |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
499 ) |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
500 print(i, f.status_code) |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
501 print(f.headers) |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
502 print(f.text) |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
503 |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
504 self.assertEqual(f.status_code, 401) |
|
6ac3667706be
Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents:
6570
diff
changeset
|
505 |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
506 def test_ims(self): |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
507 ''' retreive the user_utils.js file with old and new |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
508 if-modified-since timestamps. |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
509 ''' |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
510 from datetime import datetime |
|
6384
66a061e52435
Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents:
6383
diff
changeset
|
511 |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
512 f = requests.get(self.url_base() + '/@@file/user_utils.js', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
513 headers = { 'Accept-Encoding': 'gzip, foo', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
514 'If-Modified-Since': 'Sun, 13 Jul 1986 01:20:00', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
515 'Accept': '*/*'}) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
516 print(f.status_code) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
517 print(f.headers) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
518 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
519 self.assertEqual(f.status_code, 200) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
520 expected = { 'Content-Type': 'application/javascript', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
521 'Content-Encoding': 'gzip', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
522 'Vary': 'Accept-Encoding', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
523 } |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
524 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
525 # use dict comprehension to remove fields like date, |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
526 # etag etc. from f.headers. |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
527 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
528 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
529 # now use today's date |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
530 a_few_seconds_ago = datetime.now().strftime('%a, %d %b %Y %H:%M:%S GMT') |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
531 f = requests.get(self.url_base() + '/@@file/user_utils.js', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
532 headers = { 'Accept-Encoding': 'gzip, foo', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
533 'If-Modified-Since': a_few_seconds_ago, |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
534 'Accept': '*/*'}) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
535 print(f.status_code) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
536 print(f.headers) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
537 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
538 self.assertEqual(f.status_code, 304) |
|
6548
de5f5f9c02f2
Fix spurious content-ty on 304; xfail css Cache-Control
John Rouillard <rouilj@ieee.org>
parents:
6546
diff
changeset
|
539 expected = { 'Vary': 'Accept-Encoding', |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
540 'Content-Length': '0', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
541 } |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
542 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
543 # use dict comprehension to remove fields like date, etag |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
544 # etc. from f.headers. |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
545 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
546 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
547 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
548 def test_compression_gzipfile(self): |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
549 '''Get the compressed dummy file''' |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
550 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
551 # create a user_utils.js.gz file to test pre-compressed |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
552 # file serving code. Has custom contents to verify |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
553 # that I get the compressed one. |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
554 gzfile = "%s/html/user_utils.js.gzip"%self.dirname |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
555 test_text= b"Custom text for user_utils.js\n" |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
556 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
557 with gzip.open(gzfile, 'wb') as f: |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
558 bytes_written = f.write(test_text) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
559 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
560 self.assertEqual(bytes_written, 30) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
561 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
562 # test file x-fer |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
563 f = requests.get(self.url_base() + '/@@file/user_utils.js', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
564 headers = { 'Accept-Encoding': 'gzip, foo', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
565 'Accept': '*/*'}) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
566 print(f.status_code) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
567 print(f.headers) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
568 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
569 self.assertEqual(f.status_code, 200) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
570 expected = { 'Content-Type': 'application/javascript', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
571 'Content-Encoding': 'gzip', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
572 'Vary': 'Accept-Encoding', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
573 'Content-Length': '69', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
574 } |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
575 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
576 # use dict comprehension to remove fields like date, |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
577 # content-length etc. from f.headers. |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
578 self.assertDictEqual({ key: value for (key, value) in |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
579 f.headers.items() if key in expected }, |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
580 expected) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
581 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
582 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
583 # check content - verify it's the .gz file not the real file. |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
584 self.assertEqual(f.content, test_text) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
585 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
586 '''# verify that a different encoding request returns on the fly |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
587 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
588 # test file x-fer using br, so we get runtime compression |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
589 f = requests.get(self.url_base() + '/@@file/user_utils.js', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
590 headers = { 'Accept-Encoding': 'br, foo', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
591 'Accept': '*/*'}) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
592 print(f.status_code) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
593 print(f.headers) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
594 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
595 self.assertEqual(f.status_code, 200) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
596 expected = { 'Content-Type': 'application/javascript', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
597 'Content-Encoding': 'br', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
598 'Vary': 'Accept-Encoding', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
599 'Content-Length': '960', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
600 } |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
601 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
602 # use dict comprehension to remove fields like date, |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
603 # content-length etc. from f.headers. |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
604 self.assertDictEqual({ key: value for (key, value) in |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
605 f.headers.items() if key in expected }, |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
606 expected) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
607 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
608 try: |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
609 from urllib3.response import BrotliDecoder |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
610 # requests has decoded br to text for me |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
611 data = f.content |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
612 except ImportError: |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
613 # I need to decode |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
614 data = brotli.decompress(f.content) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
615 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
616 self.assertEqual(b2s(data)[0:25], '// User Editing Utilities') |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
617 ''' |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
618 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
619 # re-request file, but now make .gzip out of date. So we get the |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
620 # real file compressed on the fly, not our test file. |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
621 os.utime(gzfile, (0,0)) # use 1970/01/01 or os base time |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
622 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
623 f = requests.get(self.url_base() + '/@@file/user_utils.js', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
624 headers = { 'Accept-Encoding': 'gzip, foo', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
625 'Accept': '*/*'}) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
626 print(f.status_code) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
627 print(f.headers) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
628 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
629 self.assertEqual(f.status_code, 200) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
630 expected = { 'Content-Type': 'application/javascript', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
631 'Content-Encoding': 'gzip', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
632 'Vary': 'Accept-Encoding', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
633 } |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
634 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
635 # use dict comprehension to remove fields like date, |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
636 # content-length etc. from f.headers. |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
637 self.assertDictEqual({ key: value for (key, value) in |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
638 f.headers.items() if key in expected }, |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
639 expected) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
640 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
641 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
642 # check content - verify it's the real file, not crafted .gz. |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
643 self.assertEqual(b2s(f.content)[0:25], '// User Editing Utilities') |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
644 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
645 # cleanup |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
646 os.remove(gzfile) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
647 |
|
6541
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
648 def test_compression_none_etag(self): |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
649 # use basic auth for rest endpoint |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
650 f = requests.get(self.url_base() + '/rest/data/user/1/username', |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
651 auth=('admin', 'sekrit'), |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
652 headers = {'content-type': "", |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
653 'Accept-Encoding': "", |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
654 'Accept': '*/*'}) |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
655 print(f.status_code) |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
656 print(f.headers) |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
657 |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
658 self.assertEqual(f.status_code, 200) |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
659 expected = { 'Content-Type': 'application/json', |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
660 'Access-Control-Allow-Credentials': 'true', |
|
6541
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
661 'Allow': 'OPTIONS, GET, POST, PUT, DELETE, PATCH', |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
662 } |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
663 |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
664 content_str = '''{ "data": { |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
665 "id": "1", |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
666 "link": "http://localhost:9001/rest/data/user/1/username", |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
667 "data": "admin" |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
668 } |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
669 }''' |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
670 content = json.loads(content_str) |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
671 |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
672 |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
673 if (type("") == type(f.content)): |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
674 json_dict = json.loads(f.content) |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
675 else: |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
676 json_dict = json.loads(b2s(f.content)) |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
677 |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
678 # etag wil not match, creation date different |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
679 del(json_dict['data']['@etag']) |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
680 |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
681 # type is "class 'str'" under py3, "type 'str'" py2 |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
682 # just skip comparing it. |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
683 del(json_dict['data']['type']) |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
684 |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
685 self.assertDictEqual(json_dict, content) |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
686 |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
687 # verify that ETag header has no - delimiter |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
688 print(f.headers['ETag']) |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
689 with self.assertRaises(ValueError): |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
690 f.headers['ETag'].index('-') |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
691 |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
692 # use dict comprehension to remove fields like date, |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
693 # content-length etc. from f.headers. |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
694 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected) |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
695 |
|
c8f3ec942e29
Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
696 |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
697 def test_compression_gzip(self, method='gzip'): |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
698 if method == 'gzip': |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
699 decompressor = None |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
700 elif method == 'br': |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
701 decompressor = brotli.decompress |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
702 elif method == 'zstd': |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
703 decompressor = zstd.decompress |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
704 |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
705 # use basic auth for rest endpoint |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
706 f = requests.get(self.url_base() + '/rest/data/user/1/username', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
707 auth=('admin', 'sekrit'), |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
708 headers = {'content-type': "", |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
709 'Accept-Encoding': '%s, foo'%method, |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
710 'Accept': '*/*'}) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
711 print(f.status_code) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
712 print(f.headers) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
713 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
714 self.assertEqual(f.status_code, 200) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
715 expected = { 'Content-Type': 'application/json', |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
716 'Access-Control-Allow-Credentials': 'true', |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
717 'Allow': 'OPTIONS, GET, POST, PUT, DELETE, PATCH', |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
718 'Content-Encoding': method, |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
719 'Vary': 'Origin, Accept-Encoding', |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
720 } |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
721 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
722 content_str = '''{ "data": { |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
723 "id": "1", |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
724 "link": "http://localhost:9001/rest/data/user/1/username", |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
725 "data": "admin" |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
726 } |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
727 }''' |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
728 content = json.loads(content_str) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
729 |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
730 print(f.content) |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
731 print(type(f.content)) |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
732 |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
733 try: |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
734 if (type("") == type(f.content)): |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
735 json_dict = json.loads(f.content) |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
736 else: |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
737 json_dict = json.loads(b2s(f.content)) |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
738 except (ValueError, UnicodeDecodeError): |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
739 # Handle error from trying to load compressed data as only |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
740 # gzip gets decompressed automatically |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
741 # ValueError - raised by loads on compressed content python2 |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
742 # UnicodeDecodeError - raised by loads on compressed content |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
743 # python3 |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
744 json_dict = json.loads(b2s(decompressor(f.content))) |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
745 |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
746 # etag will not match, creation date different |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
747 del(json_dict['data']['@etag']) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
748 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
749 # type is "class 'str'" under py3, "type 'str'" py2 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
750 # just skip comparing it. |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
751 del(json_dict['data']['type']) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
752 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
753 self.assertDictEqual(json_dict, content) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
754 |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
755 # verify that ETag header ends with -<method> |
|
6539
f8df7fed18f6
issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents:
6526
diff
changeset
|
756 try: |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
757 self.assertRegex(f.headers['ETag'], r'^"[0-9a-f]{32}-%s"$'%method) |
|
6539
f8df7fed18f6
issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents:
6526
diff
changeset
|
758 except AttributeError: |
|
f8df7fed18f6
issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents:
6526
diff
changeset
|
759 # python2 no assertRegex so try substring match |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
760 self.assertEqual(33, f.headers['ETag'].rindex('-' + method)) |
|
6539
f8df7fed18f6
issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents:
6526
diff
changeset
|
761 |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
762 # use dict comprehension to remove fields like date, |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
763 # content-length etc. from f.headers. |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
764 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
765 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
766 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
767 # use basic auth for rest endpoint, error case, bad attribute |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
768 f = requests.get(self.url_base() + '/rest/data/user/1/foo', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
769 auth=('admin', 'sekrit'), |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
770 headers = {'content-type': "", |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
771 'Accept-Encoding': '%s, foo'%method, |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
772 'Accept': '*/*', |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
773 'Origin': 'ZZZZ'}) |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
774 print(f.status_code) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
775 print(f.headers) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
776 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
777 # NOTE: not compressed payload too small |
|
6525
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
778 self.assertEqual(f.status_code, 400) |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
779 expected = { 'Content-Type': 'application/json', |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
780 'Access-Control-Allow-Credentials': 'true', |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
781 'Access-Control-Allow-Origin': 'ZZZZ', |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
782 'Allow': 'OPTIONS, GET, POST, PUT, DELETE, PATCH', |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
783 'Vary': 'Origin' |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
784 } |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
785 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
786 content = { "error": |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
787 { |
|
6525
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
788 "status": 400, |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6509
diff
changeset
|
789 "msg": "Invalid attribute foo" |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
790 } |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
791 } |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
792 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
793 json_dict = json.loads(b2s(f.content)) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
794 self.assertDictEqual(json_dict, content) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
795 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
796 # use dict comprehension to remove fields like date, |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
797 # content-length etc. from f.headers. |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
798 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
799 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
800 # test file x-fer |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
801 f = requests.get(self.url_base() + '/@@file/user_utils.js', |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
802 headers = { 'Accept-Encoding': '%s, foo'%method, |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
803 'Accept': '*/*'}) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
804 print(f.status_code) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
805 print(f.headers) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
806 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
807 self.assertEqual(f.status_code, 200) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
808 expected = { 'Content-Type': 'application/javascript', |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
809 'Content-Encoding': method, |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
810 'Vary': 'Accept-Encoding', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
811 } |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
812 |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
813 # compare to byte string as f.content may be compressed. |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
814 # so running b2s on it will throw a UnicodeError |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
815 if f.content[0:25] == b'// User Editing Utilities': |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
816 # no need to decompress, urlib3.response did it for gzip and br |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
817 data = f.content |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
818 else: |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
819 # I need to decode |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
820 data = decompressor(f.content) |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
821 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
822 # check first few bytes. |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
823 self.assertEqual(b2s(data)[0:25], '// User Editing Utilities') |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
824 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
825 # use dict comprehension to remove fields like date, |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
826 # content-length etc. from f.headers. |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
827 self.assertDictEqual({ key: value for (key, value) in |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
828 f.headers.items() if key in expected }, |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
829 expected) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
830 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
831 # test file x-fer |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
832 f = requests.get(self.url_base() + '/user1', |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
833 headers = { 'Accept-Encoding': '%s, foo'%method, |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
834 'Accept': '*/*'}) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
835 print(f.status_code) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
836 print(f.headers) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
837 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
838 self.assertEqual(f.status_code, 200) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
839 expected = { 'Content-Type': 'text/html; charset=utf-8', |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
840 'Content-Encoding': method, |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
841 'Vary': 'Accept-Encoding', |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
842 } |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
843 |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
844 if f.content[0:25] == b'<!-- dollarId: user.item,': |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
845 # no need to decompress, urlib3.response did it for gzip and br |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
846 data = f.content |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
847 else: |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
848 # I need to decode |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
849 data = decompressor(f.content) |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
850 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
851 # check first few bytes. |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
852 self.assertEqual(b2s(data[0:25]), '<!-- dollarId: user.item,') |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
853 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
854 # use dict comprehension to remove fields like date, |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
855 # content-length etc. from f.headers. |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
856 self.assertDictEqual({ key: value for (key, value) in |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
857 f.headers.items() if key in expected }, |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
858 expected) |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
859 |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
860 @skip_brotli |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
861 def test_compression_br(self): |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
862 self.test_compression_gzip(method="br") |
|
6458
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
863 |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
864 @skip_zstd |
|
8f1b91756457
issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents:
6386
diff
changeset
|
865 def test_compression_zstd(self): |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
866 self.test_compression_gzip(method="zstd") |
|
6546
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
867 |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
868 def test_cache_control_css(self): |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
869 f = requests.get(self.url_base() + '/@@file/style.css', |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
870 headers = {'content-type': "", |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
871 'Accept': '*/*'}) |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
872 print(f.status_code) |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
873 print(f.headers) |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
874 |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
875 self.assertEqual(f.status_code, 200) |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
876 self.assertEqual(f.headers['Cache-Control'], 'public, max-age=4838400') |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
877 |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
878 def test_cache_control_js(self): |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
879 f = requests.get(self.url_base() + '/@@file/help_controls.js', |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
880 headers = {'content-type': "", |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
881 'Accept': '*/*'}) |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
882 print(f.status_code) |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
883 print(f.headers) |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
884 |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
885 self.assertEqual(f.status_code, 200) |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
886 self.assertEqual(f.headers['Cache-Control'], 'public, max-age=1209600') |
|
c58c7cd31243
issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents:
6541
diff
changeset
|
887 |
|
6567
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
888 def test_new_issue_with_file_upload(self): |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
889 # Set up session to manage cookies <insert blue monster here> |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
890 session = requests.Session() |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
891 session.headers.update({'Origin': 'http://localhost:9001'}) |
|
6567
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
892 |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
893 # login using form |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
894 login = {"__login_name": 'admin', '__login_password': 'sekrit', |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
895 "@action": "login"} |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
896 f = session.post(self.url_base()+'/', data=login) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
897 # look for change in text in sidebar post login |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
898 self.assertIn('Hello, admin', f.text) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
899 |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
900 # create a new issue and upload a file |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
901 file_content = 'this is a test file\n' |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
902 file = {"@file": ('test1.txt', file_content, "text/plain") } |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
903 issue = {"title": "my title", "priority": "1", "@action": "new"} |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
904 f = session.post(self.url_base()+'/issue?@template=item', data=issue, files=file) |
|
6570
198875530c04
fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents:
6569
diff
changeset
|
905 |
|
198875530c04
fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents:
6569
diff
changeset
|
906 # use redirected url to determine which issue and file were created. |
|
198875530c04
fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents:
6569
diff
changeset
|
907 m = re.search(r'[0-9]/issue(?P<issue>[0-9]+)\?@ok_message.*file%20(?P<file>[0-9]+)%20', f.url) |
|
198875530c04
fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents:
6569
diff
changeset
|
908 |
|
6567
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
909 # verify message in redirected url: file 1 created\nissue 1 created |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
910 # warning may fail if another test loads tracker with files. |
|
6570
198875530c04
fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents:
6569
diff
changeset
|
911 # Escape % signs in string by doubling them. This verifies the |
|
198875530c04
fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents:
6569
diff
changeset
|
912 # search is working correctly. |
|
198875530c04
fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents:
6569
diff
changeset
|
913 # use groupdict for python2. |
|
198875530c04
fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents:
6569
diff
changeset
|
914 self.assertEqual('http://localhost:9001/issue%(issue)s?@ok_message=file%%20%(file)s%%20created%%0Aissue%%20%(issue)s%%20created&@template=item'%m.groupdict(), f.url) |
|
198875530c04
fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents:
6569
diff
changeset
|
915 |
|
198875530c04
fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents:
6569
diff
changeset
|
916 # we have an issue display, verify filename is listed there |
|
198875530c04
fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents:
6569
diff
changeset
|
917 # seach for unique filename given to it. |
|
198875530c04
fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents:
6569
diff
changeset
|
918 self.assertIn("test1.txt", f.text) |
|
6567
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
919 |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
920 # download file and verify content |
|
6570
198875530c04
fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents:
6569
diff
changeset
|
921 f = session.get(self.url_base()+'/file%(file)s/text1.txt'%m.groupdict()) |
|
6567
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
922 self.assertEqual(f.text, file_content) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
923 print(f.text) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
924 |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
925 def test_new_file_via_rest(self): |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
926 |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
927 session = requests.Session() |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
928 session.auth = ('admin', 'sekrit') |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
929 |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
930 url = self.url_base() + '/rest/data/' |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
931 fname = 'a-bigger-testfile' |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
932 d = dict(name = fname, type='application/octet-stream') |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
933 c = dict (content = r'xyzzy') |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
934 r = session.post(url + 'file', files = c, data = d, |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
935 headers = {'x-requested-with': "rest", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
936 'Origin': "http://localhost:9001"} |
|
6567
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
937 ) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
938 |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
939 # was a 500 before fix for issue2551178 |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
940 self.assertEqual(r.status_code, 201) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
941 # just compare the path leave off the number |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
942 self.assertIn('http://localhost:9001/rest/data/file/', |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
943 r.headers["location"]) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
944 json_dict = json.loads(r.text) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
945 self.assertEqual(json_dict["data"]["link"], r.headers["location"]) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
946 |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
947 # download file and verify content |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
948 r = session.get(r.headers["location"] +'/content', |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
949 headers = {'x-requested-with': "rest", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
950 'Origin': "http://localhost:9001"} |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
951 ) |
|
6567
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
952 json_dict = json.loads(r.text) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
953 self.assertEqual(json_dict['data']['data'], c["content"]) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
954 print(r.text) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
955 |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
956 # Upload a file via rest interface - no auth |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
957 session.auth = None |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
958 r = session.post(url + 'file', files = c, data = d, |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
959 headers = {'x-requested-with': "rest", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
960 'Origin': "http://localhost:9001"} |
|
6567
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
961 ) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
962 self.assertEqual(r.status_code, 403) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
963 |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
964 # get session variable from web form login |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
965 # and use it to upload file |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
966 # login using form |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
967 login = {"__login_name": 'admin', '__login_password': 'sekrit', |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
968 "@action": "login"} |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
969 f = session.post(self.url_base()+'/', data=login, |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
970 headers = {'Origin': "http://localhost:9001"} |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
971 ) |
|
6567
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
972 # look for change in text in sidebar post login |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
973 self.assertIn('Hello, admin', f.text) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
974 |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
975 r = session.post(url + 'file', files = c, data = d, |
|
6693
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
976 headers = {'x-requested-with': "rest", |
|
9a1f5e496e6c
issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents:
6655
diff
changeset
|
977 'Origin': "http://localhost:9001"} |
|
6567
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
978 ) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
979 self.assertEqual(r.status_code, 201) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
980 print(r.status_code) |
|
34199d2fef48
issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents:
6548
diff
changeset
|
981 |
|
6747
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
982 class TestFeatureFlagCacheTrackerOn(BaseTestCases, WsgiSetup): |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
983 """Class to run all test in BaseTestCases with the cache_tracker |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
984 feature flag enabled when starting the wsgi server |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
985 """ |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
986 def create_app(self): |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
987 '''The wsgi app to start with feature flag enabled''' |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
988 ff = { "cache_tracker": "" } |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
989 if _py3: |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
990 return validator(RequestDispatcher(self.dirname, feature_flags=ff)) |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
991 else: |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
992 # wsgiref/validator.py InputWrapper::readline is broke and |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
993 # doesn't support the max bytes to read argument. |
|
d32d43e4a5ba
wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents:
6693
diff
changeset
|
994 return RequestDispatcher(self.dirname, feature_flags=ff) |
