annotate test/test_liveserver.py @ 8289:46886073c665

refactor: change method used to assign radiobuttons for boolean use setdefault('type', 'radiobutton') rather than hardcoding the value into the underlying self.input (input_html4) call. Also add test for undefined radiobutton.
author John Rouillard <rouilj@ieee.org>
date Sat, 18 Jan 2025 17:43:08 -0500
parents 669dfccca898
children 51f277ed8adc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8219
9404d56d830f test: add file encoding marker so python2 can run
John Rouillard <rouilj@ieee.org>
parents: 8218
diff changeset
1 # -*- coding: utf-8 -*-
9404d56d830f test: add file encoding marker so python2 can run
John Rouillard <rouilj@ieee.org>
parents: 8218
diff changeset
2
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
3 import shutil, errno, pytest, json, gzip, mimetypes, os, re
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
4
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
5 from roundup import date as rdate
6650
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
6 from roundup import i18n
6754
bb04638dc78d Test _generic.item.html to mke sure submit button displayed properly
John Rouillard <rouilj@ieee.org>
parents: 6750
diff changeset
7 from roundup import password
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
8 from roundup.anypy.strings import b2s
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
9 from roundup.cgi.wsgi_handler import RequestDispatcher
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
10 from .wsgi_liveserver import LiveServerTestCase
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
11 from . import db_test_base
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
12 from time import sleep
7578
ec59729b3b7e fix typo
John Rouillard <rouilj@ieee.org>
parents: 7577
diff changeset
13 from .test_postgresql import skip_postgresql
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
14
6548
de5f5f9c02f2 Fix spurious content-ty on 304; xfail css Cache-Control
John Rouillard <rouilj@ieee.org>
parents: 6546
diff changeset
15 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
16
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
17 try:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
18 import requests
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
19 skip_requests = lambda func, *args, **kwargs: func
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
20 except ImportError:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
21 from .pytest_patcher import mark_class
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
22 skip_requests = mark_class(pytest.mark.skip(
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
23 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
24
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
25 try:
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
26 import hypothesis
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
27 skip_hypothesis = lambda func, *args, **kwargs: func
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
28
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
29 # ruff: noqa: E402
8215
1b15f635ada1 fix(web) issue2551382 - handle crash in request call in test
John Rouillard <rouilj@ieee.org>
parents: 8214
diff changeset
30 from hypothesis import example, given, reproduce_failure, settings
8214
55b0abde56ab fix(web) issue2551382 - case 1# or 1& failing.
John Rouillard <rouilj@ieee.org>
parents: 8213
diff changeset
31 from hypothesis.strategies import binary, characters, emails, none, one_of, sampled_from, text
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
32
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
33 except ImportError:
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
34 from .pytest_patcher import mark_class
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
35 skip_hypothesis = mark_class(pytest.mark.skip(
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
36 reason='Skipping hypothesis liveserver tests: hypothesis library not available'))
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
37
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
38 # define a dummy decorator that can take args
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
39 def noop_decorators_with_args(*args, **kwargs):
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
40 def noop_decorators(func):
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
41 def internal():
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
42 pass
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
43 return internal
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
44 return noop_decorators
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
45
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
46 # define a dummy strategy
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
47 def noop_strategy(*args, **kwargs):
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
48 pass
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
49
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
50 # define the decorator functions
8215
1b15f635ada1 fix(web) issue2551382 - handle crash in request call in test
John Rouillard <rouilj@ieee.org>
parents: 8214
diff changeset
51 example = given = reproduce_failure = settings = noop_decorators_with_args
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
52 # and stratgies using in decorators
8217
cd76d5d59c37 fix(web) issue2551382 - fix missing hypothesis case
John Rouillard <rouilj@ieee.org>
parents: 8216
diff changeset
53 binary = characters = emails = none = one_of = sampled_from = text = noop_strategy
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
54
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
55
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
56 try:
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
57 import brotli
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
58 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
59 except ImportError:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
60 from .pytest_patcher import mark_class
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
61 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
62 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
63 brotli = None
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
64
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
65 try:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
66 import zstd
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
67 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
68 except ImportError:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
69 from .pytest_patcher import mark_class
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
70 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
71 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
72
6569
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
73 import sys
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
74
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
75 _py3 = sys.version_info[0] > 2
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
76
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
77 @skip_requests
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
78 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
79 # 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
80 # in the config file but we don't know it until after
6650
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
81 # the server is started and has read the config.ini.
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
82 # Probe for an unused port and set the port range to
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
83 # include only that port.
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
84 tracker_port = LiveServerTestCase.probe_ports(8080, 8100)
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
85 if tracker_port is None:
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
86 pytest.skip("Unable to find available port for server: 8080-8100",
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
87 allow_module_level=True)
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
88 port_range = (tracker_port, tracker_port)
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
89
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
90 # set a couple of properties to use for URL generation in
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
91 # expected output or use to set TRACKER_WEB in config.ini.
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
92 tracker_web = "http://localhost:%d/" % tracker_port
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
93 # tracker_web_base should be the same as self.base_url()
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
94 tracker_web_base = "http://localhost:%d" % tracker_port
6383
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 dirname = '_test_instance'
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
97 backend = 'anydbm'
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
98
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
99 js_mime_type = mimetypes.guess_type("utils.js")[0]
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
100
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
101 @classmethod
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
102 def setup_class(cls):
6650
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
103 '''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
104 This instance persists across all tests.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
105 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
106 create_app() method to be called.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
107 '''
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
108 # tests in this class.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
109 # set up and open a tracker
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
110 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
111
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
112 # open the database
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
113 cls.db = cls.instance.open('admin')
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
114
6754
bb04638dc78d Test _generic.item.html to mke sure submit button displayed properly
John Rouillard <rouilj@ieee.org>
parents: 6750
diff changeset
115 # add a user without edit access for status.
bb04638dc78d Test _generic.item.html to mke sure submit button displayed properly
John Rouillard <rouilj@ieee.org>
parents: 6750
diff changeset
116 cls.db.user.create(username="fred", roles='User',
bb04638dc78d Test _generic.item.html to mke sure submit button displayed properly
John Rouillard <rouilj@ieee.org>
parents: 6750
diff changeset
117 password=password.Password('sekrit'), address='fred@example.com')
bb04638dc78d Test _generic.item.html to mke sure submit button displayed properly
John Rouillard <rouilj@ieee.org>
parents: 6750
diff changeset
118
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
119 # set the url the test instance will run at.
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
120 cls.db.config['TRACKER_WEB'] = cls.tracker_web
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
121 # 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
122 cls.db.config.MAILHOST = "localhost"
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
123 cls.db.config.MAIL_HOST = "localhost"
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
124 cls.db.config.MAIL_DEBUG = "../_test_tracker_mail.log"
6813
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
125
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
126 # added to enable csrf forgeries/CORS to be tested
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
127 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
128 cls.db.config.WEB_ALLOWED_API_ORIGINS = "https://client.com"
6813
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
129 cls.db.config['WEB_CSRF_ENFORCE_HEADER_X-REQUESTED-WITH'] = "required"
6755
d308fb5ba9b0 Disable rate limit. Tests log in and trip the limit causeing failures.
John Rouillard <rouilj@ieee.org>
parents: 6754
diff changeset
130
d308fb5ba9b0 Disable rate limit. Tests log in and trip the limit causeing failures.
John Rouillard <rouilj@ieee.org>
parents: 6754
diff changeset
131 # disable web login rate limiting. The fast rate of tests
d308fb5ba9b0 Disable rate limit. Tests log in and trip the limit causeing failures.
John Rouillard <rouilj@ieee.org>
parents: 6754
diff changeset
132 # causes them to trip the rate limit and fail.
d308fb5ba9b0 Disable rate limit. Tests log in and trip the limit causeing failures.
John Rouillard <rouilj@ieee.org>
parents: 6754
diff changeset
133 cls.db.config.WEB_LOGIN_ATTEMPTS_MIN = 0
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
134
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
135 # enable static precompressed files
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
136 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
137
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
138 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
139
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
140 # add an issue to allow testing retrieval.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
141 # also used for text searching.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
142 result = cls.db.issue.create(title="foo bar RESULT")
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
143
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
144 # add a message to allow retrieval
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
145 result = cls.db.msg.create(author = "1",
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
146 content = "a message foo bar RESULT",
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
147 date=rdate.Date(),
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
148 messageid="test-msg-id")
7935
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
149
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
150 # add a query using @current_user
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
151 result = cls.db.query.create(
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
152 klass="issue",
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
153 name="I created",
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
154 private_for=None,
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
155 url=("@columns=title,id,activity,status,assignedto&"
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
156 "@sort=activity&@group=priority&@filter=creator&"
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
157 "@pagesize=50&@startwith=0&creator=%40current_user")
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
158 )
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
159
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
160 cls.db.commit()
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
161 cls.db.close()
6650
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
162
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
163 # Force locale config to find locales in checkout not in
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
164 # installed directories
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
165 cls.backup_domain = i18n.DOMAIN
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
166 cls.backup_locale_dirs = i18n.LOCALE_DIRS
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
167 i18n.LOCALE_DIRS = ['locale']
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
168 i18n.DOMAIN = ''
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
169
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
170 @classmethod
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
171 def teardown_class(cls):
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
172 '''Close the database and delete the tracker directory
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
173 now that the app should be exiting.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
174 '''
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
175 if cls.db:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
176 cls.db.close()
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
177 try:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
178 shutil.rmtree(cls.dirname)
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
179 except OSError as error:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
180 if error.errno not in (errno.ENOENT, errno.ESRCH): raise
6650
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
181 i18n.LOCALE_DIRS = cls.backup_locale_dirs
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
182 i18n.DOMAIN = cls.backup_domain
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
183
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
184 def create_app(self):
7819
0fe2b9f6e19f issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents: 7816
diff changeset
185 '''The wsgi app to start - no feature_flags set.
0fe2b9f6e19f issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents: 7816
diff changeset
186 Post 2.3.0 this enables the cache_tracker feature.
0fe2b9f6e19f issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents: 7816
diff changeset
187 '''
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
188
6569
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
189 if _py3:
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
190 return validator(RequestDispatcher(self.dirname))
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
191 else:
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
192 # wsgiref/validator.py InputWrapper::readline is broke and
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
193 # 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
194 return RequestDispatcher(self.dirname)
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
195
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
196 class ClientSetup():
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
197 """ Utility programs for the client querying a server.
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
198 Just a login session at the moment but more to come I am sure.
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
199 """
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
200
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
201 def create_login_session(self, username="admin", password="sekrit",
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
202 return_response=True, expect_login_ok=True):
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
203 # Set up session to manage cookies <insert blue monster here>
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
204
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
205 session = requests.Session()
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
206 session.headers.update({'Origin': self.tracker_web_base})
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
207
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
208 # login using form to get cookie
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
209 login = {"__login_name": username, '__login_password': password,
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
210 "@action": "login"}
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
211 response = session.post(self.url_base()+'/', data=login)
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
212
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
213 if expect_login_ok:
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
214 # verify we have a cookie
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
215 self.assertIn('roundup_session_Roundupissuetracker',
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
216 session.cookies)
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
217
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
218 if not return_response:
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
219 return session
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
220 return session, response
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
221
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
222
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
223 @skip_hypothesis
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
224 class FuzzGetUrls(WsgiSetup, ClientSetup):
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
225
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
226 _max_examples = 100
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
227
8270
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
228 # Timeout for each fuzz test in ms. Use env variable in local
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
229 # pytest.ini if your dev environment can't complete in the default
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
230 # 10 seconds.
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
231 fuzz_deadline = int(os.environ.get('pytest_fuzz_timeout', 0)) or 10000
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
232
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
233 @given(sampled_from(['@verbose', '@page_size', '@page_index']),
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
234 text(min_size=1))
8214
55b0abde56ab fix(web) issue2551382 - case 1# or 1& failing.
John Rouillard <rouilj@ieee.org>
parents: 8213
diff changeset
235 @example("@verbose", "1#")
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
236 @example("@verbose", "#1stuff")
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
237 @settings(max_examples=_max_examples,
8270
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
238 deadline=fuzz_deadline) # in ms
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
239 def test_class_url_param_accepting_integer_values(self, param, value):
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
240 """Tests all integer args for rest url. @page_* is the
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
241 same code for all *.
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
242 """
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
243 session, _response = self.create_login_session()
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
244 url = '%s/rest/data/status' % (self.url_base())
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
245 query = '%s=%s' % (param, value)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
246 f = session.get(url, params=query)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
247 try:
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
248 # test case '0#' '12345#stuff' '12345&stuff'
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
249 match = re.match('(^[0-9]*)[#&]', value)
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
250 if match is not None:
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
251 value = match[1]
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
252 elif int(value) >= 0:
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
253 self.assertEqual(f.status_code, 200)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
254 except ValueError:
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
255 # test case '#' '#0', '&', '&anything here really'
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
256 if value[0] in ('#', '&'):
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
257 self.assertEqual(f.status_code, 200)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
258 else:
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
259 # invalid value for param
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
260 self.assertEqual(f.status_code, 400)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
261
8215
1b15f635ada1 fix(web) issue2551382 - handle crash in request call in test
John Rouillard <rouilj@ieee.org>
parents: 8214
diff changeset
262 @given(sampled_from(['@verbose']), text(min_size=1))
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
263 @example("@verbose", "10#")
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
264 @example("@verbose", u'Ø\U000dd990')
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
265 @settings(max_examples=_max_examples,
8270
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
266 deadline=fuzz_deadline) # in ms
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
267 def test_element_url_param_accepting_integer_values(self, param, value):
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
268 """Tests args accepting int for rest url.
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
269 """
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
270 session, _response = self.create_login_session()
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
271 url = '%s/rest/data/status/1' % (self.url_base())
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
272 query = '%s=%s' % (param, value)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
273 f = session.get(url, params=query)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
274 try:
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
275 # test case '0#' '12345#stuff' '12345&stuff'
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
276 match = re.match('(^[0-9]*)[#&]', value)
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
277 if match is not None:
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
278 value = match[1]
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
279 elif int(value) >= 0:
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
280 self.assertEqual(f.status_code, 200)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
281 except ValueError:
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
282 # test case '#' '#0', '&', '&anything here really'
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
283 if value[0] in ('#', '&'):
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
284 self.assertEqual(f.status_code, 200)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
285 else:
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
286 # invalid value for param
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
287 self.assertEqual(f.status_code, 400)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
288
8270
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
289 @skip_hypothesis
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
290 class FuzzTestSettingData(WsgiSetup, ClientSetup):
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
291
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
292 _max_examples = 100
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
293
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
294 # Timeout for each fuzz test in ms. Use env variable in local
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
295 # pytest.ini if your dev environment can't complete in the default
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
296 # 10 seconds.
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
297 fuzz_deadline = int(os.environ.get('pytest_fuzz_timeout', 0)) or 10000
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
298
8218
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
299 @given(emails())
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
300 @settings(max_examples=_max_examples,
8270
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
301 deadline=fuzz_deadline) # in ms
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
302 def test_setting_email_param(self,email):
8218
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
303 session, _response = self.create_login_session()
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
304 url = '%s/rest/data/user/1/address' % (self.url_base())
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
305 headers = {"Accept": "application/json",
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
306 "Content-Type": "application/json",
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
307 "x-requested-with": "rest",
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
308 "Origin": self.url_base(),
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
309 "Referer": self.url_base()
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
310 }
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
311
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
312 #--header 'If-Match: "e2e6cc43c3475a4a3d9e5343617c11c3"' \
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
313
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
314 f = session.get(url)
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
315 stored_email = f.json()['data']['data']
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
316 headers['If-Match'] = f.headers['etag']
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
317
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
318 payload = {'data': email}
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
319 f = session.put(url, json=payload, headers=headers)
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
320
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
321 self.assertEqual(f.status_code, 200)
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
322
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
323 if stored_email == email:
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
324 # if the email we are setting is the same as present, we
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
325 # don't make a change so the attribute dict is empty aka false.
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
326 self.assertEqual(f.json()['data']['attribute'], {})
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
327 else:
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
328 self.assertEqual(f.json()['data']['attribute']['address'],
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
329 email)
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
330
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
331
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
332 @skip_requests
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
333 class BaseTestCases(WsgiSetup, ClientSetup):
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
334 """Class with all tests to run against wsgi server. Is reused when
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
335 wsgi server is started with various feature flags
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
336 """
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
337
8168
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
338 def test_cookie_attributes(self):
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
339 session, _response = self.create_login_session()
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
340
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
341 cookie_box = session.cookies._cookies['localhost.local']['/']
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
342 cookie = cookie_box['roundup_session_Roundupissuetracker']
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
343
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
344 # check cookie attributes. This is an http session, so
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
345 # we can't check secure or see cookie with __Secure- prefix 8-(.
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
346 self.assertEqual(cookie.name, 'roundup_session_Roundupissuetracker')
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
347 self.assertEqual(cookie.expires, None) # session cookie
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
348 self.assertEqual(cookie._rest['HttpOnly'], None) # flag is present
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
349 self.assertEqual(cookie._rest['SameSite'], 'Lax')
7937
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
350
8268
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
351 def test_bad_post_data(self):
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
352 """issue2551387 - bad post data causes TypeError: not indexable
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
353 """
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
354 session, _response = self.create_login_session()
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
355
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
356 h = {"Content-Type": "text/plain"}
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
357 response = session.post(self.url_base()+'/', headers=h, data="test")
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
358 print(response.status_code)
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
359 print(response.headers)
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
360 print(response.text)
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
361 self.assertEqual(response.status_code, 200)
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
362
7937
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
363 def test_query(self):
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
364 current_user_query = (
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
365 "@columns=title,id,activity,status,assignedto&"
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
366 "@sort=activity&@group=priority&@filter=creator&"
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
367 "@pagesize=50&@startwith=0&creator=%40current_user&"
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
368 "@dispname=Test1")
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
369
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
370 session, _response = self.create_login_session()
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
371 f = session.get(self.url_base()+'/issue?' + current_user_query)
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
372
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
373 # verify the query has run by looking for the query name
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
374 self.assertIn('List of issues\n - Test1', f.text)
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
375 # find title of issue 1
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
376 self.assertIn('foo bar RESULT', f.text)
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
377 # match footer "1..1 out of 1" if issue is found
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
378 self.assertIn('out of', f.text)
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
379 # logout
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
380 f = session.get(self.url_base()+'/?@action=logout')
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
381
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
382
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
383 # set up for another user
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
384 session, _response = self.create_login_session(username="fred")
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
385 f = session.get(self.url_base()+'/issue?' + current_user_query)
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
386
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
387 # verify the query has run
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
388 self.assertIn('List of issues\n - Test1', f.text)
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
389 # We should have no rows, so verify the static part
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
390 # of the footer is missing.
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
391 self.assertNotIn('out of', f.text)
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
392
8241
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
393 def test_broken_query(self):
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
394 # query link item
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
395 current_user_query = (
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
396 "@columns=title,id,activity,status,assignedto&"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
397 "@sort=activity&@group=priority&@filter=creator&"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
398 "@pagesize=50&@startwith=0&creator=-2&"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
399 "@dispname=Test1")
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
400
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
401 session, _response = self.create_login_session()
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
402 f = session.get(self.url_base()+'/issue?' + current_user_query)
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
403
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
404 # verify the query has run by looking for the query name
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
405 # print(f.text)
8242
393dfc750d8b test: missed change in error wording.
John Rouillard <rouilj@ieee.org>
parents: 8241
diff changeset
406 self.assertIn('There was an error searching issue by creator using: '
8241
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
407 '[-2]. The operator -2 (not) at position 1 has '
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
408 'too few arguments.',
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
409 f.text)
8253
cae1bbf2536b fix: issue2551374 - Add error handling for filter expressions. Fix UI
John Rouillard <rouilj@ieee.org>
parents: 8248
diff changeset
410 self.assertEqual(f.status_code, 200)
8241
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
411
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
412 def test_broken_multiink_query(self):
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
413 # query multilink item
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
414 current_user_query = (
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
415 "@columns=title,id,activity,status,assignedto"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
416 "&keyword=-3&@sort=activity&@group=priority"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
417 "&@pagesize=50&@startwith=0&@template=index|search"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
418 "&@action=search")
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
419 session, _response = self.create_login_session()
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
420 f = session.get(self.url_base()+'/issue?' + current_user_query)
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
421
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
422 # verify the query has run by looking for the query name
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
423 print(f.text)
8242
393dfc750d8b test: missed change in error wording.
John Rouillard <rouilj@ieee.org>
parents: 8241
diff changeset
424 self.assertIn('There was an error searching issue by keyword using: '
8241
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
425 '[-3]. The operator -3 (and) at position 1 has '
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
426 'too few arguments.',
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
427 f.text)
8253
cae1bbf2536b fix: issue2551374 - Add error handling for filter expressions. Fix UI
John Rouillard <rouilj@ieee.org>
parents: 8248
diff changeset
428 self.assertEqual(f.status_code, 200)
8241
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
429
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
430 def test_start_page(self):
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
431 """ 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
432 """
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
433 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
434 self.assertEqual(f.status_code, 200)
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
435 self.assertTrue(b'Roundup' in f.content)
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
436 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
437
6640
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
438 def test_start_in_german(self):
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
439 """ 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
440 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
441 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
442
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
443 use:
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
444 url parameter @language
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
445 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
446 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
447 """
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
448
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
449 # test url parameter
6640
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
450 f = requests.get(self.url_base() + "?@language=de")
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
451 self.assertEqual(f.status_code, 200)
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
452 print(f.content)
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
453 self.assertTrue(b'Roundup' in f.content)
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
454 self.assertTrue(b'Aufgabenliste' in f.content)
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
455 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
456
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
457 # 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
458 bluemonster = f.cookies
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
459 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
460 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
461 print(f.content)
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
462 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
463 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
464 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
465
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
466 # 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
467 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
468 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
469 print(f.content)
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
470 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
471 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
472 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
473 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
474 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
475
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
476 # 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
477 alh = {"Accept-Language":
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
478 "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
479 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
480 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
481 print(f.content)
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
482 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
483 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
484 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
485
8062
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
486 def test_classhelper_reflection(self):
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
487 """ simple test that verifies that the generic classhelper
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
488 is escaping the url params correctly.
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
489 """
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
490 f = requests.get(self.url_base() + "/keyword?@startwith=0&@template=help&properties=name&property=keyword&form=itemSynopsis</script><script>%3balert(1)%2f%2f&type=checkbox&@sort=name&@pagesize=50")
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
491 self.assertEqual(f.status_code, 200)
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
492 self.assertNotIn(b"<script>;alert(1)//;\n", f.content)
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
493 self.assertIn(
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
494 b"itemSynopsis&lt;/script&gt;&lt;script&gt;;alert(1)//;\n",
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
495 f.content)
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
496
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
497 f = requests.get(self.url_base() + "/keyword?@startwith=0&@template=help&properties=name&property=keyword</script><script>%3balert(1)%2f%2f&form=itemSynopsis&type=checkbox&@sort=name&@pagesize=50")
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
498 self.assertEqual(f.status_code, 200)
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
499 self.assertNotIn(b"<script>;alert(1)//;\n", f.content)
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
500 self.assertIn(
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
501 b"keyword&lt;/script&gt;&lt;script&gt;;alert(1)//';</script>\n",
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
502 f.content)
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
503
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
504 def test_byte_Ranges(self):
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
505 """ Roundup only handles one simple two number range, or
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
506 a single number to start from:
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
507 Range: 10-20
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
508 Range: 10-
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
509
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
510 The following is not supported.
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
511 Range: 10-20, 25-30
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
512 Range: -10
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
513
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
514 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
515
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
516 """
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
517
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
518 # get whole file uncompressed. Extract content length and etag
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
519 # for future use
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
520 f = requests.get(self.url_base() + "/@@file/style.css",
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
521 headers = {"Accept-Encoding": "identity"})
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
522 # store etag for condition range testing
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
523 etag = f.headers['etag']
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
524 expected_length = f.headers['content-length']
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
525
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
526 # 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
527 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
528 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
529 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
530 self.assertEqual(f.content, b"/* main pag")
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
531 # 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
532 self.assertEqual(f.headers['content-length'], '11')
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
533 self.assertEqual(f.headers['content-range'],
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
534 "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
535
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
536 # get bytes 11-21 unconditionally (0 index really??)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
537 hdrs = {"Range": "bytes=10-20"}
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
538 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
539 self.assertEqual(f.status_code, 206)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
540 self.assertEqual(f.content, b"ge styles *")
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
541 # compression disabled for length < 100, so we can use 11 here
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
542 self.assertEqual(f.headers['content-length'], '11')
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
543 self.assertEqual(f.headers['content-range'],
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
544 "bytes 10-20/%s"%expected_length)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
545
7816
1b5daee24dc7 test: fix test for invalid etag in if-range.
John Rouillard <rouilj@ieee.org>
parents: 7578
diff changeset
546 # get all bytes starting from 11
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
547 hdrs = {"Range": "bytes=11-"}
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
548 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
549 self.assertEqual(f.status_code, 206)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
550 self.assertEqual(f.headers['content-range'],
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
551 "bytes 11-%s/%s"%(int(expected_length) - 1,
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
552 expected_length))
6978
3c4047cdc77a cange type or arg to assertIn from string to byte.
John Rouillard <rouilj@ieee.org>
parents: 6977
diff changeset
553 self.assertIn(b"SHA:", f.content) # detect sha sum at end of file
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
554
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
555 # conditional request 11 bytes since etag matches 206 code
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
556 hdrs = {"Range": "bytes=0-10"}
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
557 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
558 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
559 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
560 self.assertEqual(f.content, b"/* main pag")
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
561 # 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
562 self.assertEqual(f.headers['content-length'], '11')
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
563 self.assertEqual(f.headers['content-range'],
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
564 "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
565
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
566 # 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
567 hdrs['If-Range'] = etag[2:] # bad tag
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
568 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
569 self.assertEqual(f.status_code, 200)
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
570 # not checking content length since it could be compressed
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
571 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
572
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
573 # 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
574 hdrs['Range'] = "0-99999" # too large
7816
1b5daee24dc7 test: fix test for invalid etag in if-range.
John Rouillard <rouilj@ieee.org>
parents: 7578
diff changeset
575 hdrs['If-Range'] = '"' + etag[2:] # start bad tag with "
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
576 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
577 self.assertEqual(f.status_code, 200)
7816
1b5daee24dc7 test: fix test for invalid etag in if-range.
John Rouillard <rouilj@ieee.org>
parents: 7578
diff changeset
578 # note f.content has content-encoding (compression) undone.
1b5daee24dc7 test: fix test for invalid etag in if-range.
John Rouillard <rouilj@ieee.org>
parents: 7578
diff changeset
579 self.assertEqual(len(f.content), int(expected_length))
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
580 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
581
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
582 # 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
583 # 200 code
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
584 hdrs['Range'] = "bytes=0-99999" # too large
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
585 hdrs['If-Range'] = etag # any tag works
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
586 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
587 self.assertEqual(f.status_code, 200)
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
588 # not checking content length since it could be compressed
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
589 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
590
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
591 # 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
592 hdrs['Range'] = "bytes=0-99999" # too large
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
593 del(hdrs['If-Range'])
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
594 print(hdrs)
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
595 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
596 self.assertEqual(f.status_code, 416)
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
597 self.assertEqual(f.headers['content-range'],
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
598 "bytes */%s"%expected_length)
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
599
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
600 # invalid range multiple ranges
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
601 hdrs['Range'] = "bytes=0-10, 20-45"
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
602 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
603 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
604 self.assertEqual(f.status_code, 200)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
605 self.assertNotIn('content-range', f.headers,
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
606 'content-range should not be present')
6978
3c4047cdc77a cange type or arg to assertIn from string to byte.
John Rouillard <rouilj@ieee.org>
parents: 6977
diff changeset
607 self.assertIn(b"SHA:", f.content) # detect sha sum at end of file
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
608
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
609 # invalid range is single number not number followed by -
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
610 hdrs['Range'] = "bytes=1"
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
611 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
612 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
613 self.assertEqual(f.status_code, 200)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
614 self.assertNotIn('content-range', f.headers,
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
615 'content-range should not be present')
6978
3c4047cdc77a cange type or arg to assertIn from string to byte.
John Rouillard <rouilj@ieee.org>
parents: 6977
diff changeset
616 self.assertIn(b"SHA:", f.content) # detect sha sum at end of file
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
617
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
618 # range is invalid first number not a number
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
619 hdrs['Range'] = "bytes=boom-99" # bad first value
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
620 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
621 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
622 self.assertEqual(f.status_code, 200)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
623 self.assertNotIn('content-range', f.headers,
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
624 'content-range should not be present')
6978
3c4047cdc77a cange type or arg to assertIn from string to byte.
John Rouillard <rouilj@ieee.org>
parents: 6977
diff changeset
625 self.assertIn(b"SHA:", f.content) # detect sha sum at end of file
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
626
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
627 # range is invalid last number not a number
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
628 hdrs['Range'] = "bytes=1-boom" # bad last value
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
629 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
630 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
631 self.assertEqual(f.status_code, 200)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
632 self.assertNotIn('content-range', f.headers,
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
633 'content-range should not be present')
6978
3c4047cdc77a cange type or arg to assertIn from string to byte.
John Rouillard <rouilj@ieee.org>
parents: 6977
diff changeset
634 self.assertIn(b"SHA:", f.content) # detect sha sum at end of file
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
635
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
636 # range is invalid first position empty
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
637 hdrs['Range'] = "bytes=-11" # missing first value
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
638 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
639 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
640 self.assertEqual(f.status_code, 200)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
641 self.assertNotIn('content-range', f.headers,
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
642 'content-range should not be present')
6978
3c4047cdc77a cange type or arg to assertIn from string to byte.
John Rouillard <rouilj@ieee.org>
parents: 6977
diff changeset
643 self.assertIn(b"SHA:", f.content) # detect sha sum at end of file
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
644
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
645 # range is invalid #2 < #1
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
646 hdrs['Range'] = "bytes=11-1" # inverted range
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
647 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
648 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
649 self.assertEqual(f.status_code, 200)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
650 self.assertNotIn('content-range', f.headers,
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
651 'content-range should not be present')
6978
3c4047cdc77a cange type or arg to assertIn from string to byte.
John Rouillard <rouilj@ieee.org>
parents: 6977
diff changeset
652 self.assertIn(b"SHA:", f.content) # detect sha sum at end of file
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
653
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
654 # range is invalid negative first number
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
655 hdrs['Range'] = "bytes=-1-11" # negative first number
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
656 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
657 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
658 self.assertEqual(f.status_code, 200)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
659 self.assertNotIn('content-range', f.headers,
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
660 'content-range should not be present')
6978
3c4047cdc77a cange type or arg to assertIn from string to byte.
John Rouillard <rouilj@ieee.org>
parents: 6977
diff changeset
661 self.assertIn(b"SHA:", f.content) # detect sha sum at end of file
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
662
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
663 # range is invalid negative second number
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
664 hdrs['Range'] = "bytes=1--11" # negative second number
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
665 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
666 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
667 self.assertEqual(f.status_code, 200)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
668 self.assertNotIn('content-range', f.headers,
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
669 'content-range should not be present')
6978
3c4047cdc77a cange type or arg to assertIn from string to byte.
John Rouillard <rouilj@ieee.org>
parents: 6977
diff changeset
670 self.assertIn(b"SHA:", f.content) # detect sha sum at end of file
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
671
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
672 # range is unsupported units
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
673 hdrs['Range'] = "badunits=1-11"
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
674 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
675 f = requests.get(self.url_base() + "/@@file/style.css", headers=hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
676 self.assertEqual(f.status_code, 200)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
677 self.assertNotIn('content-range', f.headers,
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
678 'content-range should not be present')
6978
3c4047cdc77a cange type or arg to assertIn from string to byte.
John Rouillard <rouilj@ieee.org>
parents: 6977
diff changeset
679 self.assertIn(b"SHA:", f.content) # detect sha sum at end of file
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
680
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
681
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
682 # valid range, invalid file
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
683 hdrs['Range'] = "bytes=0-11"
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
684 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
685 f = requests.get(self.url_base() + "/@@file/style_nope.css",
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
686 headers=hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
687 self.assertEqual(f.status_code, 404)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
688 self.assertNotIn('content-range', f.headers,
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
689 'content-range should not be present')
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
690
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
691 def test_rest_preflight_collection(self):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
692 # no auth for rest csrf preflight
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
693 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
694 headers = {'content-type': "",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
695 'x-requested-with': "rest",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
696 'Access-Control-Request-Headers':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
697 "x-requested-with",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
698 'Access-Control-Request-Method': "PUT",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
699 'Origin': "https://client.com"})
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
700 print(f.status_code)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
701 print(f.headers)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
702 print(f.content)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
703
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
704 self.assertEqual(f.status_code, 204)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
705
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
706 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
707 '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
708 'Allow': 'OPTIONS, GET, POST',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
709 'Access-Control-Allow-Methods': 'OPTIONS, GET, POST',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
710 'Access-Control-Allow-Credentials': 'true',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
711 }
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
712
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
713 # 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
714 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
715 f.headers.items() if key in expected },
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
716 expected)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
717
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
718 # use invalid Origin
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
719 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
720 headers = {'content-type': "application/json",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
721 'x-requested-with': "rest",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
722 'Access-Control-Request-Headers':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
723 "x-requested-with",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
724 'Access-Control-Request-Method': "PUT",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
725 'Origin': "ZZZ"})
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
726
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
727 self.assertEqual(f.status_code, 400)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
728
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
729 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
730 'allowed to use Rest Interface." } }'
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
731 self.assertEqual(b2s(f.content), expected)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
732
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
733 # Test when Origin is not sent.
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
734 f = requests.options(self.url_base() + '/rest/data/user',
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
735 headers = {'content-type': "application/json",
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
736 'x-requested-with': "rest",
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
737 'Access-Control-Request-Headers':
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
738 "x-requested-with",
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
739 'Access-Control-Request-Method': "PUT",})
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
740
8265
35beff316883 fix(api): issue2551384. Verify REST authorization earlier
John Rouillard <rouilj@ieee.org>
parents: 8253
diff changeset
741 self.assertEqual(f.status_code, 403)
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
742
8265
35beff316883 fix(api): issue2551384. Verify REST authorization earlier
John Rouillard <rouilj@ieee.org>
parents: 8253
diff changeset
743 expected = ('{ "error": { "status": 403, "msg": "Forbidden." } }')
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
744 self.assertEqual(b2s(f.content), expected)
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
745
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
746
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
747 def test_rest_invalid_method_collection(self):
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
748 # use basic auth for rest endpoint
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
749 f = requests.put(self.url_base() + '/rest/data/user',
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
750 auth=('admin', 'sekrit'),
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
751 headers = {'content-type': "",
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
752 'X-Requested-With': "rest",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
753 'Origin': "https://client.com"})
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
754 print(f.status_code)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
755 print(f.headers)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
756 print(f.content)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
757
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
758 self.assertEqual(f.status_code, 405)
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
759 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
760 'Access-Control-Allow-Credentials': 'true',
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
761 'Allow': 'DELETE, GET, OPTIONS, POST',
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
762 }
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
763
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
764 print(f.headers)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
765 # use dict comprehension to remove fields like date,
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
766 # content-length etc. from f.headers.
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
767 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
768
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
769 content = json.loads(f.content)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
770
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
771 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
772 self.assertEqual(exp_content, content['error']['msg'])
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
773
6386
2a2da73e1e26 Remove Connection: close header for 501 error handling rest
John Rouillard <rouilj@ieee.org>
parents: 6385
diff changeset
774 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
775 """ 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
776
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
777 # 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
778 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
779 headers = {'content-type': ""})
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
780 # 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
781 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
782
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
783 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
784 # 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
785 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
786 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
787 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
788 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
789 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
790 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
791 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
792
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
793 self.assertEqual(f.status_code, 204)
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
794 expected = { 'Access-Control-Allow-Origin': self.tracker_web_base,
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
795 '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
796 'Allow': 'OPTIONS, GET',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
797 'Access-Control-Allow-Credentials': 'true',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
798 'Access-Control-Allow-Methods': 'OPTIONS, GET',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
799 '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
800 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
801
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
802 # 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
803 # 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
804 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
805
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
806 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
807 # 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
808 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
809 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
810 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
811 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
812 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
813 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
814 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
815
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
816 self.assertEqual(f.status_code, 204)
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
817 expected = { 'Access-Control-Allow-Origin': self.tracker_web_base,
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
818 '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
819 'Allow': 'OPTIONS, GET',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
820 'Access-Control-Allow-Methods': 'OPTIONS, GET',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
821 '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
822 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
823
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
824 # 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
825 # 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
826 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
827
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
828 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
829 # 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
830 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
831 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
832 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
833 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
834 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
835 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
836 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
837
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
838 self.assertEqual(f.status_code, 204)
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
839 expected = { 'Access-Control-Allow-Origin': self.tracker_web_base,
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
840 '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
841 'Allow': 'OPTIONS, GET, POST',
6526
3c8322e3fe25 Fix test and remove pdb invocation.
John Rouillard <rouilj@ieee.org>
parents: 6525
diff changeset
842 '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
843 '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
844 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
845
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
846 # 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
847 # 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
848 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
849
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
850
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
851 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
852
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
853 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
854 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
855 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
856 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
857 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
858 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
859 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
860
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
861 self.assertEqual(f.status_code, 204)
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
862 expected = { 'Access-Control-Allow-Origin': self.tracker_web_base,
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
863 '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
864 'Allow': 'OPTIONS, GET, PUT, DELETE, PATCH',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
865 '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
866 '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
867 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
868
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
869 # 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
870 # 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
871 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
872
6385
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
873 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
874 # 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
875 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
876 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
877 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
878 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
879 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
880 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
881 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
882
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
883 self.assertEqual(f.status_code, 204)
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
884 expected = { 'Access-Control-Allow-Origin': self.tracker_web_base,
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
885 '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
886 'Allow': 'OPTIONS, GET, PUT, DELETE, PATCH',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
887 '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
888 '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
889 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
890
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
891 # 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
892 # 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
893 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
894
6385
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
895 ## test a read only property.
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
896
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
897 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
898 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
899 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
900 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
901 })
6385
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
902 print(f.status_code)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
903 print(f.headers)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
904
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
905 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
906 expected1 = dict(expected)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
907 expected1['Allow'] = 'OPTIONS, GET'
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
908 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
909
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
910 # 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
911 # 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
912 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
913
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
914 ## 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
915 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
916 auth=('admin', 'sekrit'),
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
917 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
918 'Origin': self.tracker_web_base,})
6385
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
919 print(f.status_code)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
920 print(f.headers)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
921
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
922 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
923
7983
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
924 def test_rest_endpoint_user_roles(self):
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
925 # use basic auth for rest endpoint
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
926 f = requests.get(self.url_base() + '/rest/data/user/roles',
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
927 auth=('admin', 'sekrit'),
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
928 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
929 'Origin': self.tracker_web_base,
7983
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
930 })
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
931 print(f.status_code)
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
932 print(f.headers)
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
933
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
934 self.assertEqual(f.status_code, 200)
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
935 expected = { 'Access-Control-Expose-Headers': 'X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-RateLimit-Limit-Period, Retry-After, Sunset, Allow',
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
936 'Access-Control-Allow-Credentials': 'true',
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
937 'Allow': 'GET',
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
938 }
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
939 # use dict comprehension to remove fields like date,
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
940 # content-length etc. from f.headers.
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
941 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected)
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
942
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
943 content = json.loads(f.content)
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
944
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
945 self.assertEqual(3, len(json.loads(f.content)['data']['collection']))
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
946
8020
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
947 def test_inm(self):
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
948 '''retrieve the user_utils.js file without an if-none-match etag
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
949 header, a bad if-none-match header and valid single and
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
950 multiple values.
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
951 '''
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
952 f = requests.get(self.url_base() + '/@@file/user_utils.js',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
953 headers = { 'Accept-Encoding': 'gzip, foo',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
954 'Accept': '*/*'})
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
955 print(f.status_code)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
956 print(f.headers)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
957
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
958 self.assertEqual(f.status_code, 200)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
959 expected = { 'Content-Type': self.js_mime_type,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
960 'Content-Encoding': 'gzip',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
961 'Vary': 'Accept-Encoding',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
962 }
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
963
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
964 # use dict comprehension to remove fields like date,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
965 # etag etc. from f.headers.
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
966 self.assertDictEqual({ key: value for (key, value) in
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
967 f.headers.items() if key in expected },
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
968 expected)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
969
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
970 # use etag in previous response
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
971 etag = f.headers['etag']
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
972 f = requests.get(self.url_base() + '/@@file/user_utils.js',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
973 headers = { 'Accept-Encoding': 'gzip, foo',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
974 'If-None-Match': etag,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
975 'Accept': '*/*'})
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
976 print(f.status_code)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
977 print(f.headers)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
978
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
979 self.assertEqual(f.status_code, 304)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
980 expected = { 'Vary': 'Accept-Encoding',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
981 'Content-Length': '0',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
982 'ETag': etag,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
983 'Vary': 'Accept-Encoding'
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
984 }
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
985
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
986 # use dict comprehension to remove fields like date, server,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
987 # etc. from f.headers.
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
988 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
989
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
990 # test again with etag supplied w/o content-encoding
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
991 # and multiple etags
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
992 self.assertTrue(etag.endswith('-gzip"'))
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
993
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
994 # keep etag intact. Used below.
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
995 base_etag = etag[:-6] + '"'
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
996
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
997 all_etags = (
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
998 '"a41932-8b5-664ce93d", %s", "a41932-8b5-664ce93d-br"' %
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
999 base_etag
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1000 )
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1001
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1002 f = requests.get(self.url_base() + '/@@file/user_utils.js',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1003 headers = { 'Accept-Encoding': 'gzip, foo',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1004 'If-None-Match': base_etag,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1005 'Accept': '*/*'})
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1006 print(f.status_code)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1007 print(f.headers)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1008
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1009 self.assertEqual(f.status_code, 304)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1010 expected = { 'Vary': 'Accept-Encoding',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1011 'Content-Length': '0',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1012 'ETag': base_etag,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1013 'Vary': 'Accept-Encoding'
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1014 }
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1015
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1016 # use dict comprehension to remove fields like date, server,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1017 # etc. from f.headers.
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1018 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1019
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1020
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1021 # test with bad etag
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1022 f = requests.get(self.url_base() + '/@@file/user_utils.js',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1023 headers = { 'Accept-Encoding': 'gzip, foo',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1024 'If-None-Match': '"a41932-8b5-664ce93d"',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1025 'Accept': '*/*'})
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1026 print(f.status_code)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1027 print(f.headers)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1028
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1029 self.assertEqual(f.status_code, 200)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1030 expected = { 'Content-Type': self.js_mime_type,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1031 'ETag': etag,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1032 'Content-Encoding': 'gzip',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1033 'Vary': 'Accept-Encoding',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1034 }
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1035
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1036 # use dict comprehension to remove fields like date, server,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1037 # etc. from f.headers.
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1038 self.assertDictEqual({ key: value for (key, value) in f.headers.items() if key in expected }, expected)
7983
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1039
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1040 def test_ims(self):
8020
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1041 ''' retrieve the user_utils.js file with old and new
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1042 if-modified-since timestamps.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1043 '''
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1044 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
1045
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1046 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
1047 headers = { 'Accept-Encoding': 'gzip, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1048 '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
1049 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1050 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1051 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1052
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1053 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
1054 expected = { 'Content-Type': self.js_mime_type,
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1055 'Content-Encoding': 'gzip',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1056 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1057 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1058
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1059 # 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
1060 # etag etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1061 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
1062
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1063 # now use today's date
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1064 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
1065 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
1066 headers = { 'Accept-Encoding': 'gzip, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1067 '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
1068 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1069 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1070 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1071
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1072 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
1073 expected = { 'Vary': 'Accept-Encoding',
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1074 'Content-Length': '0',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1075 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1076
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1077 # 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
1078 # etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1079 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
1080
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1081
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1082 def test_load_issue1(self):
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1083 for tail in [
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1084 '/issue1', # normal url
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1085 '/issue00001', # leading 0's should be stripped from id
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1086 '/issue1>' # surprise this works too, should it??
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1087 ]:
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1088 f = requests.get(self.url_base() + tail,
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1089 headers = { 'Accept-Encoding': 'gzip',
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1090 'Accept': '*/*'})
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1091
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1092 self.assertIn(b'foo bar RESULT', f.content)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1093 self.assertEqual(f.status_code, 200)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1094
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1095 def test_load_msg1(self):
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1096 # leading 0's should be stripped from id
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1097 f = requests.get(self.url_base() + '/msg0001',
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1098 headers = { 'Accept-Encoding': 'gzip',
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1099 'Accept': '*/*'})
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1100
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1101 self.assertIn(b'foo bar RESULT', f.content)
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1102 self.assertEqual(f.status_code, 200)
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1103
6749
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1104 def test_bad_path(self):
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1105 f = requests.get(self.url_base() + '/_bad>',
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1106 headers = { 'Accept-Encoding': 'gzip, foo',
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1107 'Accept': '*/*'})
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1108
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1109 # test that returned text is encoded.
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1110 self.assertEqual(f.content, b'Not found: _bad&gt;')
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1111 self.assertEqual(f.status_code, 404)
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1112
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1113 def test_compression_gzipfile(self):
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1114 '''Get the compressed dummy file'''
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1115
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1116 # 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
1117 # 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
1118 # that I get the compressed one.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1119 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
1120 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
1121
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1122 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
1123 bytes_written = f.write(test_text)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1124
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1125 self.assertEqual(bytes_written, 30)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1126
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1127 # test file x-fer
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1128 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
1129 headers = { 'Accept-Encoding': 'gzip, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1130 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1131 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1132 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1133
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1134 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
1135 expected = { 'Content-Type': self.js_mime_type,
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1136 'Content-Encoding': 'gzip',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1137 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1138 'Content-Length': '69',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1139 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1140
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1141 # 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
1142 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1143 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
1144 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
1145 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1146
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1147
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1148 # 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
1149 self.assertEqual(f.content, test_text)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1150
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1151 '''# 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
1152
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1153 # 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
1154 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
1155 headers = { 'Accept-Encoding': 'br, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1156 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1157 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1158 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1159
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1160 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
1161 expected = { 'Content-Type': self.js_mime_type,
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1162 'Content-Encoding': 'br',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1163 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1164 'Content-Length': '960',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1165 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1166
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1167 # 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
1168 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1169 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
1170 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
1171 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1172
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1173 try:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1174 from urllib3.response import BrotliDecoder
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1175 # 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
1176 data = f.content
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1177 except ImportError:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1178 # I need to decode
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1179 data = brotli.decompress(f.content)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1180
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1181 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
1182 '''
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1183
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1184 # 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
1185 # 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
1186 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
1187
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1188 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
1189 headers = { 'Accept-Encoding': 'gzip, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1190 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1191 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1192 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1193
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1194 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
1195 expected = { 'Content-Type': self.js_mime_type,
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1196 'Content-Encoding': 'gzip',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1197 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1198 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1199
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1200 # 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
1201 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1202 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
1203 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
1204 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1205
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1206
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1207 # 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
1208 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
1209
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1210 # cleanup
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1211 os.remove(gzfile)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1212
6541
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1213 def test_compression_none_etag(self):
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1214 # use basic auth for rest endpoint
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1215 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
1216 auth=('admin', 'sekrit'),
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1217 headers = {'content-type': "",
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1218 'Accept-Encoding': "",
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1219 'Accept': '*/*'})
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1220 print(f.status_code)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1221 print(f.headers)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1222
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1223 self.assertEqual(f.status_code, 200)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1224 expected = { 'Content-Type': 'application/json',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1225 'Access-Control-Allow-Credentials': 'true',
6541
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1226 '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
1227 }
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1228
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1229 content_str = '''{ "data": {
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1230 "id": "1",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1231 "link": "%s/rest/data/user/1/username",
6541
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1232 "data": "admin"
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1233 }
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1234 }''' % self.tracker_web_base
6541
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1235 content = json.loads(content_str)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1236
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1237
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1238 if (type("") == type(f.content)):
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1239 json_dict = json.loads(f.content)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1240 else:
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1241 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
1242
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1243 # 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
1244 del(json_dict['data']['@etag'])
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1245
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1246 # 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
1247 # just skip comparing it.
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1248 del(json_dict['data']['type'])
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1249
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1250 self.assertDictEqual(json_dict, content)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1251
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1252 # 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
1253 print(f.headers['ETag'])
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1254 with self.assertRaises(ValueError):
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1255 f.headers['ETag'].index('-')
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1256
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1257 # 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
1258 # content-length etc. from f.headers.
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1259 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
1260
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1261
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1262 def test_compression_gzip(self, method='gzip'):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1263 if method == 'gzip':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1264 decompressor = None
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1265 elif method == 'br':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1266 decompressor = brotli.decompress
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1267 elif method == 'zstd':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1268 decompressor = zstd.decompress
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1269
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1270 # use basic auth for rest endpoint
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1271 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
1272 auth=('admin', 'sekrit'),
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1273 headers = {'content-type': "",
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1274 'Accept-Encoding': '%s, foo'%method,
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1275 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1276 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1277 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1278
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1279 self.assertEqual(f.status_code, 200)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1280 expected = { 'Content-Type': 'application/json',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1281 'Access-Control-Allow-Credentials': 'true',
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1282 '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
1283 'Content-Encoding': method,
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1284 'Vary': 'Origin, Accept-Encoding',
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1285 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1286
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1287 content_str = '''{ "data": {
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1288 "id": "1",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1289 "link": "%s/rest/data/user/1/username",
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1290 "data": "admin"
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1291 }
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1292 }''' % self.tracker_web_base
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1293 content = json.loads(content_str)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1294
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1295 print(f.content)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1296 print(type(f.content))
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1297
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1298 try:
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1299 if (type("") == type(f.content)):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1300 json_dict = json.loads(f.content)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1301 else:
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1302 json_dict = json.loads(b2s(f.content))
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1303 except (ValueError, UnicodeDecodeError):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1304 # 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
1305 # gzip gets decompressed automatically
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1306 # 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
1307 # UnicodeDecodeError - raised by loads on compressed content
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1308 # python3
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1309 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
1310
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1311 # 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
1312 del(json_dict['data']['@etag'])
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1313
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1314 # 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
1315 # just skip comparing it.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1316 del(json_dict['data']['type'])
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1317
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1318 self.assertDictEqual(json_dict, content)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1319
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1320 # verify that ETag header ends with -<method>
6539
f8df7fed18f6 issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents: 6526
diff changeset
1321 try:
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1322 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
1323 except AttributeError:
f8df7fed18f6 issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents: 6526
diff changeset
1324 # 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
1325 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
1326
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1327 # 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
1328 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1329 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
1330
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1331
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1332 # 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
1333 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
1334 auth=('admin', 'sekrit'),
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1335 headers = {'content-type': "",
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1336 'Accept-Encoding': '%s, foo'%method,
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1337 'Accept': '*/*',
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
1338 'Origin': 'https://client.com'})
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1339 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1340 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1341
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1342 # NOTE: not compressed payload too small
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
1343 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
1344 expected = { 'Content-Type': 'application/json',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1345 'Access-Control-Allow-Credentials': 'true',
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
1346 'Access-Control-Allow-Origin': 'https://client.com',
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1347 '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
1348 'Vary': 'Origin'
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1349 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1350
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1351 content = { "error":
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1352 {
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
1353 "status": 400,
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
1354 "msg": "Invalid attribute foo"
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1355 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1356 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1357
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1358 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
1359 self.assertDictEqual(json_dict, content)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1360
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1361 # 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
1362 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1363 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
1364
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1365 # test file x-fer
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1366 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
1367 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
1368 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1369 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1370 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1371
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1372 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
1373 expected = { 'Content-Type': self.js_mime_type,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1374 'Content-Encoding': method,
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1375 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1376 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1377
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1378 # 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
1379 # 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
1380 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
1381 # 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
1382 data = f.content
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1383 else:
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1384 # I need to decode
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1385 data = decompressor(f.content)
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1386
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1387 # check first few bytes.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1388 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
1389
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1390 # 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
1391 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1392 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
1393 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
1394 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1395
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1396 # test file x-fer
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1397 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
1398 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
1399 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1400 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1401 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1402
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1403 self.assertEqual(f.status_code, 200)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1404 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
1405 'Content-Encoding': method,
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1406 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1407 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1408
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1409 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
1410 # 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
1411 data = f.content
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1412 else:
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1413 # I need to decode
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1414 data = decompressor(f.content)
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1415
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1416 # check first few bytes.
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1417 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
1418
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1419 # 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
1420 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1421 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
1422 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
1423 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1424
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1425 @skip_brotli
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1426 def test_compression_br(self):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1427 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
1428
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1429 @skip_zstd
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1430 def test_compression_zstd(self):
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1431 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
1432
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1433 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
1434 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
1435 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
1436 'Accept': '*/*'})
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1437 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
1438 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
1439
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1440 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
1441 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
1442
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1443 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
1444 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
1445 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
1446 'Accept': '*/*'})
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1447 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
1448 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
1449
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1450 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
1451 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
1452
6813
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1453 def test_missing_session_key(self):
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1454 '''Test case where we have an outdated session cookie. Make
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1455 sure cookie is removed.
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1456 '''
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1457
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1458 session, f = self.create_login_session()
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1459
6813
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1460 # verify cookie is present and we are logged in
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1461 self.assertIn('<b>Hello, admin</b>', f.text)
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1462 self.assertIn('roundup_session_Roundupissuetracker',
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1463 session.cookies)
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1464
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1465 f = session.get(self.url_base()+'/')
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1466 self.assertIn('<b>Hello, admin</b>', f.text)
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1467
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1468 for cookie in session.cookies:
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1469 if cookie.name == 'roundup_session_Roundupissuetracker':
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1470 cookie.value = 'bad_cookie_no_chocolate'
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1471 break
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1472
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1473 f = session.get(self.url_base()+'/')
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1474
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1475 self.assertNotIn('<b>Hello, admin</b>', f.text)
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1476 self.assertNotIn('roundup_session_Roundupissuetracker', session.cookies)
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1477
6750
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1478 def test_login_fail_then_succeed(self):
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1479
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1480 session, f = self.create_login_session(password="bad_sekrit",
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1481 expect_login_ok=False)
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1482
6750
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1483 # verify error message and no hello message in sidebar.
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1484 self.assertIn('class="error-message">Invalid login <br/ >', f.text)
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1485 self.assertNotIn('<b>Hello, admin</b>', f.text)
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1486
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1487 session, f = self.create_login_session(return_response=True)
6750
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1488 self.assertIn('<b>Hello, admin</b>', f.text)
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1489
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1490 def test__generic_item_template_editok(self, user="admin"):
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1491 """Load /status7 object. Admin has edit rights so should see
6754
bb04638dc78d Test _generic.item.html to mke sure submit button displayed properly
John Rouillard <rouilj@ieee.org>
parents: 6750
diff changeset
1492 a submit button. fred doesn't have edit rights
bb04638dc78d Test _generic.item.html to mke sure submit button displayed properly
John Rouillard <rouilj@ieee.org>
parents: 6750
diff changeset
1493 so should not have a submit button.
bb04638dc78d Test _generic.item.html to mke sure submit button displayed properly
John Rouillard <rouilj@ieee.org>
parents: 6750
diff changeset
1494 """
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1495 session, f = self.create_login_session(username=user)
6754
bb04638dc78d Test _generic.item.html to mke sure submit button displayed properly
John Rouillard <rouilj@ieee.org>
parents: 6750
diff changeset
1496
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1497 # look for change in text in sidebar post login
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1498 self.assertIn('Hello, %s'%user, f.text)
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1499 f = session.get(self.url_base()+'/status7')
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1500 print(f.content)
6754
bb04638dc78d Test _generic.item.html to mke sure submit button displayed properly
John Rouillard <rouilj@ieee.org>
parents: 6750
diff changeset
1501
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1502 # status7's name is done-cbb
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1503 self.assertIn(b'done-cbb', f.content)
6754
bb04638dc78d Test _generic.item.html to mke sure submit button displayed properly
John Rouillard <rouilj@ieee.org>
parents: 6750
diff changeset
1504
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1505 if user == 'admin':
8281
669dfccca898 issue2551391 - checkboxes and radiobutton inputs get wrong id's.
John Rouillard <rouilj@ieee.org>
parents: 8270
diff changeset
1506 self.assertIn(b'<input id="submit_button" name="submit_button" type="submit" value="Submit Changes">', f.content)
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1507 else:
8281
669dfccca898 issue2551391 - checkboxes and radiobutton inputs get wrong id's.
John Rouillard <rouilj@ieee.org>
parents: 8270
diff changeset
1508 self.assertNotIn(b'<input id="submit_button" name="submit_button" type="submit" value="Submit Changes">', f.content)
6754
bb04638dc78d Test _generic.item.html to mke sure submit button displayed properly
John Rouillard <rouilj@ieee.org>
parents: 6750
diff changeset
1509
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1510 # logout
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1511 f = session.get(self.url_base()+'/?@action=logout')
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1512 self.assertIn(b"Remember me?", f.content)
6756
1572568fe146 See if explicit logout prevents fred from having a submit button.
John Rouillard <rouilj@ieee.org>
parents: 6755
diff changeset
1513
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1514 def test__generic_item_template_editbad(self, user="fred"):
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1515 self.test__generic_item_template_editok(user=user)
6754
bb04638dc78d Test _generic.item.html to mke sure submit button displayed properly
John Rouillard <rouilj@ieee.org>
parents: 6750
diff changeset
1516
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1517 def test_new_issue_with_file_upload(self):
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1518 session, f = self.create_login_session()
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1519
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1520 # 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
1521 self.assertIn('Hello, admin', f.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1522
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1523 # 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
1524 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
1525 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
1526 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
1527 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
1528
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1529 # 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
1530 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
1531
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1532 # 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
1533 # 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
1534 # 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
1535 # search is working correctly.
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1536 # use groupdict for python2.
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1537 self.assertEqual( self.tracker_web_base + '/issue%(issue)s?@ok_message=file%%20%(file)s%%20created%%0Aissue%%20%(issue)s%%20created&@template=item'%m.groupdict(), f.url)
6570
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1538
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1539 # 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
1540 # seach for unique filename given to it.
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1541 self.assertIn("test1.txt", f.text)
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1542
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1543 # download file and verify content
6570
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1544 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
1545 self.assertEqual(f.text, file_content)
7159
765222ef4cec - issue2551257: add 'X-Content-Type-Options: nosniff' header for file download
John Rouillard <rouilj@ieee.org>
parents: 7151
diff changeset
1546 self.assertEqual(f.headers["X-Content-Type-Options"], "nosniff")
8062
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
1547 self.assertEqual(f.headers["Content-Security-Policy"], "script-src 'none'")
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1548 print(f.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1549
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1550 def test_new_file_via_rest(self):
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1551
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1552 session = requests.Session()
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1553 session.auth = ('admin', 'sekrit')
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1554
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1555 url = self.url_base() + '/rest/data/'
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1556 fname = 'a-bigger-testfile'
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1557 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
1558 c = dict (content = r'xyzzy')
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1559 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
1560 headers = {'x-requested-with': "rest",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1561 'Origin': self.tracker_web_base}
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1562 )
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1563
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1564 # was a 500 before fix for issue2551178
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1565 self.assertEqual(r.status_code, 201)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1566 # just compare the path leave off the number
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1567 self.assertIn(self.tracker_web_base + '/rest/data/file/',
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1568 r.headers["location"])
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1569 json_dict = json.loads(r.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1570 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
1571
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1572 # download file and verify content
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1573 r = session.get(r.headers["location"] +'/content',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1574 headers = {'x-requested-with': "rest",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1575 'Origin': self.tracker_web_base}
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1576 )
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1577 json_dict = json.loads(r.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1578 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
1579 print(r.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1580
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1581 # 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
1582 session.auth = None
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1583 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
1584 headers = {'x-requested-with': "rest",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1585 'Origin': self.tracker_web_base}
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1586 )
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1587 self.assertEqual(r.status_code, 403)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1588
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1589 # get session variable from web form login
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1590 # and use it to upload file
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1591 session, f = self.create_login_session()
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1592 # 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
1593 self.assertIn('Hello, admin', f.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1594
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1595 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
1596 headers = {'x-requested-with': "rest",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1597 'Origin': self.tracker_web_base}
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1598 )
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1599 self.assertEqual(r.status_code, 201)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1600 print(r.status_code)
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1601
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1602 def test_fts(self):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1603 f = requests.get(self.url_base() + "?@search_text=RESULT")
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1604 self.assertIn("foo bar", f.text)
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1605
7909
80cf6098ea65 issue2551334 - Get test suite to pass using windows python
John Rouillard <rouilj@ieee.org>
parents: 7819
diff changeset
1606 @skip_requests
7819
0fe2b9f6e19f issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents: 7816
diff changeset
1607 class TestFeatureFlagCacheTrackerOff(BaseTestCases, WsgiSetup):
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1608 """Class to run all test in BaseTestCases with the cache_tracker
7819
0fe2b9f6e19f issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents: 7816
diff changeset
1609 feature flag disabled when starting the wsgi server
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1610 """
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1611 def create_app(self):
7819
0fe2b9f6e19f issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents: 7816
diff changeset
1612 '''The wsgi app to start with feature flag disabled'''
0fe2b9f6e19f issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents: 7816
diff changeset
1613 ff = { "cache_tracker": False }
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1614 if _py3:
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1615 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
1616 else:
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1617 # 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
1618 # 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
1619 return RequestDispatcher(self.dirname, feature_flags=ff)
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1620
7577
0abc225864d1 only run TestPostgresWsgiServer if ostgresl is available.
John Rouillard <rouilj@ieee.org>
parents: 7557
diff changeset
1621 @skip_postgresql
7909
80cf6098ea65 issue2551334 - Get test suite to pass using windows python
John Rouillard <rouilj@ieee.org>
parents: 7819
diff changeset
1622 @skip_requests
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1623 class TestPostgresWsgiServer(BaseTestCases, WsgiSetup):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1624 """Class to run all test in BaseTestCases with the cache_tracker
7819
0fe2b9f6e19f issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents: 7816
diff changeset
1625 feature enabled when starting the wsgi server
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1626 """
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1627
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1628 backend = 'postgresql'
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1629
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1630 @classmethod
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1631 def setup_class(cls):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1632 '''All tests in this class use the same roundup instance.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1633 This instance persists across all tests.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1634 Create the tracker dir here so that it is ready for the
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1635 create_app() method to be called.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1636
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1637 cribbed from WsgiSetup::setup_class
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1638 '''
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1639
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1640 # tests in this class.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1641 # set up and open a tracker
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1642 cls.instance = db_test_base.setupTracker(cls.dirname, cls.backend)
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1643
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1644 # open the database
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1645 cls.db = cls.instance.open('admin')
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1646
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1647 # add a user without edit access for status.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1648 cls.db.user.create(username="fred", roles='User',
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1649 password=password.Password('sekrit'), address='fred@example.com')
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1650
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1651 # set the url the test instance will run at.
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1652 cls.db.config['TRACKER_WEB'] = cls.tracker_web
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1653 # set up mailhost so errors get reported to debuging capture file
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1654 cls.db.config.MAILHOST = "localhost"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1655 cls.db.config.MAIL_HOST = "localhost"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1656 cls.db.config.MAIL_DEBUG = "../_test_tracker_mail.log"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1657
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1658 # added to enable csrf forgeries/CORS to be tested
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1659 cls.db.config.WEB_CSRF_ENFORCE_HEADER_ORIGIN = "required"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1660 cls.db.config.WEB_ALLOWED_API_ORIGINS = "https://client.com"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1661 cls.db.config['WEB_CSRF_ENFORCE_HEADER_X-REQUESTED-WITH'] = "required"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1662
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1663 cls.db.config.INDEXER = "native-fts"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1664
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1665 # disable web login rate limiting. The fast rate of tests
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1666 # causes them to trip the rate limit and fail.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1667 cls.db.config.WEB_LOGIN_ATTEMPTS_MIN = 0
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1668
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1669 # enable static precompressed files
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1670 cls.db.config.WEB_USE_PRECOMPRESSED_FILES = 1
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1671
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1672 cls.db.config.save()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1673
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1674 cls.db.commit()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1675 cls.db.close()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1676
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1677 # re-open the database to get the updated INDEXER
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1678 cls.db = cls.instance.open('admin')
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1679
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1680 result = cls.db.issue.create(title="foo bar RESULT")
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1681
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1682 # add a message to allow retrieval
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1683 result = cls.db.msg.create(author = "1",
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1684 content = "a message foo bar RESULT",
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1685 date=rdate.Date(),
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1686 messageid="test-msg-id")
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1687
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1688 cls.db.commit()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1689 cls.db.close()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1690
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1691 # Force locale config to find locales in checkout not in
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1692 # installed directories
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1693 cls.backup_domain = i18n.DOMAIN
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1694 cls.backup_locale_dirs = i18n.LOCALE_DIRS
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1695 i18n.LOCALE_DIRS = ['locale']
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1696 i18n.DOMAIN = ''
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1697
6918
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1698 @classmethod
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1699 def tearDownClass(cls):
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1700 # cleanup
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1701 cls.instance.backend.db_nuke(cls.db.config)
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1702
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1703 def test_native_fts(self):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1704 self.assertIn("postgresql_fts", str(self.db.indexer))
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1705
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1706 # use a ts: search as well so it only works on postgres_fts indexer
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1707 f = requests.get(self.url_base() + "?@search_text=ts:RESULT")
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1708 self.assertIn("foo bar RESULT", f.text)
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1709
7909
80cf6098ea65 issue2551334 - Get test suite to pass using windows python
John Rouillard <rouilj@ieee.org>
parents: 7819
diff changeset
1710 @skip_requests
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1711 class TestApiRateLogin(WsgiSetup):
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1712 """Class to run test in BaseTestCases with the cache_tracker
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1713 feature flag enabled when starting the wsgi server
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1714 """
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1715
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1716 backend = 'sqlite'
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1717
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1718 @classmethod
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1719 def setup_class(cls):
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1720 '''All tests in this class use the same roundup instance.
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1721 This instance persists across all tests.
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1722 Create the tracker dir here so that it is ready for the
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1723 create_app() method to be called.
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1724
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1725 cribbed from WsgiSetup::setup_class
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1726 '''
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1727
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1728 # tests in this class.
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1729 # set up and open a tracker
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1730 cls.instance = db_test_base.setupTracker(cls.dirname, cls.backend)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1731
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1732 # open the database
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1733 cls.db = cls.instance.open('admin')
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1734
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1735 # add a user without edit access for status.
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1736 cls.db.user.create(username="fred", roles='User',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1737 password=password.Password('sekrit'), address='fred@example.com')
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1738
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1739 # set the url the test instance will run at.
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1740 cls.db.config['TRACKER_WEB'] = cls.tracker_web
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1741 # set up mailhost so errors get reported to debuging capture file
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1742 cls.db.config.MAILHOST = "localhost"
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1743 cls.db.config.MAIL_HOST = "localhost"
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1744 cls.db.config.MAIL_DEBUG = "../_test_tracker_mail.log"
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1745
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1746 # added to enable csrf forgeries/CORS to be tested
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1747 cls.db.config.WEB_CSRF_ENFORCE_HEADER_ORIGIN = "required"
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1748 cls.db.config.WEB_ALLOWED_API_ORIGINS = "https://client.com"
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1749 cls.db.config['WEB_CSRF_ENFORCE_HEADER_X-REQUESTED-WITH'] = "required"
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1750
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1751 # set login failure api limits
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1752 cls.db.config.WEB_API_FAILED_LOGIN_LIMIT = 4
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1753 cls.db.config.WEB_API_FAILED_LOGIN_INTERVAL_IN_SEC = 12
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1754
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1755 # enable static precompressed files
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1756 cls.db.config.WEB_USE_PRECOMPRESSED_FILES = 1
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1757
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1758 cls.db.config.save()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1759
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1760 cls.db.commit()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1761 cls.db.close()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1762
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1763 # re-open the database to get the updated INDEXER
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1764 cls.db = cls.instance.open('admin')
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1765
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1766 result = cls.db.issue.create(title="foo bar RESULT")
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1767
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1768 # add a message to allow retrieval
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1769 result = cls.db.msg.create(author = "1",
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1770 content = "a message foo bar RESULT",
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1771 date=rdate.Date(),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1772 messageid="test-msg-id")
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1773
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1774 cls.db.commit()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1775 cls.db.close()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1776
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1777 # Force locale config to find locales in checkout not in
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1778 # installed directories
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1779 cls.backup_domain = i18n.DOMAIN
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1780 cls.backup_locale_dirs = i18n.LOCALE_DIRS
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1781 i18n.LOCALE_DIRS = ['locale']
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1782 i18n.DOMAIN = ''
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1783
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1784 def test_rest_login_RateLimit(self):
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1785 """login rate limit applies to api endpoints. Only failure
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1786 logins count though. So log in 10 times in a row
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1787 to verify that valid username/passwords aren't limited.
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1788 """
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1789 # On windows, using localhost in the URL with requests
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1790 # tries an IPv6 address first. This causes a request to
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1791 # take 2 seconds which is too slow to ever trip the rate
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1792 # limit. So replace localhost with 127.0.0.1 that does an
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1793 # IPv4 request only.
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1794 url_base_numeric = self.url_base()
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1795 url_base_numeric = url_base_numeric.replace('localhost','127.0.0.1')
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1796
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1797 # verify that valid logins are not counted against the limit.
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1798 for i in range(10):
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1799 # use basic auth for rest endpoint
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1800
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1801 request_headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1802 'Origin': self.tracker_web_base,}
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1803 f = requests.options(url_base_numeric + '/rest/data',
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1804 auth=('admin', 'sekrit'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1805 headers=request_headers
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1806 )
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1807 #print(f.status_code)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1808 #print(f.headers)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1809 #print(f.text)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1810
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1811 self.assertEqual(f.status_code, 204)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1812
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1813 # Save time. check headers only for final response.
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1814 headers_expected = {
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1815 'Access-Control-Allow-Origin': request_headers['Origin'],
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1816 'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-Requested-With, X-HTTP-Method-Override',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1817 'Allow': 'OPTIONS, GET',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1818 'Access-Control-Allow-Methods': 'OPTIONS, GET',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1819 'Access-Control-Allow-Credentials': 'true',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1820 }
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1821
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1822 for header in headers_expected.keys():
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1823 self.assertEqual(f.headers[header],
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1824 headers_expected[header])
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1825
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1826
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1827 # first 3 logins should report 401 then the rest should report
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1828 # 429
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1829 headers_expected = {
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1830 'Content-Type': 'text/plain'
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1831 }
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1832
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1833 for i in range(10):
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1834 # use basic auth for rest endpoint
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1835
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1836 f = requests.options(url_base_numeric + '/rest/data',
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1837 auth=('admin', 'ekrit'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1838 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1839 'Origin': self.tracker_web_base,}
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1840 )
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1841
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1842 if (i < 4): # assuming limit is 4.
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1843 for header in headers_expected.keys():
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1844 self.assertEqual(f.headers[header],
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1845 headers_expected[header])
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1846 self.assertEqual(f.status_code, 401)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1847 else:
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1848 self.assertEqual(f.status_code, 429)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1849
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1850 headers_expected = { 'Content-Type': 'text/plain',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1851 'X-RateLimit-Limit': '4',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1852 'X-RateLimit-Limit-Period': '12',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1853 'X-RateLimit-Remaining': '0',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1854 'Retry-After': '3',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1855 'Access-Control-Expose-Headers':
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1856 ('X-RateLimit-Limit, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1857 'X-RateLimit-Remaining, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1858 'X-RateLimit-Reset, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1859 'X-RateLimit-Limit-Period, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1860 'Retry-After'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1861 'Content-Length': '50'}
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1862
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1863 for header in headers_expected.keys():
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1864 self.assertEqual(f.headers[header],
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1865 headers_expected[header])
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1866
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1867 self.assertAlmostEqual(float(f.headers['X-RateLimit-Reset']),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1868 10.0, delta=3,
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1869 msg="limit reset not within 3 seconds of 10")
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1870
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1871 # test lockout this is a valid login but should be rejected
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1872 # with 429.
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1873 f = requests.options(url_base_numeric + '/rest/data',
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1874 auth=('admin', 'sekrit'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1875 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1876 'Origin': self.tracker_web_base,}
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1877 )
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1878 self.assertEqual(f.status_code, 429)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1879
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1880 for header in headers_expected.keys():
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1881 self.assertEqual(f.headers[header],
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1882 headers_expected[header])
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1883
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1884
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1885 sleep(4)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1886 # slept long enough to get a login slot. Should work with
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1887 # 200 return code.
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1888 f = requests.get(url_base_numeric + '/rest/data',
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1889 auth=('admin', 'sekrit'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1890 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1891 'Origin': self.tracker_web_base,}
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1892 )
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1893 self.assertEqual(f.status_code, 200)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1894 print(i, f.status_code)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1895 print(f.headers)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1896 print(f.text)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1897
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1898 headers_expected = {
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1899 'Content-Type': 'application/json',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1900 'Vary': 'Origin, Accept-Encoding',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1901 'Access-Control-Expose-Headers':
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1902 ( 'X-RateLimit-Limit, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1903 'X-RateLimit-Remaining, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1904 'X-RateLimit-Reset, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1905 'X-RateLimit-Limit-Period, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1906 'Retry-After, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1907 'Sunset, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1908 'Allow'),
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1909 'Access-Control-Allow-Origin': self.tracker_web_base,
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1910 'Access-Control-Allow-Credentials': 'true',
7557
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1911 'Allow': 'OPTIONS, GET, POST, PUT, DELETE, PATCH'
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1912 }
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1913
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1914 for header in headers_expected.keys():
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1915 self.assertEqual(f.headers[header],
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1916 headers_expected[header])
7557
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1917
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1918 expected_data = {
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1919 "status": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1920 "link": self.tracker_web_base + "/rest/data/status"
7557
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1921 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1922 "keyword": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1923 "link": self.tracker_web_base + "/rest/data/keyword"
7557
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1924 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1925 "priority": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1926 "link": self.tracker_web_base + "/rest/data/priority"
7557
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1927 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1928 "user": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1929 "link": self.tracker_web_base + "/rest/data/user"
7557
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1930 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1931 "file": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1932 "link": self.tracker_web_base + "/rest/data/file"
7557
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1933 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1934 "msg": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1935 "link": self.tracker_web_base + "/rest/data/msg"
7557
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1936 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1937 "query": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1938 "link": self.tracker_web_base + "/rest/data/query"
7557
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1939 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1940 "issue": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1941 "link": self.tracker_web_base + "/rest/data/issue"
7557
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1942 }
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1943 }
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1944
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1945 json_dict = json.loads(f.text)
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1946 self.assertEqual(json_dict['data'], expected_data)

Roundup Issue Tracker: http://roundup-tracker.org/