annotate test/test_liveserver.py @ 8438:98e17dd0197f

test - fix parsing of integer param values CI broke on the string '1\r#' expecting a 400 but got a 200 in test_element_url_param_accepting_integer_values(). The #, & characters mark a url fragment or start of another parameter and not part of the value. In a couple of tests, I parse the hypothesis generated value to remove a # or & and anything after. Then I set the value to the preceding string. If the string starts with # or &, the value is set to "0" as the server ignores the parameter and returns 200. "0" is a value that asserts that status is 200. The code doing this parsing was different (and broken) between test_element_url_param_accepting_integer_values and test_class_url_param_accepting_integer_values It's now consistent and if it finds a & or #, it actually tests the resulting value/status rather than skipping the test.
author John Rouillard <rouilj@ieee.org>
date Thu, 28 Aug 2025 12:39:38 -0400
parents cc3edb260c1b
children
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
8414
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
8 from roundup.anypy.strings import b2s, s2b
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
8412
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
12 from textwrap import dedent
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
13 from time import sleep
7578
ec59729b3b7e fix typo
John Rouillard <rouilj@ieee.org>
parents: 7577
diff changeset
14 from .test_postgresql import skip_postgresql
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
15
6548
de5f5f9c02f2 Fix spurious content-ty on 304; xfail css Cache-Control
John Rouillard <rouilj@ieee.org>
parents: 6546
diff changeset
16 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
17
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
18 try:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
19 import requests
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
20 skip_requests = lambda func, *args, **kwargs: func
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
21 except ImportError:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
22 from .pytest_patcher import mark_class
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
23 skip_requests = mark_class(pytest.mark.skip(
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
24 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
25
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
26 try:
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
27 import hypothesis
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
28 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
29
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
30 # ruff: noqa: E402
8215
1b15f635ada1 fix(web) issue2551382 - handle crash in request call in test
John Rouillard <rouilj@ieee.org>
parents: 8214
diff changeset
31 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
32 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
33
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
34 except ImportError:
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
35 from .pytest_patcher import mark_class
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
36 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
37 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
38
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
39 # 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
40 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
41 def noop_decorators(func):
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
42 def internal():
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
43 pass
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
44 return internal
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
45 return noop_decorators
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
46
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
47 # define a dummy strategy
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
48 def noop_strategy(*args, **kwargs):
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
49 pass
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
50
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
51 # 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
52 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
53 # and stratgies using in decorators
8217
cd76d5d59c37 fix(web) issue2551382 - fix missing hypothesis case
John Rouillard <rouilj@ieee.org>
parents: 8216
diff changeset
54 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
55
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
56
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
57 try:
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
58 import brotli
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
59 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
60 except ImportError:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
61 from .pytest_patcher import mark_class
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
62 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
63 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
64 brotli = None
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
65
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
66 try:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
67 import zstd
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
68 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
69 except ImportError:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
70 from .pytest_patcher import mark_class
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
71 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
72 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
73
6569
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
74 import sys
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
75
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
76 _py3 = sys.version_info[0] > 2
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
77
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
78 @skip_requests
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
79 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
80 # 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
81 # 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
82 # 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
83 # 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
84 # include only that port.
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
85 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
86 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
87 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
88 allow_module_level=True)
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
89 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
90
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
91 # 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
92 # 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
93 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
94 # 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
95 tracker_web_base = "http://localhost:%d" % tracker_port
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
96
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
97 dirname = '_test_instance'
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
98 backend = 'anydbm'
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
99
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
100 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
101
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
102 @classmethod
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
103 def setup_class(cls):
6650
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
104 '''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
105 This instance persists across all tests.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
106 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
107 create_app() method to be called.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
108 '''
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
109 # tests in this class.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
110 # set up and open a tracker
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
111 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
112
8412
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
113 # add an auditor that triggers a Reauth
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
114 with open("%s/detectors/reauth.py" % cls.dirname, "w") as f:
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
115 auditor = dedent("""
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
116 from roundup.cgi.exceptions import Reauth
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
117
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
118 def trigger_reauth(db, cl, nodeid, newvalues):
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
119 if 'realname' in newvalues and not hasattr(db, 'reauth_done'):
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
120 raise Reauth('Add an optional message to the user')
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
121
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
122 def init(db):
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
123 db.user.audit('set', trigger_reauth, priority=110)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
124 """)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
125 f.write(auditor)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
126
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
127 # open the database
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
128 cls.db = cls.instance.open('admin')
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
129
6754
bb04638dc78d Test _generic.item.html to mke sure submit button displayed properly
John Rouillard <rouilj@ieee.org>
parents: 6750
diff changeset
130 # 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
131 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
132 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
133
8412
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
134 # add a user for reauth tests
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
135 cls.db.user.create(username="reauth",
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
136 realname="reauth test user",
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
137 password=password.Password("reauth"),
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
138 address="reauth@example.com", roles="User")
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
139
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
140 # 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
141 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
142 # 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
143 cls.db.config.MAILHOST = "localhost"
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
144 cls.db.config.MAIL_HOST = "localhost"
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
145 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
146
8412
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
147 # also report it in the web.
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
148 cls.db.config.WEB_DEBUG = "yes"
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
149
6813
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
150 # 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
151 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
152 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
153 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
154
d308fb5ba9b0 Disable rate limit. Tests log in and trip the limit causeing failures.
John Rouillard <rouilj@ieee.org>
parents: 6754
diff changeset
155 # 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
156 # 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
157 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
158
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
159 # enable static precompressed files
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
160 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
161
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
162 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
163
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
164 # add an issue to allow testing retrieval.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
165 # also used for text searching.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
166 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
167
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
168 # 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
169 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
170 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
171 date=rdate.Date(),
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
172 messageid="test-msg-id")
7935
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
173
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
174 # add a query using @current_user
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
175 result = cls.db.query.create(
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
176 klass="issue",
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
177 name="I created",
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
178 private_for=None,
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
179 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
180 "@sort=activity&@group=priority&@filter=creator&"
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
181 "@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
182 )
f670446b5e50 test: populate db with query using @current_user
John Rouillard <rouilj@ieee.org>
parents: 7934
diff changeset
183
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
184 cls.db.commit()
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
185 cls.db.close()
6650
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
186
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
187 # Force locale config to find locales in checkout not in
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
188 # installed directories
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
189 cls.backup_domain = i18n.DOMAIN
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
190 cls.backup_locale_dirs = i18n.LOCALE_DIRS
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
191 i18n.LOCALE_DIRS = ['locale']
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
192 i18n.DOMAIN = ''
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
193
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
194 @classmethod
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
195 def teardown_class(cls):
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
196 '''Close the database and delete the tracker directory
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
197 now that the app should be exiting.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
198 '''
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
199 if cls.db:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
200 cls.db.close()
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
201 try:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
202 shutil.rmtree(cls.dirname)
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
203 except OSError as error:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
204 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
205 i18n.LOCALE_DIRS = cls.backup_locale_dirs
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
206 i18n.DOMAIN = cls.backup_domain
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
207
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
208 def create_app(self):
7819
0fe2b9f6e19f issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents: 7816
diff changeset
209 '''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
210 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
211 '''
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
212
6569
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
213 if _py3:
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
214 return validator(RequestDispatcher(self.dirname))
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
215 else:
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
216 # wsgiref/validator.py InputWrapper::readline is broke and
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
217 # 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
218 return RequestDispatcher(self.dirname)
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
219
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
220 class ClientSetup():
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
221 """ 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
222 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
223 """
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
224
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
225 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
226 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
227 # 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
228
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
229 session = requests.Session()
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
230 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
231
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
232 # login using form to get cookie
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
233 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
234 "@action": "login"}
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
235 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
236
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
237 if expect_login_ok:
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
238 # verify we have a cookie
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
239 self.assertIn('roundup_session_Roundupissuetracker',
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
240 session.cookies)
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
241
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
242 if not return_response:
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
243 return session
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
244 return session, response
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
245
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
246
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
247 @skip_hypothesis
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
248 class FuzzGetUrls(WsgiSetup, ClientSetup):
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
249
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
250 _max_examples = 100
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
251
8270
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
252 # 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
253 # 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
254 # 10 seconds.
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
255 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
256
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
257 @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
258 text(min_size=1))
8438
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
259 @example("@verbose", "0\r#")
8214
55b0abde56ab fix(web) issue2551382 - case 1# or 1& failing.
John Rouillard <rouilj@ieee.org>
parents: 8213
diff changeset
260 @example("@verbose", "1#")
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
261 @example("@verbose", "#1stuff")
8290
51f277ed8adc test: fix fuzz test
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
262 @example("@verbose", "0 #stuff")
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
263 @settings(max_examples=_max_examples,
8270
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
264 deadline=fuzz_deadline) # in ms
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
265 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
266 """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
267 same code for all *.
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
268 """
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
269 session, _response = self.create_login_session()
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
270 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
271 query = '%s=%s' % (param, value)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
272 f = session.get(url, params=query)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
273 try:
8290
51f277ed8adc test: fix fuzz test
John Rouillard <rouilj@ieee.org>
parents: 8281
diff changeset
274 # test case '0 #', '0#', '12345#stuff' '12345&stuff'
8438
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
275 # Normalize like a server does by breaking value at
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
276 # # or & as these mark a fragment or subsequent
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
277 # query arg and are not part of the value.
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
278 match = re.match(r'^(.*)[#&]', value)
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
279 if match is not None:
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
280 value = match[1]
8438
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
281 # parameter is ignored by server if empty.
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
282 # so set it to 0 to force 200 status code.
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
283 if value == "":
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
284 value = "0"
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
285
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
286 if int(value) >= 0:
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
287 self.assertEqual(f.status_code, 200)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
288 except ValueError:
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
289 # 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
290 if value[0] in ('#', '&'):
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
291 self.assertEqual(f.status_code, 200)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
292 else:
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
293 # invalid value for param
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
294 self.assertEqual(f.status_code, 400)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
295
8215
1b15f635ada1 fix(web) issue2551382 - handle crash in request call in test
John Rouillard <rouilj@ieee.org>
parents: 8214
diff changeset
296 @given(sampled_from(['@verbose']), text(min_size=1))
8438
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
297 @example("@verbose", "0\r#")
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
298 @example("@verbose", "10#")
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
299 @example("@verbose", u'Ø\U000dd990')
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
300 @settings(max_examples=_max_examples,
8270
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
301 deadline=fuzz_deadline) # in ms
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
302 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
303 """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
304 """
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
305 session, _response = self.create_login_session()
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
306 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
307 query = '%s=%s' % (param, value)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
308 f = session.get(url, params=query)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
309 try:
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
310 # test case '0#' '12345#stuff' '12345&stuff'
8438
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
311 # Normalize like a server does by breaking value at
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
312 # # or & as these mark a fragment or subsequent
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
313 # query arg and are not part of the value.
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
314 match = re.match(r'^(.*)[#&]', value)
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
315 if match is not None:
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
316 value = match[1]
8438
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
317 # parameter is ignored by server if empty.
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
318 # so set it to 0 to force 200 status code.
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
319 if value == "":
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
320 value = "0"
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
321
98e17dd0197f test - fix parsing of integer param values
John Rouillard <rouilj@ieee.org>
parents: 8414
diff changeset
322 if int(value) >= 0:
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
323 self.assertEqual(f.status_code, 200)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
324 except ValueError:
8216
03020f08a685 fix(web) issue2551382 - fix more integer param test cases
John Rouillard <rouilj@ieee.org>
parents: 8215
diff changeset
325 # 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
326 if value[0] in ('#', '&'):
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
327 self.assertEqual(f.status_code, 200)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
328 else:
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
329 # invalid value for param
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
330 self.assertEqual(f.status_code, 400)
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
331
8270
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
332 @skip_hypothesis
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
333 class FuzzTestSettingData(WsgiSetup, ClientSetup):
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
334
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
335 _max_examples = 100
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
336
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
337 # 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
338 # 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
339 # 10 seconds.
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
340 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
341
8218
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
342 @given(emails())
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
343 @settings(max_examples=_max_examples,
8270
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
344 deadline=fuzz_deadline) # in ms
c70ffbc2a003 test: Override Fuzz timeout from env variable.
John Rouillard <rouilj@ieee.org>
parents: 8268
diff changeset
345 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
346 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
347 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
348 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
349 "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
350 "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
351 "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
352 "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
353 }
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
354
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
355 #--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
356
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
357 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
358 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
359 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
360
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
361 payload = {'data': email}
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
362 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
363
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
364 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
365
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
366 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
367 # 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
368 # 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
369 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
370 else:
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
371 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
372 email)
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
373
32aaf5dc562b fix(REST): issue2551383; improve errors for bad json, fix PUT docs
John Rouillard <rouilj@ieee.org>
parents: 8217
diff changeset
374
8213
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
375 @skip_requests
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
376 class BaseTestCases(WsgiSetup, ClientSetup):
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
377 """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
378 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
379 """
14e92a595828 fix(web) issue2551382 - 409 not 400 errors returned
John Rouillard <rouilj@ieee.org>
parents: 8168
diff changeset
380
8412
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
381 def test_reauth_workflow(self):
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
382 """as admin user:
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
383 change reauth user realname include all fields on the form
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
384 also add a dummy file to the submitted request.
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
385 get back a reauth page/template (look for id="reauth_form")
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
386 verify hidden input for realname
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
387 verify hidden input for roles
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
388 verify the base 64 file content are on the page.
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
389
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
390 submit form with bad password
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
391 verify error reported
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
392 verify hidden input for realname
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
393 (note the file contents will be gone because
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
394 preserving that requires javascript)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
395
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
396 enter good password
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
397 verify on user page (look for
8414
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
398 "(the default is" hint for timezone)
8412
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
399 verify new name present
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
400 verify success banner
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
401 """
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
402 from html.parser import HTMLParser
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
403 class HTMLExtractForm(HTMLParser):
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
404 """Custom parser to extract input fields from a form.
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
405
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
406 Set the form_label to extract inputs only inside a form
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
407 with a name or id matching form_label. Default is
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
408 "reauth_form".
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
409
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
410 Set names to a tuple/list/set with the names of the
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
411 inputs you are interested in. Defalt is None which
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
412 extracts all inputs on the page with a name property.
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
413 """
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
414 def __init__(self, names=None, form_label="reauth_form"):
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
415 super().__init__()
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
416 self.fields = {}
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
417 self.names = names
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
418 self.form_label = form_label
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
419 self._inside_form = False
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
420
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
421 def handle_starttag(self, tag, attrs):
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
422 if tag == 'form':
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
423 for attr, value in attrs:
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
424 if attr in ('id', 'name') and value == self.form_label:
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
425 self._inside_form = True
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
426 return
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
427
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
428 if not self._inside_form: return
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
429
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
430 if tag == 'input':
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
431 field_name = None
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
432 field_value = None
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
433 for attr, value in attrs:
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
434 if attr == 'name':
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
435 field_name = value
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
436 if attr == 'value':
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
437 field_value = value
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
438
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
439 # skip input type="submit" without name
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
440 if not field_name: return
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
441
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
442 if self.names is None:
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
443 self.fields[field_name] = field_value
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
444 elif field_name in self.names:
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
445 self.fields[field_name] = field_value
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
446
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
447 def handle_endtag(self, tag):
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
448 if tag == "form":
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
449 self._inside_form = False
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
450
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
451 def get_fields(self):
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
452 return self.fields
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
453
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
454
8414
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
455 # for some reason the lookup works with anydbm but
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
456 # returns a cursor closed error under postgresql.
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
457 # adding setup/teardown to TestPostgresWsgiServer
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
458 # with self.db = self.instance.open('admin') looks like
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
459 # it caused the wsgi server to hang. So hardcode the id.
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
460 # self.db.user.lookup('reauth')
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
461 reauth_id = '4'
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
462
8412
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
463 user_url = "%s/user%s" % (self.url_base(),
8414
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
464 reauth_id)
8412
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
465
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
466 session, _response = self.create_login_session()
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
467
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
468 user_page = session.get(user_url)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
469
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
470 self.assertEqual(user_page.status_code, 200)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
471 self.assertTrue(b'reauth' in user_page.content)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
472
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
473 parser = HTMLExtractForm(('@lastactivity', '@csrf'), 'itemSynopsis')
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
474 parser.feed(user_page.text)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
475
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
476 change = {"realname": "reauth1",
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
477 "username": "reauth",
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
478 "password": "",
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
479 "@confirm@password": "",
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
480 "phone": "",
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
481 "organisation": "",
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
482 "roles": "User",
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
483 "timezone": "",
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
484 "address": "reauth@example.com",
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
485 "alternate_addresses": "",
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
486 "@template": "item",
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
487 "@required": "username,address",
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
488 "@submit_button": "Submit Changes",
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
489 "@action": "edit",
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
490 **parser.get_fields()
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
491 }
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
492 lastactivity = parser.get_fields()['@lastactivity']
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
493
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
494 # make the simple name/value dict into a name/tuple dict
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
495 # setting tuple[0] to None to indicate pulre string
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
496 # value. Then we use change2 with file to trigger
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
497 # multipart/form-data form encoding which preserves fields
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
498 # with empty values. application/x-www-form-urlencoded forms
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
499 # have fields with empty values dropped by cgi by default.
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
500 userpage_change = {key: (None, value) for key, value in change.items()}
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
501 userpage_change.update({"@file": ("filename.txt", "this is some text")})
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
502
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
503 on_reauth = session.post(user_url, files=userpage_change)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
504
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
505 self.assertIn(b'id="reauth_form"', on_reauth.content)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
506 self.assertIn(b'Please enter your password to continue with',
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
507 on_reauth.content)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
508 # make sure the base64 encoded content for @file is present on
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
509 # the page. Because we are not running a javascript capable
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
510 # browser, it is not converted into an actual file input.
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
511 # But this check shows that a file generated by reauth is trying
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
512 # to maintain the file input.
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
513 self.assertIn(b'dGhpcyBpcyBzb21lIHRleHQ=', on_reauth.content)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
514
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
515 parser = HTMLExtractForm()
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
516 parser.feed(on_reauth.text)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
517 fields = parser.get_fields()
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
518 self.assertEqual(fields["@lastactivity"], lastactivity)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
519 self.assertEqual(fields["@next_action"], "edit")
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
520 self.assertEqual(fields["@action"], "reauth")
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
521 self.assertEqual(fields["address"], "reauth@example.com")
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
522 self.assertEqual(fields["phone"], "")
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
523 self.assertEqual(fields["roles"], "User")
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
524 self.assertEqual(fields["realname"], "reauth1")
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
525
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
526 reauth_fields = {
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
527 "@reauth_password": (None, "sekret not right"),
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
528 "submit": (None, " Authorize Change "),
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
529 }
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
530 reauth_submit = {key: (None, value) for key, value in fields.items()}
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
531 reauth_submit.update(reauth_fields)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
532
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
533 fail_reauth = session.post(user_url,
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
534 files=reauth_submit)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
535 self.assertIn(b'id="reauth_form"', fail_reauth.content)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
536 self.assertIn(b'Please enter your password to continue with',
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
537 fail_reauth.content)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
538 self.assertIn(b'Password incorrect', fail_reauth.content)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
539
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
540 parser = HTMLExtractForm(('@csrf',))
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
541 parser.feed(fail_reauth.text)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
542 # remeber we are logged in as admin - use admin pw.
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
543 reauth_submit.update({"@reauth_password": (None, "sekrit"),
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
544 "@csrf":
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
545 (None, parser.get_fields()['@csrf'])})
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
546 pass_reauth = session.post(user_url,
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
547 files=reauth_submit)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
548 self.assertNotIn(b'id="reauth_form"', pass_reauth.content)
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
549 self.assertNotIn(b'Please enter your password to continue with',
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
550 pass_reauth.content)
8414
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
551 self.assertIn(b'user %s realname edited ok' % s2b(reauth_id),
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
552 pass_reauth.content)
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
553 self.assertIn(b'(the default is', pass_reauth.content)
8412
0663a7bcef6c feat: finish reauth docs, enhance code.
John Rouillard <rouilj@ieee.org>
parents: 8290
diff changeset
554
8168
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
555 def test_cookie_attributes(self):
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
556 session, _response = self.create_login_session()
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
557
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
558 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
559 cookie = cookie_box['roundup_session_Roundupissuetracker']
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
560
3f0f4746dc7e issue2551370 - prefix session cookie with __Secure- over https
John Rouillard <rouilj@ieee.org>
parents: 8132
diff changeset
561 # 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
562 # 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
563 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
564 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
565 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
566 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
567
8268
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
568 def test_bad_post_data(self):
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
569 """issue2551387 - bad post data causes TypeError: not indexable
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
570 """
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
571 session, _response = self.create_login_session()
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
572
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
573 h = {"Content-Type": "text/plain"}
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
574 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
575 print(response.status_code)
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
576 print(response.headers)
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
577 print(response.text)
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
578 self.assertEqual(response.status_code, 200)
05d8806b25ad fix: issue2551387 - TypeError: not indexable.
John Rouillard <rouilj@ieee.org>
parents: 8265
diff changeset
579
7937
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
580 def test_query(self):
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
581 current_user_query = (
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
582 "@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
583 "@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
584 "@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
585 "@dispname=Test1")
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
586
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
587 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
588 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
589
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
590 # 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
591 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
592 # find title of issue 1
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
593 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
594 # 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
595 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
596 # logout
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
597 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
598
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
599
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
600 # set up for another user
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
601 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
602 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
603
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
604 # verify the query has run
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
605 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
606 # 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
607 # of the footer is missing.
22354d7fc94a test: issue1525113 - notation to filter by logged-in user
John Rouillard <rouilj@ieee.org>
parents: 7935
diff changeset
608 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
609
8241
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
610 def test_broken_query(self):
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
611 # query link item
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
612 current_user_query = (
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
613 "@columns=title,id,activity,status,assignedto&"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
614 "@sort=activity&@group=priority&@filter=creator&"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
615 "@pagesize=50&@startwith=0&creator=-2&"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
616 "@dispname=Test1")
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
617
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
618 session, _response = self.create_login_session()
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
619 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
620
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
621 # 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
622 # print(f.text)
8242
393dfc750d8b test: missed change in error wording.
John Rouillard <rouilj@ieee.org>
parents: 8241
diff changeset
623 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
624 '[-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
625 'too few arguments.',
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
626 f.text)
8253
cae1bbf2536b fix: issue2551374 - Add error handling for filter expressions. Fix UI
John Rouillard <rouilj@ieee.org>
parents: 8248
diff changeset
627 self.assertEqual(f.status_code, 200)
8241
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
628
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
629 def test_broken_multiink_query(self):
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
630 # query multilink item
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
631 current_user_query = (
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
632 "@columns=title,id,activity,status,assignedto"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
633 "&keyword=-3&@sort=activity&@group=priority"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
634 "&@pagesize=50&@startwith=0&@template=index|search"
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
635 "&@action=search")
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
636 session, _response = self.create_login_session()
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
637 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
638
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
639 # 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
640 print(f.text)
8242
393dfc750d8b test: missed change in error wording.
John Rouillard <rouilj@ieee.org>
parents: 8241
diff changeset
641 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
642 '[-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
643 'too few arguments.',
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
644 f.text)
8253
cae1bbf2536b fix: issue2551374 - Add error handling for filter expressions. Fix UI
John Rouillard <rouilj@ieee.org>
parents: 8248
diff changeset
645 self.assertEqual(f.status_code, 200)
8241
741ea8a86012 fix: issue2551374. Error handling for filter expressions.
John Rouillard <rouilj@ieee.org>
parents: 8219
diff changeset
646
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
647 def test_start_page(self):
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
648 """ 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
649 """
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
650 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
651 self.assertEqual(f.status_code, 200)
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
652 self.assertTrue(b'Roundup' in f.content)
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
653 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
654
6640
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
655 def test_start_in_german(self):
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
656 """ 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
657 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
658 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
659
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
660 use:
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
661 url parameter @language
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
662 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
663 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
664 """
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
665
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
666 # test url parameter
6640
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
667 f = requests.get(self.url_base() + "?@language=de")
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
668 self.assertEqual(f.status_code, 200)
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
669 print(f.content)
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
670 self.assertTrue(b'Roundup' in f.content)
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
671 self.assertTrue(b'Aufgabenliste' in f.content)
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
672 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
673
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
674 # 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
675 bluemonster = f.cookies
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
676 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
677 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
678 print(f.content)
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
679 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
680 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
681 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
682
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
683 # 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
684 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
685 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
686 print(f.content)
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
687 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
688 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
689 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
690 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
691 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
692
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
693 # 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
694 alh = {"Accept-Language":
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
695 "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
696 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
697 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
698 print(f.content)
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
699 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
700 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
701 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
702
8062
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
703 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
704 """ 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
705 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
706 """
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
707 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
708 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
709 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
710 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
711 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
712 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
713
28aa76443f58 fix(security): fix CVE-2024-39124, CVE-2024-39124, and CVE-2024-39125
John Rouillard <rouilj@ieee.org>
parents: 8020
diff changeset
714 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
715 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
716 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
717 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
718 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
719 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
720
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
721 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
722 """ 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
723 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
724 Range: 10-20
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
725 Range: 10-
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
726
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
727 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
728 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
729 Range: -10
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
730
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
731 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
732
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
733 """
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
734
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
735 # get whole file uncompressed. Extract content length and etag
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
736 # for future use
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
737 f = requests.get(self.url_base() + "/@@file/style.css",
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
738 headers = {"Accept-Encoding": "identity"})
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
739 # store etag for condition range testing
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
740 etag = f.headers['etag']
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
741 expected_length = f.headers['content-length']
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
742
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
743 # 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
744 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
745 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
746 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
747 self.assertEqual(f.content, b"/* main pag")
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
748 # 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
749 self.assertEqual(f.headers['content-length'], '11')
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
750 self.assertEqual(f.headers['content-range'],
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
751 "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
752
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
753 # 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
754 hdrs = {"Range": "bytes=10-20"}
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
755 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
756 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
757 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
758 # 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
759 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
760 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
761 "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
762
7816
1b5daee24dc7 test: fix test for invalid etag in if-range.
John Rouillard <rouilj@ieee.org>
parents: 7578
diff changeset
763 # 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
764 hdrs = {"Range": "bytes=11-"}
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
765 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
766 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
767 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
768 "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
769 expected_length))
6978
3c4047cdc77a cange type or arg to assertIn from string to byte.
John Rouillard <rouilj@ieee.org>
parents: 6977
diff changeset
770 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
771
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
772 # 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
773 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
774 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
775 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
776 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
777 self.assertEqual(f.content, b"/* main pag")
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
778 # 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
779 self.assertEqual(f.headers['content-length'], '11')
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
780 self.assertEqual(f.headers['content-range'],
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
781 "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
782
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
783 # 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
784 hdrs['If-Range'] = etag[2:] # bad tag
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
785 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
786 self.assertEqual(f.status_code, 200)
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
787 # not checking content length since it could be compressed
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
788 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
789
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
790 # 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
791 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
792 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
793 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
794 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
795 # 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
796 self.assertEqual(len(f.content), int(expected_length))
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
797 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
798
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
799 # 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
800 # 200 code
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
801 hdrs['Range'] = "bytes=0-99999" # too large
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
802 hdrs['If-Range'] = etag # any tag works
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
803 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
804 self.assertEqual(f.status_code, 200)
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
805 # not checking content length since it could be compressed
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
806 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
807
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
808 # 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
809 hdrs['Range'] = "bytes=0-99999" # too large
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
810 del(hdrs['If-Range'])
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
811 print(hdrs)
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
812 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
813 self.assertEqual(f.status_code, 416)
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
814 self.assertEqual(f.headers['content-range'],
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
815 "bytes */%s"%expected_length)
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
816
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
817 # invalid range multiple ranges
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
818 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
819 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
820 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
821 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
822 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
823 '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
824 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
825
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
826 # 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
827 hdrs['Range'] = "bytes=1"
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
828 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
829 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
830 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
831 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
832 '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
833 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
834
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
835 # 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
836 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
837 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
838 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
839 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
840 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
841 '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
842 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
843
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
844 # 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
845 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
846 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
847 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
848 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
849 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
850 '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
851 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
852
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
853 # 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
854 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
855 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
856 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
857 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
858 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
859 '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
860 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
861
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
862 # range is invalid #2 < #1
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
863 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
864 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
865 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
866 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
867 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
868 '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
869 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
870
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
871 # 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
872 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
873 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
874 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
875 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
876 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
877 '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
878 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
879
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
880 # 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
881 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
882 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
883 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
884 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
885 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
886 '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
887 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
888
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
889 # range is unsupported units
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
890 hdrs['Range'] = "badunits=1-11"
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
891 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
892 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
893 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
894 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
895 '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
896 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
897
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
898
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
899 # valid range, invalid file
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
900 hdrs['Range'] = "bytes=0-11"
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
901 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
902 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
903 headers=hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
904 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
905 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
906 '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
907
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
908 def test_rest_preflight_collection(self):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
909 # no auth for rest csrf preflight
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
910 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
911 headers = {'content-type': "",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
912 'x-requested-with': "rest",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
913 'Access-Control-Request-Headers':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
914 "x-requested-with",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
915 'Access-Control-Request-Method': "PUT",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
916 'Origin': "https://client.com"})
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
917 print(f.status_code)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
918 print(f.headers)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
919 print(f.content)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
920
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
921 self.assertEqual(f.status_code, 204)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
922
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
923 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
924 '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
925 'Allow': 'OPTIONS, GET, POST',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
926 'Access-Control-Allow-Methods': 'OPTIONS, GET, POST',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
927 'Access-Control-Allow-Credentials': 'true',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
928 }
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
929
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
930 # 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
931 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
932 f.headers.items() if key in expected },
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
933 expected)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
934
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
935 # use invalid Origin
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
936 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
937 headers = {'content-type': "application/json",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
938 'x-requested-with': "rest",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
939 'Access-Control-Request-Headers':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
940 "x-requested-with",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
941 'Access-Control-Request-Method': "PUT",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
942 'Origin': "ZZZ"})
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
943
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
944 self.assertEqual(f.status_code, 400)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
945
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
946 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
947 'allowed to use Rest Interface." } }'
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
948 self.assertEqual(b2s(f.content), expected)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
949
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
950 # Test when Origin is not sent.
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
951 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
952 headers = {'content-type': "application/json",
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
953 'x-requested-with': "rest",
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
954 'Access-Control-Request-Headers':
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
955 "x-requested-with",
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
956 'Access-Control-Request-Method': "PUT",})
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
957
8265
35beff316883 fix(api): issue2551384. Verify REST authorization earlier
John Rouillard <rouilj@ieee.org>
parents: 8253
diff changeset
958 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
959
8265
35beff316883 fix(api): issue2551384. Verify REST authorization earlier
John Rouillard <rouilj@ieee.org>
parents: 8253
diff changeset
960 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
961 self.assertEqual(b2s(f.content), expected)
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
962
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
963
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
964 def test_rest_invalid_method_collection(self):
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
965 # use basic auth for rest endpoint
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
966 f = requests.put(self.url_base() + '/rest/data/user',
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
967 auth=('admin', 'sekrit'),
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
968 headers = {'content-type': "",
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
969 'X-Requested-With': "rest",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
970 'Origin': "https://client.com"})
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
971 print(f.status_code)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
972 print(f.headers)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
973 print(f.content)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
974
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
975 self.assertEqual(f.status_code, 405)
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
976 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
977 'Access-Control-Allow-Credentials': 'true',
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
978 'Allow': 'DELETE, GET, OPTIONS, POST',
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
979 }
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
980
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
981 print(f.headers)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
982 # use dict comprehension to remove fields like date,
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
983 # content-length etc. from f.headers.
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
984 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
985
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
986 content = json.loads(f.content)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
987
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
988 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
989 self.assertEqual(exp_content, content['error']['msg'])
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
990
6386
2a2da73e1e26 Remove Connection: close header for 501 error handling rest
John Rouillard <rouilj@ieee.org>
parents: 6385
diff changeset
991 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
992 """ 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
993
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
994 # 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
995 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
996 headers = {'content-type': ""})
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
997 # 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
998 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
999
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1000 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
1001 # 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
1002 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
1003 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1004 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1005 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1006 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1007 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
1008 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1009
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1010 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
1011 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
1012 '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
1013 'Allow': 'OPTIONS, GET',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1014 'Access-Control-Allow-Credentials': 'true',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1015 'Access-Control-Allow-Methods': 'OPTIONS, GET',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1016 '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
1017 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1018
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1019 # 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
1020 # 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
1021 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
1022
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1023 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
1024 # 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
1025 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
1026 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1027 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1028 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1029 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1030 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
1031 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1032
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1033 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
1034 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
1035 '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
1036 'Allow': 'OPTIONS, GET',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1037 'Access-Control-Allow-Methods': 'OPTIONS, GET',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1038 '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
1039 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1040
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1041 # 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
1042 # 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
1043 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
1044
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1045 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
1046 # 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
1047 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
1048 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1049 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1050 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1051 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1052 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
1053 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1054
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1055 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
1056 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
1057 '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
1058 'Allow': 'OPTIONS, GET, POST',
6526
3c8322e3fe25 Fix test and remove pdb invocation.
John Rouillard <rouilj@ieee.org>
parents: 6525
diff changeset
1059 '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
1060 '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
1061 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1062
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1063 # 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
1064 # 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
1065 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
1066
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1067
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1068 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
1069
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1070 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
1071 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1072 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1073 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1074 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1075 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
1076 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1077
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1078 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
1079 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
1080 '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
1081 'Allow': 'OPTIONS, GET, PUT, DELETE, PATCH',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1082 '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
1083 '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
1084 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1085
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1086 # 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
1087 # 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
1088 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
1089
6385
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
1090 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
1091 # 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
1092 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
1093 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1094 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1095 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1096 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1097 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
1098 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1099
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1100 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
1101 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
1102 '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
1103 'Allow': 'OPTIONS, GET, PUT, DELETE, PATCH',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1104 '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
1105 '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
1106 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1107
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
1108 # 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
1109 # 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
1110 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
1111
6385
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
1112 ## test a read only property.
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
1113
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
1114 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
1115 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1116 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1117 'Origin': self.tracker_web_base,
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1118 })
6385
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
1119 print(f.status_code)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
1120 print(f.headers)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
1121
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
1122 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
1123 expected1 = dict(expected)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
1124 expected1['Allow'] = 'OPTIONS, GET'
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1125 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
1126
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
1127 # 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
1128 # 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
1129 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
1130
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
1131 ## 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
1132 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
1133 auth=('admin', 'sekrit'),
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
1134 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1135 '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
1136 print(f.status_code)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
1137 print(f.headers)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
1138
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
1139 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
1140
7983
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1141 def test_rest_endpoint_user_roles(self):
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1142 # use basic auth for rest endpoint
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1143 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
1144 auth=('admin', 'sekrit'),
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1145 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1146 'Origin': self.tracker_web_base,
7983
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1147 })
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1148 print(f.status_code)
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1149 print(f.headers)
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1150
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1151 self.assertEqual(f.status_code, 200)
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1152 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
1153 'Access-Control-Allow-Credentials': 'true',
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1154 'Allow': 'GET',
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1155 }
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1156 # use dict comprehension to remove fields like date,
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1157 # content-length etc. from f.headers.
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1158 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
1159
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1160 content = json.loads(f.content)
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1161
dd229bbdd32d issue 2551353 - add roundup-classhelper
John Rouillard <rouilj@ieee.org>
parents: 7937
diff changeset
1162 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
1163
8020
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1164 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
1165 '''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
1166 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
1167 multiple values.
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1168 '''
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1169 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
1170 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
1171 'Accept': '*/*'})
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1172 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
1173 print(f.headers)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1174
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1175 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
1176 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
1177 'Content-Encoding': 'gzip',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1178 'Vary': 'Accept-Encoding',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1179 }
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1180
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1181 # 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
1182 # 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
1183 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
1184 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
1185 expected)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1186
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1187 # 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
1188 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
1189 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
1190 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
1191 '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
1192 'Accept': '*/*'})
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1193 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
1194 print(f.headers)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1195
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1196 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
1197 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
1198 'Content-Length': '0',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1199 'ETag': etag,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1200 'Vary': 'Accept-Encoding'
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1201 }
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1202
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1203 # 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
1204 # 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
1205 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
1206
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1207 # 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
1208 # and multiple etags
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1209 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
1210
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1211 # 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
1212 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
1213
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1214 all_etags = (
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1215 '"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
1216 base_etag
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1217 )
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1218
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1219 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
1220 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
1221 '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
1222 'Accept': '*/*'})
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1223 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
1224 print(f.headers)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1225
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1226 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
1227 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
1228 'Content-Length': '0',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1229 'ETag': base_etag,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1230 'Vary': 'Accept-Encoding'
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1231 }
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1232
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1233 # 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
1234 # 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
1235 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
1236
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1237
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1238 # 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
1239 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
1240 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
1241 '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
1242 'Accept': '*/*'})
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1243 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
1244 print(f.headers)
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1245
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1246 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
1247 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
1248 'ETag': etag,
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1249 'Content-Encoding': 'gzip',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1250 'Vary': 'Accept-Encoding',
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1251 }
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1252
60c98a8a23bd fix: make If-None-Match work for static file (@@file) case
John Rouillard <rouilj@ieee.org>
parents: 7983
diff changeset
1253 # 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
1254 # 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
1255 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
1256
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1257 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
1258 ''' 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
1259 if-modified-since timestamps.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1260 '''
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1261 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
1262
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1263 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
1264 headers = { 'Accept-Encoding': 'gzip, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1265 '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
1266 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1267 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1268 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1269
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1270 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
1271 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
1272 'Content-Encoding': 'gzip',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1273 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1274 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1275
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1276 # 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
1277 # etag etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1278 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
1279
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1280 # now use today's date
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1281 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
1282 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
1283 headers = { 'Accept-Encoding': 'gzip, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1284 '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
1285 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1286 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1287 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1288
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1289 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
1290 expected = { 'Vary': 'Accept-Encoding',
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1291 'Content-Length': '0',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1292 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1293
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1294 # 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
1295 # etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1296 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
1297
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1298
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1299 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
1300 for tail in [
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1301 '/issue1', # normal url
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1302 '/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
1303 '/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
1304 ]:
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1305 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
1306 headers = { 'Accept-Encoding': 'gzip',
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1307 'Accept': '*/*'})
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1308
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1309 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
1310 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
1311
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1312 def test_load_msg1(self):
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1313 # 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
1314 f = requests.get(self.url_base() + '/msg0001',
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1315 headers = { 'Accept-Encoding': 'gzip',
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1316 'Accept': '*/*'})
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1317
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1318 self.assertIn(b'foo bar RESULT', f.content)
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1319 self.assertEqual(f.status_code, 200)
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1320
6749
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1321 def test_bad_path(self):
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1322 f = requests.get(self.url_base() + '/_bad>',
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1323 headers = { 'Accept-Encoding': 'gzip, foo',
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1324 'Accept': '*/*'})
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1325
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1326 # test that returned text is encoded.
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1327 self.assertEqual(f.content, b'Not found: _bad&gt;')
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1328 self.assertEqual(f.status_code, 404)
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
1329
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1330 def test_compression_gzipfile(self):
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1331 '''Get the compressed dummy file'''
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 # 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
1334 # 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
1335 # that I get the compressed one.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1336 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
1337 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
1338
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1339 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
1340 bytes_written = f.write(test_text)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1341
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1342 self.assertEqual(bytes_written, 30)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1343
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1344 # test file x-fer
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1345 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
1346 headers = { 'Accept-Encoding': 'gzip, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1347 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1348 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1349 print(f.headers)
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 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
1352 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
1353 'Content-Encoding': 'gzip',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1354 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1355 'Content-Length': '69',
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 # 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
1359 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1360 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
1361 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
1362 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1363
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1364
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1365 # 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
1366 self.assertEqual(f.content, test_text)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1367
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1368 '''# 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
1369
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1370 # 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
1371 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
1372 headers = { 'Accept-Encoding': 'br, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1373 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1374 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1375 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1376
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1377 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
1378 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
1379 'Content-Encoding': 'br',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1380 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1381 'Content-Length': '960',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1382 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1383
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1384 # 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
1385 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1386 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
1387 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
1388 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1389
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1390 try:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1391 from urllib3.response import BrotliDecoder
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1392 # 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
1393 data = f.content
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1394 except ImportError:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1395 # I need to decode
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1396 data = brotli.decompress(f.content)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1397
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1398 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
1399 '''
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1400
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1401 # 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
1402 # 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
1403 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
1404
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1405 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
1406 headers = { 'Accept-Encoding': 'gzip, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1407 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1408 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1409 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1410
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1411 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
1412 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
1413 'Content-Encoding': 'gzip',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1414 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1415 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1416
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1417 # 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
1418 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1419 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
1420 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
1421 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1422
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1423
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1424 # 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
1425 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
1426
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1427 # cleanup
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1428 os.remove(gzfile)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1429
6541
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1430 def test_compression_none_etag(self):
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1431 # use basic auth for rest endpoint
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1432 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
1433 auth=('admin', 'sekrit'),
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1434 headers = {'content-type': "",
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1435 'Accept-Encoding': "",
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1436 'Accept': '*/*'})
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1437 print(f.status_code)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1438 print(f.headers)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1439
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1440 self.assertEqual(f.status_code, 200)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1441 expected = { 'Content-Type': 'application/json',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1442 'Access-Control-Allow-Credentials': 'true',
6541
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1443 '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
1444 }
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1445
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1446 content_str = '''{ "data": {
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1447 "id": "1",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1448 "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
1449 "data": "admin"
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1450 }
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1451 }''' % self.tracker_web_base
6541
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1452 content = json.loads(content_str)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1453
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1454
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1455 if (type("") == type(f.content)):
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1456 json_dict = json.loads(f.content)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1457 else:
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1458 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
1459
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1460 # 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
1461 del(json_dict['data']['@etag'])
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1462
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1463 # 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
1464 # just skip comparing it.
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1465 del(json_dict['data']['type'])
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1466
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1467 self.assertDictEqual(json_dict, content)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1468
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1469 # 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
1470 print(f.headers['ETag'])
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1471 with self.assertRaises(ValueError):
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1472 f.headers['ETag'].index('-')
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1473
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1474 # 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
1475 # content-length etc. from f.headers.
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1476 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
1477
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
1478
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1479 def test_compression_gzip(self, method='gzip'):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1480 if method == 'gzip':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1481 decompressor = None
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1482 elif method == 'br':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1483 decompressor = brotli.decompress
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1484 elif method == 'zstd':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1485 decompressor = zstd.decompress
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1486
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1487 # use basic auth for rest endpoint
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1488 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
1489 auth=('admin', 'sekrit'),
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1490 headers = {'content-type': "",
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1491 'Accept-Encoding': '%s, foo'%method,
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1492 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1493 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1494 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1495
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1496 self.assertEqual(f.status_code, 200)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1497 expected = { 'Content-Type': 'application/json',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1498 'Access-Control-Allow-Credentials': 'true',
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1499 '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
1500 'Content-Encoding': method,
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1501 'Vary': 'Origin, Accept-Encoding',
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1502 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1503
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1504 content_str = '''{ "data": {
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1505 "id": "1",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1506 "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
1507 "data": "admin"
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1508 }
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
1509 }''' % self.tracker_web_base
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1510 content = json.loads(content_str)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1511
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1512 print(f.content)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1513 print(type(f.content))
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1514
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1515 try:
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1516 if (type("") == type(f.content)):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1517 json_dict = json.loads(f.content)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1518 else:
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1519 json_dict = json.loads(b2s(f.content))
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1520 except (ValueError, UnicodeDecodeError):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1521 # 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
1522 # gzip gets decompressed automatically
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1523 # 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
1524 # UnicodeDecodeError - raised by loads on compressed content
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1525 # python3
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1526 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
1527
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1528 # 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
1529 del(json_dict['data']['@etag'])
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1530
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1531 # 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
1532 # just skip comparing it.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1533 del(json_dict['data']['type'])
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1534
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1535 self.assertDictEqual(json_dict, content)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1536
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1537 # verify that ETag header ends with -<method>
6539
f8df7fed18f6 issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents: 6526
diff changeset
1538 try:
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1539 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
1540 except AttributeError:
f8df7fed18f6 issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents: 6526
diff changeset
1541 # 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
1542 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
1543
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1544 # 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
1545 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1546 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
1547
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1548
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1549 # 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
1550 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
1551 auth=('admin', 'sekrit'),
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1552 headers = {'content-type': "",
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1553 'Accept-Encoding': '%s, foo'%method,
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1554 'Accept': '*/*',
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
1555 'Origin': 'https://client.com'})
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1556 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1557 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1558
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1559 # NOTE: not compressed payload too small
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
1560 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
1561 expected = { 'Content-Type': 'application/json',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1562 'Access-Control-Allow-Credentials': 'true',
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
1563 '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
1564 '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
1565 'Vary': 'Origin'
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1566 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1567
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1568 content = { "error":
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1569 {
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
1570 "status": 400,
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
1571 "msg": "Invalid attribute foo"
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1572 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1573 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1574
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1575 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
1576 self.assertDictEqual(json_dict, content)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1577
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1578 # 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
1579 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1580 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
1581
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1582 # test file x-fer
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1583 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
1584 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
1585 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1586 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1587 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1588
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1589 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
1590 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
1591 'Content-Encoding': method,
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1592 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1593 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1594
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1595 # 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
1596 # 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
1597 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
1598 # 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
1599 data = f.content
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1600 else:
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1601 # I need to decode
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1602 data = decompressor(f.content)
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1603
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1604 # check first few bytes.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1605 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
1606
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1607 # 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
1608 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1609 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
1610 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
1611 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1612
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1613 # test file x-fer
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1614 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
1615 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
1616 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1617 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1618 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1619
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1620 self.assertEqual(f.status_code, 200)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1621 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
1622 'Content-Encoding': method,
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1623 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1624 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1625
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1626 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
1627 # 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
1628 data = f.content
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1629 else:
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1630 # I need to decode
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1631 data = decompressor(f.content)
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1632
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1633 # check first few bytes.
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1634 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
1635
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1636 # 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
1637 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1638 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
1639 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
1640 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1641
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1642 @skip_brotli
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1643 def test_compression_br(self):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1644 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
1645
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1646 @skip_zstd
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1647 def test_compression_zstd(self):
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1648 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
1649
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1650 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
1651 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
1652 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
1653 'Accept': '*/*'})
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1654 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
1655 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
1656
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1657 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
1658 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
1659
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1660 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
1661 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
1662 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
1663 'Accept': '*/*'})
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1664 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
1665 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
1666
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1667 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
1668 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
1669
6813
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1670 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
1671 '''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
1672 sure cookie is removed.
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1673 '''
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1674
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1675 session, f = self.create_login_session()
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1676
6813
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1677 # 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
1678 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
1679 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
1680 session.cookies)
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1681
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1682 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
1683 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
1684
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1685 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
1686 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
1687 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
1688 break
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1689
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1690 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
1691
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1692 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
1693 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
1694
6750
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1695 def test_login_fail_then_succeed(self):
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1696
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1697 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
1698 expect_login_ok=False)
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1699
6750
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1700 # 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
1701 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
1702 self.assertNotIn('<b>Hello, admin</b>', f.text)
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1703
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1704 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
1705 self.assertIn('<b>Hello, admin</b>', f.text)
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1706
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1707 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
1708 """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
1709 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
1710 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
1711 """
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1712 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
1713
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1714 # 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
1715 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
1716 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
1717 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
1718
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1719 # 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
1720 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
1721
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1722 if user == 'admin':
8281
669dfccca898 issue2551391 - checkboxes and radiobutton inputs get wrong id's.
John Rouillard <rouilj@ieee.org>
parents: 8270
diff changeset
1723 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
1724 else:
8281
669dfccca898 issue2551391 - checkboxes and radiobutton inputs get wrong id's.
John Rouillard <rouilj@ieee.org>
parents: 8270
diff changeset
1725 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
1726
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1727 # logout
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1728 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
1729 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
1730
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1731 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
1732 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
1733
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1734 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
1735 session, f = self.create_login_session()
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1736
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1737 # 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
1738 self.assertIn('Hello, admin', f.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1739
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1740 # 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
1741 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
1742 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
1743 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
1744 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
1745
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1746 # 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
1747 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
1748
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1749 # 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
1750 # 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
1751 # 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
1752 # search is working correctly.
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1753 # 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
1754 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
1755
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1756 # 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
1757 # seach for unique filename given to it.
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1758 self.assertIn("test1.txt", f.text)
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1759
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1760 # download file and verify content
6570
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1761 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
1762 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
1763 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
1764 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
1765 print(f.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1766
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1767 def test_new_file_via_rest(self):
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1768
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1769 session = requests.Session()
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1770 session.auth = ('admin', 'sekrit')
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1771
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1772 url = self.url_base() + '/rest/data/'
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1773 fname = 'a-bigger-testfile'
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1774 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
1775 c = dict (content = r'xyzzy')
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1776 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
1777 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
1778 'Origin': self.tracker_web_base}
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1779 )
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1780
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1781 # was a 500 before fix for issue2551178
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1782 self.assertEqual(r.status_code, 201)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1783 # 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
1784 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
1785 r.headers["location"])
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1786 json_dict = json.loads(r.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1787 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
1788
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1789 # download file and verify content
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1790 r = session.get(r.headers["location"] +'/content',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1791 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
1792 'Origin': self.tracker_web_base}
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1793 )
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1794 json_dict = json.loads(r.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1795 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
1796 print(r.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1797
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1798 # 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
1799 session.auth = None
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1800 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
1801 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
1802 'Origin': self.tracker_web_base}
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1803 )
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1804 self.assertEqual(r.status_code, 403)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1805
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1806 # get session variable from web form login
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1807 # 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
1808 session, f = self.create_login_session()
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1809 # 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
1810 self.assertIn('Hello, admin', f.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1811
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1812 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
1813 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
1814 'Origin': self.tracker_web_base}
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1815 )
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1816 self.assertEqual(r.status_code, 201)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1817 print(r.status_code)
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1818
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1819 def test_fts(self):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1820 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
1821 self.assertIn("foo bar", f.text)
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1822
7909
80cf6098ea65 issue2551334 - Get test suite to pass using windows python
John Rouillard <rouilj@ieee.org>
parents: 7819
diff changeset
1823 @skip_requests
7819
0fe2b9f6e19f issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents: 7816
diff changeset
1824 class TestFeatureFlagCacheTrackerOff(BaseTestCases, WsgiSetup):
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1825 """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
1826 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
1827 """
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1828 def create_app(self):
7819
0fe2b9f6e19f issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents: 7816
diff changeset
1829 '''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
1830 ff = { "cache_tracker": False }
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1831 if _py3:
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1832 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
1833 else:
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1834 # 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
1835 # 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
1836 return RequestDispatcher(self.dirname, feature_flags=ff)
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1837
7577
0abc225864d1 only run TestPostgresWsgiServer if ostgresl is available.
John Rouillard <rouilj@ieee.org>
parents: 7557
diff changeset
1838 @skip_postgresql
7909
80cf6098ea65 issue2551334 - Get test suite to pass using windows python
John Rouillard <rouilj@ieee.org>
parents: 7819
diff changeset
1839 @skip_requests
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1840 class TestPostgresWsgiServer(BaseTestCases, WsgiSetup):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1841 """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
1842 feature enabled when starting the wsgi server
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1843 """
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1844
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1845 backend = 'postgresql'
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1846
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1847 @classmethod
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1848 def setup_class(cls):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1849 '''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
1850 This instance persists across all tests.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1851 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
1852 create_app() method to be called.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1853
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1854 cribbed from WsgiSetup::setup_class
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1855 '''
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1856
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1857 # tests in this class.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1858 # set up and open a tracker
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1859 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
1860
8414
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1861 # add an auditor that triggers a Reauth
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1862 with open("%s/detectors/reauth.py" % cls.dirname, "w") as f:
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1863 auditor = dedent("""
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1864 from roundup.cgi.exceptions import Reauth
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1865
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1866 def trigger_reauth(db, cl, nodeid, newvalues):
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1867 if 'realname' in newvalues and not hasattr(db, 'reauth_done'):
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1868 raise Reauth('Add an optional message to the user')
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1869
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1870 def init(db):
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1871 db.user.audit('set', trigger_reauth, priority=110)
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1872 """)
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1873 f.write(auditor)
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1874
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1875 # open the database
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1876 cls.db = cls.instance.open('admin')
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1877
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1878 # add a user without edit access for status.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1879 cls.db.user.create(username="fred", roles='User',
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1880 password=password.Password('sekrit'), address='fred@example.com')
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1881
8414
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1882 # add a user for reauth tests
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1883 cls.db.user.create(username="reauth",
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1884 realname="reauth test user",
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1885 password=password.Password("reauth"),
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1886 address="reauth@example.com", roles="User")
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1887
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1888 # 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
1889 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
1890 # 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
1891 cls.db.config.MAILHOST = "localhost"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1892 cls.db.config.MAIL_HOST = "localhost"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1893 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
1894
8414
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1895 # also report it in the web.
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1896 cls.db.config.WEB_DEBUG = "yes"
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1897
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1898 # 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
1899 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
1900 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
1901 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
1902
8414
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1903 # use native indexer
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1904 cls.db.config.INDEXER = "native-fts"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1905
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1906 # 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
1907 # 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
1908 cls.db.config.WEB_LOGIN_ATTEMPTS_MIN = 0
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1909
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1910 # enable static precompressed files
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1911 cls.db.config.WEB_USE_PRECOMPRESSED_FILES = 1
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1912
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1913 cls.db.config.save()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1914
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1915 cls.db.commit()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1916 cls.db.close()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1917
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1918 # 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
1919 cls.db = cls.instance.open('admin')
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1920
8414
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1921 # add an issue to allow testing retrieval.
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1922 # also used for text searching.
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1923 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
1924
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1925 # 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
1926 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
1927 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
1928 date=rdate.Date(),
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1929 messageid="test-msg-id")
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1930
8414
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1931 # add a query using @current_user
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1932 result = cls.db.query.create(
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1933 klass="issue",
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1934 name="I created",
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1935 private_for=None,
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1936 url=("@columns=title,id,activity,status,assignedto&"
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1937 "@sort=activity&@group=priority&@filter=creator&"
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1938 "@pagesize=50&@startwith=0&creator=%40current_user")
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1939 )
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1940
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1941 cls.db.commit()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1942 cls.db.close()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1943
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1944 # 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
1945 # installed directories
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1946 cls.backup_domain = i18n.DOMAIN
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1947 cls.backup_locale_dirs = i18n.LOCALE_DIRS
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1948 i18n.LOCALE_DIRS = ['locale']
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1949 i18n.DOMAIN = ''
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1950
6918
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1951 @classmethod
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1952 def tearDownClass(cls):
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1953 # cleanup
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1954 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
1955
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1956 def test_native_fts(self):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1957 self.assertIn("postgresql_fts", str(self.db.indexer))
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1958
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1959 # 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
1960 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
1961 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
1962
7909
80cf6098ea65 issue2551334 - Get test suite to pass using windows python
John Rouillard <rouilj@ieee.org>
parents: 7819
diff changeset
1963 @skip_requests
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1964 class TestApiRateLogin(WsgiSetup):
8414
cc3edb260c1b feat: fix tests under postgresql.
John Rouillard <rouilj@ieee.org>
parents: 8412
diff changeset
1965 """Test api rate limiting on login use sqlite db.
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1966 """
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1967
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1968 backend = 'sqlite'
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1969
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1970 @classmethod
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1971 def setup_class(cls):
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1972 '''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
1973 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
1974 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
1975 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
1976
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1977 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
1978 '''
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1979
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1980 # tests in this class.
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1981 # 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
1982 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
1983
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1984 # open the database
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1985 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
1986
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1987 # 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
1988 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
1989 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
1990
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1991 # 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
1992 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
1993 # 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
1994 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
1995 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
1996 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
1997
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1998 # 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
1999 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
2000 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
2001 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
2002
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2003 # 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
2004 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
2005 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
2006
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2007 # enable static precompressed files
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2008 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
2009
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2010 cls.db.config.save()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2011
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2012 cls.db.commit()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2013 cls.db.close()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2014
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2015 # 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
2016 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
2017
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2018 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
2019
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2020 # 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
2021 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
2022 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
2023 date=rdate.Date(),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2024 messageid="test-msg-id")
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2025
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2026 cls.db.commit()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2027 cls.db.close()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2028
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2029 # 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
2030 # installed directories
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2031 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
2032 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
2033 i18n.LOCALE_DIRS = ['locale']
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2034 i18n.DOMAIN = ''
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2035
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2036 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
2037 """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
2038 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
2039 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
2040 """
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
2041 # 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
2042 # 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
2043 # 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
2044 # 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
2045 # IPv4 request only.
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
2046 url_base_numeric = self.url_base()
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
2047 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
2048
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2049 # 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
2050 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
2051 # 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
2052
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2053 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
2054 'Origin': self.tracker_web_base,}
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
2055 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
2056 auth=('admin', 'sekrit'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2057 headers=request_headers
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2058 )
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2059 #print(f.status_code)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2060 #print(f.headers)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2061 #print(f.text)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2062
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2063 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
2064
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2065 # 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
2066 headers_expected = {
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2067 '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
2068 '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
2069 'Allow': 'OPTIONS, GET',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2070 '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
2071 '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
2072 }
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2073
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2074 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
2075 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
2076 headers_expected[header])
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2077
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2078
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2079 # 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
2080 # 429
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2081 headers_expected = {
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2082 'Content-Type': 'text/plain'
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2083 }
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2084
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2085 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
2086 # 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
2087
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
2088 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
2089 auth=('admin', 'ekrit'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2090 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
2091 '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
2092 )
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2093
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2094 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
2095 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
2096 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
2097 headers_expected[header])
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2098 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
2099 else:
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2100 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
2101
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2102 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
2103 'X-RateLimit-Limit': '4',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2104 '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
2105 'X-RateLimit-Remaining': '0',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2106 'Retry-After': '3',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2107 'Access-Control-Expose-Headers':
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2108 ('X-RateLimit-Limit, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2109 'X-RateLimit-Remaining, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2110 'X-RateLimit-Reset, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2111 'X-RateLimit-Limit-Period, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2112 'Retry-After'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2113 'Content-Length': '50'}
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2114
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2115 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
2116 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
2117 headers_expected[header])
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2118
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2119 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
2120 10.0, delta=3,
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2121 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
2122
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2123 # 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
2124 # with 429.
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
2125 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
2126 auth=('admin', 'sekrit'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2127 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
2128 '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
2129 )
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2130 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
2131
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2132 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
2133 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
2134 headers_expected[header])
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2135
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2136
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2137 sleep(4)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2138 # 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
2139 # 200 return code.
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
2140 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
2141 auth=('admin', 'sekrit'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2142 headers = {'content-type': "",
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
2143 '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
2144 )
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2145 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
2146 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
2147 print(f.headers)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2148 print(f.text)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2149
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2150 headers_expected = {
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2151 'Content-Type': 'application/json',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2152 'Vary': 'Origin, Accept-Encoding',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2153 'Access-Control-Expose-Headers':
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2154 ( 'X-RateLimit-Limit, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2155 'X-RateLimit-Remaining, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2156 'X-RateLimit-Reset, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2157 'X-RateLimit-Limit-Period, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2158 'Retry-After, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2159 'Sunset, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2160 'Allow'),
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
2161 '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
2162 '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
2163 '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
2164 }
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2165
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
2166 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
2167 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
2168 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
2169
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
2170 expected_data = {
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
2171 "status": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
2172 "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
2173 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
2174 "keyword": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
2175 "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
2176 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
2177 "priority": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
2178 "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
2179 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
2180 "user": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
2181 "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
2182 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
2183 "file": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
2184 "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
2185 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
2186 "msg": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
2187 "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
2188 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
2189 "query": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
2190 "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
2191 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
2192 "issue": {
8248
f6923d2ba9a5 test: issue2551366. Probe for open port in test_liveserver.py
John Rouillard <rouilj@ieee.org>
parents: 8242
diff changeset
2193 "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
2194 }
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
2195 }
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
2196
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
2197 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
2198 self.assertEqual(json_dict['data'], expected_data)

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