annotate test/test_liveserver.py @ 8313:3614cd64f4c4

build: issue2551397: remove support for python 3.6 3.7 ci build works. Make changes to make 3.7 current minimum supported version. Also removed some references that apply only when running under 2.7.
author John Rouillard <rouilj@ieee.org>
date Sun, 11 May 2025 17:50:44 -0400
parents 51f277ed8adc
children 0663a7bcef6c
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")
8290
51f277ed8adc test: fix fuzz test
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
237 @example("@verbose", "0 #stuff")
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
238 @settings(max_examples=_max_examples,
8270
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
239 deadline=fuzz_deadline) # in ms
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
240 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
241 """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
242 same code for all *.
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
243 """
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
244 session, _response = self.create_login_session()
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
245 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
246 query = '%s=%s' % (param, value)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
247 f = session.get(url, params=query)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
248 try:
8290
51f277ed8adc test: fix fuzz test
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
249 # test case '0 #', '0#', '12345#stuff' '12345&stuff'
51f277ed8adc test: fix fuzz test
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
250 match = re.match(r'(^[0-9]*\s*)[#&]', value)
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
251 if match is not None:
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
252 value = match[1]
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
253 elif int(value) >= 0:
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
254 self.assertEqual(f.status_code, 200)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
255 except ValueError:
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
256 # 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
257 if value[0] in ('#', '&'):
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
258 self.assertEqual(f.status_code, 200)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
259 else:
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
260 # invalid value for param
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
261 self.assertEqual(f.status_code, 400)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
262
8215
1b15f635ada1 fix(web) issue2551382 - handle crash in request call in test
John Rouillard <rouilj@ieee.org>
parents: 8214
diff changeset
263 @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
264 @example("@verbose", "10#")
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
265 @example("@verbose", u'Ø\U000dd990')
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
266 @settings(max_examples=_max_examples,
8270
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
267 deadline=fuzz_deadline) # in ms
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
268 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
269 """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
270 """
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
271 session, _response = self.create_login_session()
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
272 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
273 query = '%s=%s' % (param, value)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
274 f = session.get(url, params=query)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
275 try:
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
276 # 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
277 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
278 if match is not None:
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
279 value = match[1]
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
280 elif int(value) >= 0:
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
281 self.assertEqual(f.status_code, 200)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
282 except ValueError:
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
283 # 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
284 if value[0] in ('#', '&'):
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
285 self.assertEqual(f.status_code, 200)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
286 else:
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
287 # invalid value for param
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
288 self.assertEqual(f.status_code, 400)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
289
8270
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
290 @skip_hypothesis
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
291 class FuzzTestSettingData(WsgiSetup, ClientSetup):
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
292
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
293 _max_examples = 100
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
294
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
295 # 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
296 # 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
297 # 10 seconds.
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
298 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
299
8218
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
300 @given(emails())
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
301 @settings(max_examples=_max_examples,
8270
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
302 deadline=fuzz_deadline) # in ms
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
303 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
304 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
305 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
306 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
307 "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
308 "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
309 "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
310 "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
311 }
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
312
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
313 #--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
314
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
315 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
316 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
317 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
318
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
319 payload = {'data': email}
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
320 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
321
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
322 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
323
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
324 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
325 # 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
326 # 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
327 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
328 else:
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
329 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
330 email)
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
331
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
332
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
333 @skip_requests
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
334 class BaseTestCases(WsgiSetup, ClientSetup):
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
335 """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
336 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
337 """
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
338
8168
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
339 def test_cookie_attributes(self):
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
340 session, _response = self.create_login_session()
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
341
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
342 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
343 cookie = cookie_box['roundup_session_Roundupissuetracker']
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
344
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
345 # 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
346 # 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
347 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
348 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
349 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
350 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
351
8268
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
352 def test_bad_post_data(self):
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
353 """issue2551387 - bad post data causes TypeError: not indexable
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
354 """
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
355 session, _response = self.create_login_session()
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
356
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
357 h = {"Content-Type": "text/plain"}
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
358 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
359 print(response.status_code)
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
360 print(response.headers)
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
361 print(response.text)
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
362 self.assertEqual(response.status_code, 200)
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
363
7937
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
364 def test_query(self):
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
365 current_user_query = (
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
366 "@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
367 "@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
368 "@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
369 "@dispname=Test1")
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
370
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
371 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
372 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
373
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
374 # 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
375 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
376 # find title of issue 1
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
377 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
378 # 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
379 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
380 # logout
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
381 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
382
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
383
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
384 # set up for another user
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
385 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
386 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
387
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
388 # verify the query has run
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
389 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
390 # 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
391 # of the footer is missing.
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
392 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
393
8241
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
394 def test_broken_query(self):
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
395 # query link item
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
396 current_user_query = (
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
397 "@columns=title,id,activity,status,assignedto&"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
398 "@sort=activity&@group=priority&@filter=creator&"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
399 "@pagesize=50&@startwith=0&creator=-2&"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
400 "@dispname=Test1")
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
401
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
402 session, _response = self.create_login_session()
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
403 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
404
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
405 # 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
406 # print(f.text)
8242
393dfc750d8b test: missed change in error wording.
John Rouillard <rouilj@ieee.org>
parents: 8241
diff changeset
407 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
408 '[-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
409 'too few arguments.',
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
410 f.text)
8253
cae1bbf2536b fix: issue2551374 - Add error handling for filter expressions. Fix UI
John Rouillard <rouilj@ieee.org>
parents: 8248
diff changeset
411 self.assertEqual(f.status_code, 200)
8241
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
412
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
413 def test_broken_multiink_query(self):
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
414 # query multilink item
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
415 current_user_query = (
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
416 "@columns=title,id,activity,status,assignedto"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
417 "&keyword=-3&@sort=activity&@group=priority"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
418 "&@pagesize=50&@startwith=0&@template=index|search"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
419 "&@action=search")
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
420 session, _response = self.create_login_session()
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
421 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
422
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
423 # 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
424 print(f.text)
8242
393dfc750d8b test: missed change in error wording.
John Rouillard <rouilj@ieee.org>
parents: 8241
diff changeset
425 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
426 '[-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
427 'too few arguments.',
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
428 f.text)
8253
cae1bbf2536b fix: issue2551374 - Add error handling for filter expressions. Fix UI
John Rouillard <rouilj@ieee.org>
parents: 8248
diff changeset
429 self.assertEqual(f.status_code, 200)
8241
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
430
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
431 def test_start_page(self):
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
432 """ 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
433 """
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
434 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
435 self.assertEqual(f.status_code, 200)
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
436 self.assertTrue(b'Roundup' in f.content)
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
437 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
438
6640
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
439 def test_start_in_german(self):
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
440 """ 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
441 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
442 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
443
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
444 use:
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
445 url parameter @language
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
446 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
447 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
448 """
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
449
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
450 # test url parameter
6640
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
451 f = requests.get(self.url_base() + "?@language=de")
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
452 self.assertEqual(f.status_code, 200)
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
453 print(f.content)
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
454 self.assertTrue(b'Roundup' in f.content)
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
455 self.assertTrue(b'Aufgabenliste' in f.content)
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
456 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
457
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
458 # 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
459 bluemonster = f.cookies
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
460 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
461 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
462 print(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'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
464 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
465 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
466
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
467 # 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
468 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
469 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
470 print(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.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
472 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
473 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
474 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
475 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
476
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
477 # 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
478 alh = {"Accept-Language":
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
479 "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
480 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
481 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
482 print(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'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
484 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
485 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
486
8062
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
487 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
488 """ 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
489 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
490 """
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
491 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
492 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
493 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
494 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
495 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
496 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
497
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
498 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
499 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
500 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
501 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
502 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
503 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
504
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
505 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
506 """ 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
507 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
508 Range: 10-20
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
509 Range: 10-
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
510
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
511 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
512 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
513 Range: -10
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
514
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
515 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
516
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
517 """
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
518
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
519 # get whole file uncompressed. Extract content length and etag
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
520 # for future use
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
521 f = requests.get(self.url_base() + "/@@file/style.css",
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
522 headers = {"Accept-Encoding": "identity"})
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
523 # store etag for condition range testing
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
524 etag = f.headers['etag']
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
525 expected_length = f.headers['content-length']
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
526
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
527 # 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
528 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
529 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
530 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
531 self.assertEqual(f.content, b"/* main pag")
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
532 # 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
533 self.assertEqual(f.headers['content-length'], '11')
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
534 self.assertEqual(f.headers['content-range'],
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
535 "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
536
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
537 # 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
538 hdrs = {"Range": "bytes=10-20"}
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
539 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
540 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
541 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
542 # 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
543 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
544 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
545 "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
546
7816
1b5daee24dc7 test: fix test for invalid etag in if-range.
John Rouillard <rouilj@ieee.org>
parents: 7578
diff changeset
547 # 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
548 hdrs = {"Range": "bytes=11-"}
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
549 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
550 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
551 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
552 "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
553 expected_length))
6978
3c4047cdc77a cange type or arg to assertIn from string to byte.
John Rouillard <rouilj@ieee.org>
parents: 6977
diff changeset
554 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
555
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
556 # 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
557 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
558 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
559 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
560 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
561 self.assertEqual(f.content, b"/* main pag")
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
562 # 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
563 self.assertEqual(f.headers['content-length'], '11')
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
564 self.assertEqual(f.headers['content-range'],
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
565 "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
566
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
567 # 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
568 hdrs['If-Range'] = etag[2:] # bad tag
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
569 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
570 self.assertEqual(f.status_code, 200)
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
571 # not checking content length since it could be compressed
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
572 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
573
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
574 # 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
575 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
576 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
577 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
578 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
579 # 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
580 self.assertEqual(len(f.content), int(expected_length))
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
581 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
582
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
583 # 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
584 # 200 code
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
585 hdrs['Range'] = "bytes=0-99999" # too large
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
586 hdrs['If-Range'] = etag # any tag works
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
587 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
588 self.assertEqual(f.status_code, 200)
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
589 # not checking content length since it could be compressed
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
590 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
591
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
592 # 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
593 hdrs['Range'] = "bytes=0-99999" # too large
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
594 del(hdrs['If-Range'])
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
595 print(hdrs)
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
596 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
597 self.assertEqual(f.status_code, 416)
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
598 self.assertEqual(f.headers['content-range'],
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
599 "bytes */%s"%expected_length)
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
600
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
601 # invalid range multiple ranges
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
602 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
603 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
604 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
605 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
606 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
607 '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
608 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
609
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
610 # 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
611 hdrs['Range'] = "bytes=1"
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
612 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
613 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
614 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
615 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
616 '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
617 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
618
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
619 # 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
620 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
621 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
622 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
623 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
624 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
625 '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
626 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
627
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
628 # 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
629 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
630 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
631 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
632 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
633 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
634 '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
635 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
636
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
637 # 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
638 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
639 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
640 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
641 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
642 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
643 '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
644 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
645
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
646 # range is invalid #2 < #1
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
647 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
648 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
649 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
650 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
651 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
652 '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
653 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
654
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
655 # 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
656 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
657 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
658 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
659 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
660 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
661 '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
662 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
663
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
664 # 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
665 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
666 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
667 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
668 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
669 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
670 '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
671 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
672
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
673 # range is unsupported units
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
674 hdrs['Range'] = "badunits=1-11"
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
675 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
676 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
677 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
678 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
679 '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
680 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
681
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
682
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
683 # valid range, invalid file
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
684 hdrs['Range'] = "bytes=0-11"
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
685 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
686 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
687 headers=hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
688 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
689 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
690 '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
691
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
692 def test_rest_preflight_collection(self):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
693 # no auth for rest csrf preflight
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
694 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
695 headers = {'content-type': "",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
696 'x-requested-with': "rest",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
697 'Access-Control-Request-Headers':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
698 "x-requested-with",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
699 'Access-Control-Request-Method': "PUT",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
700 'Origin': "https://client.com"})
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
701 print(f.status_code)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
702 print(f.headers)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
703 print(f.content)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
704
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
705 self.assertEqual(f.status_code, 204)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
706
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
707 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
708 '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
709 'Allow': 'OPTIONS, GET, POST',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
710 'Access-Control-Allow-Methods': 'OPTIONS, GET, POST',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
711 'Access-Control-Allow-Credentials': 'true',
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
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
714 # 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
715 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
716 f.headers.items() if key in expected },
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
717 expected)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
718
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
719 # use invalid Origin
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
720 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
721 headers = {'content-type': "application/json",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
722 'x-requested-with': "rest",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
723 'Access-Control-Request-Headers':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
724 "x-requested-with",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
725 'Access-Control-Request-Method': "PUT",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
726 'Origin': "ZZZ"})
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
727
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
728 self.assertEqual(f.status_code, 400)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
729
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
730 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
731 'allowed to use Rest Interface." } }'
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
732 self.assertEqual(b2s(f.content), expected)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
733
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
734 # Test when Origin is not sent.
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
735 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
736 headers = {'content-type': "application/json",
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
737 'x-requested-with': "rest",
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
738 'Access-Control-Request-Headers':
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
739 "x-requested-with",
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
740 'Access-Control-Request-Method': "PUT",})
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
741
8265
35beff316883 fix(api): issue2551384. Verify REST authorization earlier
John Rouillard <rouilj@ieee.org>
parents: 8253
diff changeset
742 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
743
8265
35beff316883 fix(api): issue2551384. Verify REST authorization earlier
John Rouillard <rouilj@ieee.org>
parents: 8253
diff changeset
744 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
745 self.assertEqual(b2s(f.content), expected)
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
746
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
747
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
748 def test_rest_invalid_method_collection(self):
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
749 # use basic auth for rest endpoint
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
750 f = requests.put(self.url_base() + '/rest/data/user',
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
751 auth=('admin', 'sekrit'),
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
752 headers = {'content-type': "",
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
753 'X-Requested-With': "rest",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
754 'Origin': "https://client.com"})
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
755 print(f.status_code)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
756 print(f.headers)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
757 print(f.content)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
758
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
759 self.assertEqual(f.status_code, 405)
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
760 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
761 'Access-Control-Allow-Credentials': 'true',
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
762 'Allow': 'DELETE, GET, OPTIONS, POST',
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
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
765 print(f.headers)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
766 # use dict comprehension to remove fields like date,
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
767 # content-length etc. from f.headers.
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
768 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
769
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
770 content = json.loads(f.content)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
771
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
772 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
773 self.assertEqual(exp_content, content['error']['msg'])
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
774
6386
2a2da73e1e26 Remove Connection: close header for 501 error handling rest
John Rouillard <rouilj@ieee.org>
parents: 6385
diff changeset
775 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
776 """ 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
777
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
778 # 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
779 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
780 headers = {'content-type': ""})
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
781 # 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
782 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
783
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
784 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
785 # 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
786 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
787 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
788 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
789 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
790 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
791 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
792 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
793
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
794 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
795 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
796 '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
797 'Allow': 'OPTIONS, GET',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
798 'Access-Control-Allow-Credentials': 'true',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
799 'Access-Control-Allow-Methods': 'OPTIONS, GET',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
800 '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
801 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
802
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
803 # 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
804 # 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
805 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
806
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
807 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
808 # 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
809 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
810 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
811 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
812 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
813 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
814 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
815 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
816
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
817 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
818 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
819 '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
820 'Allow': 'OPTIONS, GET',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
821 'Access-Control-Allow-Methods': 'OPTIONS, GET',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
822 '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
823 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
824
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
825 # 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
826 # 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
827 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
828
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
829 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
830 # 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
831 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
832 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
833 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
834 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
835 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
836 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
837 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
838
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
839 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
840 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
841 '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
842 'Allow': 'OPTIONS, GET, POST',
6526
3c8322e3fe25 Fix test and remove pdb invocation.
John Rouillard <rouilj@ieee.org>
parents: 6525
diff changeset
843 '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
844 '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
845 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
846
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
847 # 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
848 # 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
849 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
850
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
851
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
852 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
853
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
854 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
855 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
856 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
857 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
858 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
859 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
860 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
861
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
862 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
863 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
864 '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
865 'Allow': 'OPTIONS, GET, PUT, DELETE, PATCH',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
866 '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
867 '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
868 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
869
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
870 # 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
871 # 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
872 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
873
6385
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
874 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
875 # 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
876 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
877 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
878 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
879 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
880 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
881 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
882 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
883
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
884 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
885 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
886 '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
887 'Allow': 'OPTIONS, GET, PUT, DELETE, PATCH',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
888 '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
889 '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
890 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
891
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
892 # 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
893 # 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
894 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
895
6385
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
896 ## test a read only property.
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
897
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
898 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
899 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
900 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
901 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
902 })
6385
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
903 print(f.status_code)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
904 print(f.headers)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
905
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
906 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
907 expected1 = dict(expected)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
908 expected1['Allow'] = 'OPTIONS, GET'
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
909 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
910
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
911 # 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
912 # 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
913 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
914
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
915 ## 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
916 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
917 auth=('admin', 'sekrit'),
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
918 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
919 '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
920 print(f.status_code)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
921 print(f.headers)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
922
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
923 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
924
7983
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
925 def test_rest_endpoint_user_roles(self):
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
926 # use basic auth for rest endpoint
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
927 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
928 auth=('admin', 'sekrit'),
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
929 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
930 'Origin': self.tracker_web_base,
7983
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
931 })
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
932 print(f.status_code)
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
933 print(f.headers)
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
934
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
935 self.assertEqual(f.status_code, 200)
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
936 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
937 'Access-Control-Allow-Credentials': 'true',
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
938 'Allow': 'GET',
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
939 }
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
940 # use dict comprehension to remove fields like date,
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
941 # content-length etc. from f.headers.
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
942 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
943
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
944 content = json.loads(f.content)
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
945
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
946 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
947
8020
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
948 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
949 '''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
950 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
951 multiple values.
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
952 '''
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
953 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
954 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
955 'Accept': '*/*'})
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
956 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
957 print(f.headers)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
958
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
959 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
960 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
961 'Content-Encoding': 'gzip',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
962 'Vary': 'Accept-Encoding',
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
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
965 # 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
966 # 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
967 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
968 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
969 expected)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
970
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
971 # 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
972 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
973 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
974 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
975 '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
976 'Accept': '*/*'})
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
977 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
978 print(f.headers)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
979
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
980 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
981 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
982 'Content-Length': '0',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
983 'ETag': etag,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
984 'Vary': 'Accept-Encoding'
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
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
987 # 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
988 # 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
989 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
990
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
991 # 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
992 # and multiple etags
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
993 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
994
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
995 # 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
996 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
997
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
998 all_etags = (
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
999 '"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
1000 base_etag
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
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1003 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
1004 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
1005 '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
1006 'Accept': '*/*'})
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1007 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
1008 print(f.headers)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1009
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1010 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
1011 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
1012 'Content-Length': '0',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1013 'ETag': base_etag,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1014 'Vary': 'Accept-Encoding'
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
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1017 # 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
1018 # 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
1019 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
1020
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1021
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1022 # 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
1023 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
1024 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
1025 '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
1026 'Accept': '*/*'})
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1027 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
1028 print(f.headers)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1029
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1030 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
1031 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
1032 'ETag': etag,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1033 'Content-Encoding': 'gzip',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1034 'Vary': 'Accept-Encoding',
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
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1037 # 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
1038 # 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
1039 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
1040
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1041 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
1042 ''' 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
1043 if-modified-since timestamps.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1044 '''
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1045 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
1046
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1047 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
1048 headers = { 'Accept-Encoding': 'gzip, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1049 '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
1050 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1051 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1052 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1053
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1054 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
1055 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
1056 'Content-Encoding': 'gzip',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1057 'Vary': 'Accept-Encoding',
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
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1060 # 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
1061 # etag etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1062 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
1063
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1064 # now use today's date
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1065 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
1066 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
1067 headers = { 'Accept-Encoding': 'gzip, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1068 '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
1069 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1070 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1071 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1072
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1073 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
1074 expected = { 'Vary': 'Accept-Encoding',
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1075 'Content-Length': '0',
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
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1078 # 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
1079 # etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1080 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
1081
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1082
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1083 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
1084 for tail in [
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1085 '/issue1', # normal url
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1086 '/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
1087 '/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
1088 ]:
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1089 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
1090 headers = { 'Accept-Encoding': 'gzip',
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1091 'Accept': '*/*'})
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1092
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1093 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
1094 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
1095
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1096 def test_load_msg1(self):
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1097 # 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
1098 f = requests.get(self.url_base() + '/msg0001',
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1099 headers = { 'Accept-Encoding': 'gzip',
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1100 'Accept': '*/*'})
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1101
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1102 self.assertIn(b'foo bar RESULT', f.content)
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1103 self.assertEqual(f.status_code, 200)
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1104
6749
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1105 def test_bad_path(self):
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1106 f = requests.get(self.url_base() + '/_bad>',
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1107 headers = { 'Accept-Encoding': 'gzip, foo',
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1108 'Accept': '*/*'})
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1109
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1110 # test that returned text is encoded.
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1111 self.assertEqual(f.content, b'Not found: _bad&gt;')
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1112 self.assertEqual(f.status_code, 404)
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1113
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1114 def test_compression_gzipfile(self):
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1115 '''Get the compressed dummy file'''
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1116
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1117 # 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
1118 # 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
1119 # that I get the compressed one.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1120 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
1121 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
1122
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1123 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
1124 bytes_written = f.write(test_text)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1125
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1126 self.assertEqual(bytes_written, 30)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1127
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1128 # test file x-fer
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1129 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
1130 headers = { 'Accept-Encoding': 'gzip, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1131 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1132 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1133 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1134
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1135 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
1136 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
1137 'Content-Encoding': 'gzip',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1138 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1139 'Content-Length': '69',
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
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1142 # 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
1143 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1144 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
1145 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
1146 expected)
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
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1149 # 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
1150 self.assertEqual(f.content, test_text)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1151
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1152 '''# 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
1153
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1154 # 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
1155 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
1156 headers = { 'Accept-Encoding': 'br, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1157 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1158 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1159 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1160
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1161 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
1162 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
1163 'Content-Encoding': 'br',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1164 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1165 'Content-Length': '960',
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
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1168 # 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
1169 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1170 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
1171 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
1172 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1173
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1174 try:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1175 from urllib3.response import BrotliDecoder
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1176 # 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
1177 data = f.content
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1178 except ImportError:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1179 # I need to decode
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1180 data = brotli.decompress(f.content)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1181
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1182 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
1183 '''
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1184
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1185 # 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
1186 # 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
1187 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
1188
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1189 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
1190 headers = { 'Accept-Encoding': 'gzip, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1191 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1192 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1193 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1194
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1195 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
1196 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
1197 'Content-Encoding': 'gzip',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1198 'Vary': 'Accept-Encoding',
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
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1201 # 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
1202 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1203 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
1204 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
1205 expected)
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
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1208 # 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
1209 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
1210
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1211 # cleanup
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1212 os.remove(gzfile)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1213
6541
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1214 def test_compression_none_etag(self):
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1215 # use basic auth for rest endpoint
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1216 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
1217 auth=('admin', 'sekrit'),
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1218 headers = {'content-type': "",
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1219 'Accept-Encoding': "",
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1220 'Accept': '*/*'})
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1221 print(f.status_code)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1222 print(f.headers)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1223
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1224 self.assertEqual(f.status_code, 200)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1225 expected = { 'Content-Type': 'application/json',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1226 'Access-Control-Allow-Credentials': 'true',
6541
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1227 '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
1228 }
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1229
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1230 content_str = '''{ "data": {
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1231 "id": "1",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1232 "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
1233 "data": "admin"
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1234 }
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1235 }''' % self.tracker_web_base
6541
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1236 content = json.loads(content_str)
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
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1239 if (type("") == type(f.content)):
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1240 json_dict = json.loads(f.content)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1241 else:
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1242 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
1243
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1244 # 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
1245 del(json_dict['data']['@etag'])
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1246
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1247 # 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
1248 # just skip comparing it.
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1249 del(json_dict['data']['type'])
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1250
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1251 self.assertDictEqual(json_dict, content)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1252
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1253 # 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
1254 print(f.headers['ETag'])
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1255 with self.assertRaises(ValueError):
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1256 f.headers['ETag'].index('-')
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1257
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1258 # 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
1259 # content-length etc. from f.headers.
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1260 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
1261
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1262
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1263 def test_compression_gzip(self, method='gzip'):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1264 if method == 'gzip':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1265 decompressor = None
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1266 elif method == 'br':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1267 decompressor = brotli.decompress
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1268 elif method == 'zstd':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1269 decompressor = zstd.decompress
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1270
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1271 # use basic auth for rest endpoint
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1272 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
1273 auth=('admin', 'sekrit'),
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1274 headers = {'content-type': "",
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1275 'Accept-Encoding': '%s, foo'%method,
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1276 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1277 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1278 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1279
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1280 self.assertEqual(f.status_code, 200)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1281 expected = { 'Content-Type': 'application/json',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1282 'Access-Control-Allow-Credentials': 'true',
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1283 '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
1284 'Content-Encoding': method,
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1285 'Vary': 'Origin, Accept-Encoding',
6458
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
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1288 content_str = '''{ "data": {
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1289 "id": "1",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1290 "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
1291 "data": "admin"
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1292 }
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1293 }''' % self.tracker_web_base
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1294 content = json.loads(content_str)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1295
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1296 print(f.content)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1297 print(type(f.content))
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1298
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1299 try:
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1300 if (type("") == type(f.content)):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1301 json_dict = json.loads(f.content)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1302 else:
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1303 json_dict = json.loads(b2s(f.content))
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1304 except (ValueError, UnicodeDecodeError):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1305 # 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
1306 # gzip gets decompressed automatically
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1307 # 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
1308 # UnicodeDecodeError - raised by loads on compressed content
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1309 # python3
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1310 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
1311
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1312 # 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
1313 del(json_dict['data']['@etag'])
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1314
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1315 # 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
1316 # just skip comparing it.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1317 del(json_dict['data']['type'])
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1318
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1319 self.assertDictEqual(json_dict, content)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1320
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1321 # verify that ETag header ends with -<method>
6539
f8df7fed18f6 issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents: 6526
diff changeset
1322 try:
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1323 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
1324 except AttributeError:
f8df7fed18f6 issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents: 6526
diff changeset
1325 # 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
1326 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
1327
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1328 # 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
1329 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1330 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
1331
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1332
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1333 # 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
1334 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
1335 auth=('admin', 'sekrit'),
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1336 headers = {'content-type': "",
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1337 'Accept-Encoding': '%s, foo'%method,
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1338 'Accept': '*/*',
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
1339 'Origin': 'https://client.com'})
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1340 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1341 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1342
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1343 # NOTE: not compressed payload too small
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
1344 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
1345 expected = { 'Content-Type': 'application/json',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1346 'Access-Control-Allow-Credentials': 'true',
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
1347 '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
1348 '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
1349 'Vary': 'Origin'
6458
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
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1352 content = { "error":
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1353 {
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
1354 "status": 400,
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
1355 "msg": "Invalid attribute foo"
6458
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
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1359 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
1360 self.assertDictEqual(json_dict, content)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1361
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1362 # 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
1363 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1364 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
1365
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1366 # test file x-fer
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1367 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
1368 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
1369 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1370 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1371 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1372
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1373 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
1374 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
1375 'Content-Encoding': method,
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1376 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1377 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1378
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1379 # 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
1380 # 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
1381 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
1382 # 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
1383 data = f.content
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1384 else:
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1385 # I need to decode
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1386 data = decompressor(f.content)
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1387
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1388 # check first few bytes.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1389 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
1390
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1391 # 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
1392 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1393 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
1394 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
1395 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1396
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1397 # test file x-fer
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1398 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
1399 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
1400 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1401 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1402 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1403
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1404 self.assertEqual(f.status_code, 200)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1405 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
1406 'Content-Encoding': method,
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1407 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1408 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1409
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1410 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
1411 # 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
1412 data = f.content
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1413 else:
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1414 # I need to decode
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1415 data = decompressor(f.content)
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1416
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1417 # check first few bytes.
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1418 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
1419
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1420 # 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
1421 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1422 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
1423 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
1424 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1425
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1426 @skip_brotli
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1427 def test_compression_br(self):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1428 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
1429
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1430 @skip_zstd
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1431 def test_compression_zstd(self):
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1432 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
1433
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1434 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
1435 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
1436 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
1437 'Accept': '*/*'})
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.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
1439 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
1440
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.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
1442 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
1443
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1444 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
1445 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
1446 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
1447 'Accept': '*/*'})
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.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
1449 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
1450
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.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
1452 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
1453
6813
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1454 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
1455 '''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
1456 sure cookie is removed.
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1457 '''
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1458
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1459 session, f = self.create_login_session()
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1460
6813
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1461 # 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
1462 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
1463 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
1464 session.cookies)
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1465
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1466 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
1467 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
1468
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1469 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
1470 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
1471 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
1472 break
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1473
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1474 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
1475
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1476 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
1477 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
1478
6750
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1479 def test_login_fail_then_succeed(self):
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1480
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1481 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
1482 expect_login_ok=False)
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1483
6750
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1484 # 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
1485 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
1486 self.assertNotIn('<b>Hello, admin</b>', f.text)
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1487
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1488 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
1489 self.assertIn('<b>Hello, admin</b>', f.text)
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1490
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1491 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
1492 """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
1493 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
1494 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
1495 """
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1496 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
1497
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1498 # 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
1499 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
1500 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
1501 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
1502
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1503 # 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
1504 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
1505
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1506 if user == 'admin':
8281
669dfccca898 issue2551391 - checkboxes and radiobutton inputs get wrong id's.
John Rouillard <rouilj@ieee.org>
parents: 8270
diff changeset
1507 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
1508 else:
8281
669dfccca898 issue2551391 - checkboxes and radiobutton inputs get wrong id's.
John Rouillard <rouilj@ieee.org>
parents: 8270
diff changeset
1509 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
1510
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1511 # logout
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1512 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
1513 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
1514
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1515 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
1516 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
1517
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1518 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
1519 session, f = self.create_login_session()
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1520
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1521 # 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
1522 self.assertIn('Hello, admin', f.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1523
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1524 # 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
1525 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
1526 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
1527 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
1528 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
1529
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1530 # 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
1531 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
1532
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1533 # 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
1534 # 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
1535 # 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
1536 # search is working correctly.
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1537 # 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
1538 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
1539
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1540 # 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
1541 # seach for unique filename given to it.
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1542 self.assertIn("test1.txt", f.text)
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1543
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1544 # download file and verify content
6570
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1545 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
1546 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
1547 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
1548 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
1549 print(f.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1550
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1551 def test_new_file_via_rest(self):
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1552
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1553 session = requests.Session()
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1554 session.auth = ('admin', 'sekrit')
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1555
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1556 url = self.url_base() + '/rest/data/'
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1557 fname = 'a-bigger-testfile'
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1558 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
1559 c = dict (content = r'xyzzy')
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1560 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
1561 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
1562 'Origin': self.tracker_web_base}
6567
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
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1565 # was a 500 before fix for issue2551178
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1566 self.assertEqual(r.status_code, 201)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1567 # 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
1568 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
1569 r.headers["location"])
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1570 json_dict = json.loads(r.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1571 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
1572
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1573 # download file and verify content
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1574 r = session.get(r.headers["location"] +'/content',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1575 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
1576 'Origin': self.tracker_web_base}
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1577 )
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1578 json_dict = json.loads(r.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1579 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
1580 print(r.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1581
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1582 # 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
1583 session.auth = None
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1584 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
1585 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
1586 'Origin': self.tracker_web_base}
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1587 )
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1588 self.assertEqual(r.status_code, 403)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1589
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1590 # get session variable from web form login
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1591 # 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
1592 session, f = self.create_login_session()
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1593 # 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
1594 self.assertIn('Hello, admin', f.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1595
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1596 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
1597 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
1598 'Origin': self.tracker_web_base}
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1599 )
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1600 self.assertEqual(r.status_code, 201)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1601 print(r.status_code)
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1602
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1603 def test_fts(self):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1604 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
1605 self.assertIn("foo bar", f.text)
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1606
7909
80cf6098ea65 issue2551334 - Get test suite to pass using windows python
John Rouillard <rouilj@ieee.org>
parents: 7819
diff changeset
1607 @skip_requests
7819
0fe2b9f6e19f issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents: 7816
diff changeset
1608 class TestFeatureFlagCacheTrackerOff(BaseTestCases, WsgiSetup):
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1609 """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
1610 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
1611 """
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1612 def create_app(self):
7819
0fe2b9f6e19f issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents: 7816
diff changeset
1613 '''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
1614 ff = { "cache_tracker": False }
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1615 if _py3:
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1616 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
1617 else:
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1618 # 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
1619 # 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
1620 return RequestDispatcher(self.dirname, feature_flags=ff)
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1621
7577
0abc225864d1 only run TestPostgresWsgiServer if ostgresl is available.
John Rouillard <rouilj@ieee.org>
parents: 7557
diff changeset
1622 @skip_postgresql
7909
80cf6098ea65 issue2551334 - Get test suite to pass using windows python
John Rouillard <rouilj@ieee.org>
parents: 7819
diff changeset
1623 @skip_requests
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1624 class TestPostgresWsgiServer(BaseTestCases, WsgiSetup):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1625 """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
1626 feature enabled when starting the wsgi server
6915
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
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1629 backend = 'postgresql'
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1630
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1631 @classmethod
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1632 def setup_class(cls):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1633 '''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
1634 This instance persists across all tests.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1635 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
1636 create_app() method to be called.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1637
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1638 cribbed from WsgiSetup::setup_class
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
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1641 # tests in this class.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1642 # set up and open a tracker
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1643 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
1644
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1645 # open the database
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1646 cls.db = cls.instance.open('admin')
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1647
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1648 # add a user without edit access for status.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1649 cls.db.user.create(username="fred", roles='User',
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1650 password=password.Password('sekrit'), address='fred@example.com')
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1651
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1652 # 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
1653 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
1654 # 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
1655 cls.db.config.MAILHOST = "localhost"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1656 cls.db.config.MAIL_HOST = "localhost"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1657 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
1658
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1659 # 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
1660 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
1661 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
1662 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
1663
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1664 cls.db.config.INDEXER = "native-fts"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1665
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1666 # 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
1667 # 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
1668 cls.db.config.WEB_LOGIN_ATTEMPTS_MIN = 0
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1669
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1670 # enable static precompressed files
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1671 cls.db.config.WEB_USE_PRECOMPRESSED_FILES = 1
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1672
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1673 cls.db.config.save()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1674
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1675 cls.db.commit()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1676 cls.db.close()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1677
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1678 # 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
1679 cls.db = cls.instance.open('admin')
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1680
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1681 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
1682
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1683 # 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
1684 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
1685 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
1686 date=rdate.Date(),
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1687 messageid="test-msg-id")
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1688
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1689 cls.db.commit()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1690 cls.db.close()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1691
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1692 # 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
1693 # installed directories
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1694 cls.backup_domain = i18n.DOMAIN
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1695 cls.backup_locale_dirs = i18n.LOCALE_DIRS
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1696 i18n.LOCALE_DIRS = ['locale']
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1697 i18n.DOMAIN = ''
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1698
6918
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1699 @classmethod
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1700 def tearDownClass(cls):
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1701 # cleanup
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1702 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
1703
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1704 def test_native_fts(self):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1705 self.assertIn("postgresql_fts", str(self.db.indexer))
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1706
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1707 # 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
1708 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
1709 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
1710
7909
80cf6098ea65 issue2551334 - Get test suite to pass using windows python
John Rouillard <rouilj@ieee.org>
parents: 7819
diff changeset
1711 @skip_requests
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1712 class TestApiRateLogin(WsgiSetup):
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1713 """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
1714 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
1715 """
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1716
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1717 backend = 'sqlite'
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1718
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1719 @classmethod
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1720 def setup_class(cls):
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1721 '''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
1722 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
1723 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
1724 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
1725
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1726 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
1727 '''
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1728
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1729 # tests in this class.
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1730 # 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
1731 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
1732
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1733 # open the database
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1734 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
1735
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1736 # 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
1737 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
1738 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
1739
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1740 # 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
1741 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
1742 # 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
1743 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
1744 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
1745 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
1746
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1747 # 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
1748 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
1749 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
1750 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
1751
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1752 # 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
1753 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
1754 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
1755
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1756 # enable static precompressed files
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1757 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
1758
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1759 cls.db.config.save()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1760
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1761 cls.db.commit()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1762 cls.db.close()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1763
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1764 # 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
1765 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
1766
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1767 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
1768
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1769 # 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
1770 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
1771 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
1772 date=rdate.Date(),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1773 messageid="test-msg-id")
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1774
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1775 cls.db.commit()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1776 cls.db.close()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1777
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1778 # 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
1779 # installed directories
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1780 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
1781 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
1782 i18n.LOCALE_DIRS = ['locale']
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1783 i18n.DOMAIN = ''
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1784
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1785 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
1786 """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
1787 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
1788 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
1789 """
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1790 # 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
1791 # 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
1792 # 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
1793 # 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
1794 # IPv4 request only.
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1795 url_base_numeric = self.url_base()
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1796 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
1797
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1798 # 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
1799 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
1800 # 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
1801
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1802 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
1803 'Origin': self.tracker_web_base,}
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1804 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
1805 auth=('admin', 'sekrit'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1806 headers=request_headers
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1807 )
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1808 #print(f.status_code)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1809 #print(f.headers)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1810 #print(f.text)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1811
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1812 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
1813
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1814 # 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
1815 headers_expected = {
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1816 '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
1817 '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
1818 'Allow': '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-Methods': 'OPTIONS, GET',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1820 '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
1821 }
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1822
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1823 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
1824 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
1825 headers_expected[header])
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
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1828 # 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
1829 # 429
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1830 headers_expected = {
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1831 'Content-Type': 'text/plain'
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
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1834 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
1835 # 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
1836
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1837 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
1838 auth=('admin', 'ekrit'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1839 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1840 '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
1841 )
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1842
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1843 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
1844 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
1845 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
1846 headers_expected[header])
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1847 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
1848 else:
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1849 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
1850
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1851 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
1852 'X-RateLimit-Limit': '4',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1853 '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
1854 'X-RateLimit-Remaining': '0',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1855 'Retry-After': '3',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1856 'Access-Control-Expose-Headers':
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1857 ('X-RateLimit-Limit, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1858 'X-RateLimit-Remaining, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1859 'X-RateLimit-Reset, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1860 'X-RateLimit-Limit-Period, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1861 'Retry-After'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1862 'Content-Length': '50'}
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1863
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1864 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
1865 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
1866 headers_expected[header])
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1867
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1868 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
1869 10.0, delta=3,
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1870 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
1871
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1872 # 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
1873 # with 429.
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1874 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
1875 auth=('admin', 'sekrit'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1876 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1877 '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
1878 )
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1879 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
1880
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1881 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
1882 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
1883 headers_expected[header])
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
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1886 sleep(4)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1887 # 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
1888 # 200 return code.
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1889 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
1890 auth=('admin', 'sekrit'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1891 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1892 '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
1893 )
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1894 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
1895 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
1896 print(f.headers)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1897 print(f.text)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1898
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1899 headers_expected = {
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1900 'Content-Type': 'application/json',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1901 'Vary': 'Origin, Accept-Encoding',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1902 'Access-Control-Expose-Headers':
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1903 ( 'X-RateLimit-Limit, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1904 'X-RateLimit-Remaining, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1905 'X-RateLimit-Reset, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1906 'X-RateLimit-Limit-Period, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1907 'Retry-After, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1908 'Sunset, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1909 'Allow'),
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1910 '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
1911 '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
1912 '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
1913 }
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1914
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1915 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
1916 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
1917 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
1918
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1919 expected_data = {
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1920 "status": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1921 "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
1922 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1923 "keyword": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1924 "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
1925 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1926 "priority": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1927 "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
1928 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1929 "user": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1930 "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
1931 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1932 "file": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1933 "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
1934 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1935 "msg": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1936 "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
1937 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1938 "query": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1939 "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
1940 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1941 "issue": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1942 "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
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
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1946 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
1947 self.assertEqual(json_dict['data'], expected_data)

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