annotate test/test_liveserver.py @ 7934:6a13cf7bdca5

test: refactor tests to use create_login_session
author John Rouillard <rouilj@ieee.org>
date Sun, 05 May 2024 20:56:08 -0400
parents 4cca0ae9f901
children f670446b5e50
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
1 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
2
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
3 from roundup import date as rdate
6650
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
4 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
5 from roundup import password
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
6 from roundup.anypy.strings import b2s
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
7 from roundup.cgi.wsgi_handler import RequestDispatcher
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
8 from .wsgi_liveserver import LiveServerTestCase
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
9 from . import db_test_base
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
10 from time import sleep
7578
ec59729b3b7e fix typo
John Rouillard <rouilj@ieee.org>
parents: 7577
diff changeset
11 from .test_postgresql import skip_postgresql
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
12
6548
de5f5f9c02f2 Fix spurious content-ty on 304; xfail css Cache-Control
John Rouillard <rouilj@ieee.org>
parents: 6546
diff changeset
13 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
14
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
15 try:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
16 import requests
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
17 skip_requests = lambda func, *args, **kwargs: func
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
18 except ImportError:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
19 from .pytest_patcher import mark_class
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
20 skip_requests = mark_class(pytest.mark.skip(
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
21 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
22
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
23 try:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
24 import brotli
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
25 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
26 except ImportError:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
27 from .pytest_patcher import mark_class
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
28 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
29 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
30 brotli = None
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
31
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
32 try:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
33 import zstd
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
34 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
35 except ImportError:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
36 from .pytest_patcher import mark_class
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
37 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
38 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
39
6569
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
40 import sys
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
41
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
42 _py3 = sys.version_info[0] > 2
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
43
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
44 @skip_requests
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
45 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
46 # 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
47 # 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
48 # the server is started and has read the config.ini.
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
49 # so only allow one port number
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
50 port_range = (9001, 9001) # default is (8080, 8090)
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
51
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
52 dirname = '_test_instance'
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
53 backend = 'anydbm'
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
54
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
55 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
56
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
57 @classmethod
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
58 def setup_class(cls):
6650
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
59 '''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
60 This instance persists across all tests.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
61 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
62 create_app() method to be called.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
63 '''
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
64 # tests in this class.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
65 # set up and open a tracker
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
66 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
67
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
68 # open the database
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
69 cls.db = cls.instance.open('admin')
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
70
6754
bb04638dc78d Test _generic.item.html to mke sure submit button displayed properly
John Rouillard <rouilj@ieee.org>
parents: 6750
diff changeset
71 # 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
72 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
73 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
74
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
75 # set the url the test instance will run at.
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
76 cls.db.config['TRACKER_WEB'] = "http://localhost:9001/"
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
77 # 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
78 cls.db.config.MAILHOST = "localhost"
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
79 cls.db.config.MAIL_HOST = "localhost"
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
80 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
81
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
82 # 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
83 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
84 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
85 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
86
d308fb5ba9b0 Disable rate limit. Tests log in and trip the limit causeing failures.
John Rouillard <rouilj@ieee.org>
parents: 6754
diff changeset
87 # 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
88 # 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
89 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
90
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
91 # enable static precompressed files
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
92 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
93
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
94 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
95
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
96 # add an issue to allow testing retrieval.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
97 # also used for text searching.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
98 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
99
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
100 # 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
101 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
102 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
103 date=rdate.Date(),
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
104 messageid="test-msg-id")
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
105 cls.db.commit()
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
106 cls.db.close()
6650
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
107
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
108 # Force locale config to find locales in checkout not in
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
109 # installed directories
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
110 cls.backup_domain = i18n.DOMAIN
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
111 cls.backup_locale_dirs = i18n.LOCALE_DIRS
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
112 i18n.LOCALE_DIRS = ['locale']
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
113 i18n.DOMAIN = ''
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
114
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
115 @classmethod
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
116 def teardown_class(cls):
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
117 '''Close the database and delete the tracker directory
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
118 now that the app should be exiting.
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
119 '''
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
120 if cls.db:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
121 cls.db.close()
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
122 try:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
123 shutil.rmtree(cls.dirname)
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
124 except OSError as error:
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
125 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
126 i18n.LOCALE_DIRS = cls.backup_locale_dirs
5be4f9104cf7 Make i18n tests work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6648
diff changeset
127 i18n.DOMAIN = cls.backup_domain
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
128
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
129 def create_app(self):
7819
0fe2b9f6e19f issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents: 7816
diff changeset
130 '''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
131 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
132 '''
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
133
6569
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
134 if _py3:
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
135 return validator(RequestDispatcher(self.dirname))
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
136 else:
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
137 # wsgiref/validator.py InputWrapper::readline is broke and
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
138 # 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
139 return RequestDispatcher(self.dirname)
3ae0c0fb2d08 Fix test_new_file_via_rest
John Rouillard <rouilj@ieee.org>
parents: 6568
diff changeset
140
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
141
7909
80cf6098ea65 issue2551334 - Get test suite to pass using windows python
John Rouillard <rouilj@ieee.org>
parents: 7819
diff changeset
142 @skip_requests
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
143 class BaseTestCases(WsgiSetup):
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
144 """Class with all tests to run against wsgi server. Is reused when
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
145 wsgi server is started with various feature flags
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
146 """
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
147
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
148 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
149 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
150 # Set up session to manage cookies <insert blue monster here>
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
151 session = requests.Session()
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
152 session.headers.update({'Origin': 'http://localhost:9001'})
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
153
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
154 # login using form to get cookie
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
155 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
156 "@action": "login"}
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
157 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
158
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
159 if expect_login_ok:
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
160 # verify we have a cookie
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
161 self.assertIn('roundup_session_Roundupissuetracker',
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
162 session.cookies)
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
163
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
164 if not return_response:
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
165 return session
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
166 return session, response
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
167
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
168 def test_start_page(self):
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
169 """ 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
170 """
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
171 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
172 self.assertEqual(f.status_code, 200)
6383
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
173 self.assertTrue(b'Roundup' in f.content)
e9760702bf0c Add live server test to suite.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
174 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
175
6640
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
176 def test_start_in_german(self):
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
177 """ 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
178 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
179 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
180
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
181 use:
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
182 url parameter @language
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
183 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
184 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
185 """
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
186
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
187 # test url parameter
6640
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
188 f = requests.get(self.url_base() + "?@language=de")
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
189 self.assertEqual(f.status_code, 200)
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
190 print(f.content)
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
191 self.assertTrue(b'Roundup' in f.content)
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
192 self.assertTrue(b'Aufgabenliste' in f.content)
6ac3667706be Test german translation of start page.
John Rouillard <rouilj@ieee.org>
parents: 6570
diff changeset
193 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
194
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
195 # 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
196 bluemonster = f.cookies
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
197 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
198 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
199 print(f.content)
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
200 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
201 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
202 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
203
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
204 # 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
205 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
206 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
207 print(f.content)
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
208 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
209 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
210 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
211 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
212 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
213
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
214 # 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
215 alh = {"Accept-Language":
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
216 "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
217 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
218 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
219 print(f.content)
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
220 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
221 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
222 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
223
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
224 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
225 """ 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
226 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
227 Range: 10-20
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
228 Range: 10-
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
229
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
230 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
231 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
232 Range: -10
6648
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
233
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
234 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
235
53c9b62494e6 Add language test for cookie and accept-header; Test Range header
John Rouillard <rouilj@ieee.org>
parents: 6640
diff changeset
236 """
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
237
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
238 # get whole file uncompressed. Extract content length and etag
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
239 # for future use
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
240 f = requests.get(self.url_base() + "/@@file/style.css",
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
241 headers = {"Accept-Encoding": "identity"})
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
242 # store etag for condition range testing
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
243 etag = f.headers['etag']
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
244 expected_length = f.headers['content-length']
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
245
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
246 # 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
247 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
248 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
249 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
250 self.assertEqual(f.content, b"/* main pag")
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
251 # 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
252 self.assertEqual(f.headers['content-length'], '11')
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
253 self.assertEqual(f.headers['content-range'],
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
254 "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
255
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
256 # 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
257 hdrs = {"Range": "bytes=10-20"}
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
258 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
259 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
260 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
261 # 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
262 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
263 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
264 "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
265
7816
1b5daee24dc7 test: fix test for invalid etag in if-range.
John Rouillard <rouilj@ieee.org>
parents: 7578
diff changeset
266 # 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
267 hdrs = {"Range": "bytes=11-"}
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
268 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
269 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
270 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
271 "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
272 expected_length))
6978
3c4047cdc77a cange type or arg to assertIn from string to byte.
John Rouillard <rouilj@ieee.org>
parents: 6977
diff changeset
273 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
274
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
275 # 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
276 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
277 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
278 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
279 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
280 self.assertEqual(f.content, b"/* main pag")
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
281 # 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
282 self.assertEqual(f.headers['content-length'], '11')
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
283 self.assertEqual(f.headers['content-range'],
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
284 "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
285
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
286 # 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
287 hdrs['If-Range'] = etag[2:] # bad tag
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
288 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
289 self.assertEqual(f.status_code, 200)
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
290 # not checking content length since it could be compressed
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
291 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
292
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
293 # 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
294 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
295 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
296 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
297 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
298 # 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
299 self.assertEqual(len(f.content), int(expected_length))
6655
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
300 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
301
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
302 # 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
303 # 200 code
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
304 hdrs['Range'] = "bytes=0-99999" # too large
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
305 hdrs['If-Range'] = etag # any tag works
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
306 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
307 self.assertEqual(f.status_code, 200)
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
308 # not checking content length since it could be compressed
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
309 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
310
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
311 # 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
312 hdrs['Range'] = "bytes=0-99999" # too large
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
313 del(hdrs['If-Range'])
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
314 print(hdrs)
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
315 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
316 self.assertEqual(f.status_code, 416)
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
317 self.assertEqual(f.headers['content-range'],
a193653d6fa4 Test more range error cases.
John Rouillard <rouilj@ieee.org>
parents: 6651
diff changeset
318 "bytes */%s"%expected_length)
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
319
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
320 # invalid range multiple ranges
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
321 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
322 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
323 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
324 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
325 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
326 '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
327 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
328
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
329 # 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
330 hdrs['Range'] = "bytes=1"
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
331 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
332 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
333 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
334 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
335 '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
336 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
337
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
338 # 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
339 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
340 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
341 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
342 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
343 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
344 '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
345 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
346
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
347 # 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
348 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
349 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
350 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
351 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
352 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
353 '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
354 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
355
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
356 # 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
357 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
358 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
359 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
360 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
361 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
362 '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
363 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
364
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
365 # range is invalid #2 < #1
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
366 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
367 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
368 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
369 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
370 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
371 '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
372 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
373
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
374 # 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
375 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
376 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
377 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
378 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
379 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
380 '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
381 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
382
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
383 # 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
384 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
385 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
386 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
387 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
388 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
389 '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
390 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
391
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
392 # range is unsupported units
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
393 hdrs['Range'] = "badunits=1-11"
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
394 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
395 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
396 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
397 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
398 '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
399 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
400
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
401
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
402 # valid range, invalid file
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
403 hdrs['Range'] = "bytes=0-11"
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
404 print(hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
405 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
406 headers=hdrs)
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
407 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
408 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
409 '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
410
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
411 def test_rest_preflight_collection(self):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
412 # no auth for rest csrf preflight
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
413 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
414 headers = {'content-type': "",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
415 'x-requested-with': "rest",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
416 'Access-Control-Request-Headers':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
417 "x-requested-with",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
418 'Access-Control-Request-Method': "PUT",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
419 'Origin': "https://client.com"})
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
420 print(f.status_code)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
421 print(f.headers)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
422 print(f.content)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
423
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
424 self.assertEqual(f.status_code, 204)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
425
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
426 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
427 '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
428 'Allow': 'OPTIONS, GET, POST',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
429 'Access-Control-Allow-Methods': 'OPTIONS, GET, POST',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
430 'Access-Control-Allow-Credentials': 'true',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
431 }
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
432
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
433 # 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
434 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
435 f.headers.items() if key in expected },
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
436 expected)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
437
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
438 # use invalid Origin
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
439 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
440 headers = {'content-type': "application/json",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
441 'x-requested-with': "rest",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
442 'Access-Control-Request-Headers':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
443 "x-requested-with",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
444 'Access-Control-Request-Method': "PUT",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
445 'Origin': "ZZZ"})
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
446
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
447 self.assertEqual(f.status_code, 400)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
448
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
449 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
450 'allowed to use Rest Interface." } }'
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
451 self.assertEqual(b2s(f.content), expected)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
452
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
453 # Test when Origin is not sent.
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
454 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
455 headers = {'content-type': "application/json",
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
456 'x-requested-with': "rest",
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
457 'Access-Control-Request-Headers':
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
458 "x-requested-with",
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
459 'Access-Control-Request-Method': "PUT",})
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
460
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
461 self.assertEqual(f.status_code, 400)
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
462
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
463 expected = ('{ "error": { "status": 400, "msg": "Required'
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
464 ' Header Missing" } }')
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
465 self.assertEqual(b2s(f.content), expected)
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
466
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
467
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
468 def test_rest_invalid_method_collection(self):
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
469 # use basic auth for rest endpoint
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
470 f = requests.put(self.url_base() + '/rest/data/user',
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
471 auth=('admin', 'sekrit'),
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
472 headers = {'content-type': "",
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
473 'X-Requested-With': "rest",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
474 'Origin': "https://client.com"})
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
475 print(f.status_code)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
476 print(f.headers)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
477 print(f.content)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
478
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
479 self.assertEqual(f.status_code, 405)
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
480 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
481 'Access-Control-Allow-Credentials': 'true',
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
482 'Allow': 'DELETE, GET, OPTIONS, POST',
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
483 }
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
484
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
485 print(f.headers)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
486 # use dict comprehension to remove fields like date,
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
487 # content-length etc. from f.headers.
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
488 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
489
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
490 content = json.loads(f.content)
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
491
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
492 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
493 self.assertEqual(exp_content, content['error']['msg'])
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
494
6386
2a2da73e1e26 Remove Connection: close header for 501 error handling rest
John Rouillard <rouilj@ieee.org>
parents: 6385
diff changeset
495 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
496 """ 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
497
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
498 # 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
499 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
500 headers = {'content-type': ""})
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
501 # 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
502 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
503
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
504 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
505 # 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
506 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
507 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
508 headers = {'content-type': "",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
509 'Origin': "http://localhost:9001",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
510 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
511 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
512 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
513
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
514 self.assertEqual(f.status_code, 204)
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
515 expected = { 'Access-Control-Allow-Origin': 'http://localhost:9001',
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
516 '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
517 'Allow': 'OPTIONS, GET',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
518 'Access-Control-Allow-Credentials': 'true',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
519 'Access-Control-Allow-Methods': 'OPTIONS, GET',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
520 '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
521 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
522
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
523 # 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
524 # 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
525 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
526
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
527 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
528 # 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
529 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
530 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
531 headers = {'content-type': "",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
532 'Origin': "http://localhost:9001",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
533 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
534 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
535 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
536
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
537 self.assertEqual(f.status_code, 204)
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
538 expected = { 'Access-Control-Allow-Origin': 'http://localhost:9001',
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
539 '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
540 'Allow': 'OPTIONS, GET',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
541 'Access-Control-Allow-Methods': 'OPTIONS, GET',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
542 '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
543 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
544
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
545 # 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
546 # 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
547 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
548
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
549 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
550 # 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
551 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
552 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
553 headers = {'content-type': "",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
554 'Origin': "http://localhost:9001",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
555 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
556 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
557 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
558
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
559 self.assertEqual(f.status_code, 204)
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
560 expected = { 'Access-Control-Allow-Origin': 'http://localhost:9001',
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
561 '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
562 'Allow': 'OPTIONS, GET, POST',
6526
3c8322e3fe25 Fix test and remove pdb invocation.
John Rouillard <rouilj@ieee.org>
parents: 6525
diff changeset
563 '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
564 '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
565 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
566
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
567 # 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
568 # 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
569 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
570
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
571
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
572 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
573
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
574 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
575 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
576 headers = {'content-type': "",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
577 'Origin': "http://localhost:9001",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
578 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
579 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
580 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
581
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
582 self.assertEqual(f.status_code, 204)
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
583 expected = { 'Access-Control-Allow-Origin': 'http://localhost:9001',
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
584 '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
585 'Allow': 'OPTIONS, GET, PUT, DELETE, PATCH',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
586 '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
587 '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
588 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
589
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
590 # 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
591 # 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
592 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
593
6385
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
594 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
595 # 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
596 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
597 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
598 headers = {'content-type': "",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
599 'Origin': "http://localhost:9001",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
600 })
6384
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
601 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
602 print(f.headers)
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
603
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
604 self.assertEqual(f.status_code, 204)
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
605 expected = { 'Access-Control-Allow-Origin': 'http://localhost:9001',
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
606 '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
607 'Allow': 'OPTIONS, GET, PUT, DELETE, PATCH',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
608 '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
609 '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
610 }
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
611
66a061e52435 Test options in rest interface against live server; rest doc update
John Rouillard <rouilj@ieee.org>
parents: 6383
diff changeset
612 # 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
613 # 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
614 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
615
6385
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
616 ## test a read only property.
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
617
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
618 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
619 auth=('admin', 'sekrit'),
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
620 headers = {'content-type': "",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
621 'Origin': "http://localhost:9001",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
622 })
6385
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
623 print(f.status_code)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
624 print(f.headers)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
625
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
626 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
627 expected1 = dict(expected)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
628 expected1['Allow'] = 'OPTIONS, GET'
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
629 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
630
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
631 # 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
632 # 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
633 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
634
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
635 ## 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
636 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
637 auth=('admin', 'sekrit'),
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
638 headers = {'content-type': "",
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
639 'Origin': "http://localhost:9001",})
6385
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
640 print(f.status_code)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
641 print(f.headers)
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
642
8c43129f29ca Rename test: element => attribute; test readonly and missing attribute
John Rouillard <rouilj@ieee.org>
parents: 6384
diff changeset
643 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
644
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
645 def test_ims(self):
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
646 ''' retreive the user_utils.js file with old and new
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
647 if-modified-since timestamps.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
648 '''
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
649 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
650
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
651 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
652 headers = { 'Accept-Encoding': 'gzip, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
653 '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
654 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
655 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
656 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
657
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
658 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
659 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
660 'Content-Encoding': 'gzip',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
661 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
662 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
663
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
664 # 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
665 # etag etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
666 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
667
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
668 # now use today's date
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
669 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
670 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
671 headers = { 'Accept-Encoding': 'gzip, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
672 '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
673 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
674 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
675 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
676
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
677 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
678 expected = { 'Vary': 'Accept-Encoding',
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
679 'Content-Length': '0',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
680 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
681
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
682 # 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
683 # etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
684 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
685
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
686
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
687 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
688 for tail in [
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
689 '/issue1', # normal url
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
690 '/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
691 '/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
692 ]:
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
693 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
694 headers = { 'Accept-Encoding': 'gzip',
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
695 'Accept': '*/*'})
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
696
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
697 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
698 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
699
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
700 def test_load_msg1(self):
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
701 # 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
702 f = requests.get(self.url_base() + '/msg0001',
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
703 headers = { 'Accept-Encoding': 'gzip',
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
704 'Accept': '*/*'})
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
705
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
706 self.assertIn(b'foo bar RESULT', f.content)
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
707 self.assertEqual(f.status_code, 200)
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
708
6749
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
709 def test_bad_path(self):
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
710 f = requests.get(self.url_base() + '/_bad>',
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
711 headers = { 'Accept-Encoding': 'gzip, foo',
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
712 'Accept': '*/*'})
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
713
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
714 # test that returned text is encoded.
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
715 self.assertEqual(f.content, b'Not found: _bad&gt;')
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
716 self.assertEqual(f.status_code, 404)
be3fd5e9577e Add test for incorrect url.
John Rouillard <rouilj@ieee.org>
parents: 6747
diff changeset
717
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
718 def test_compression_gzipfile(self):
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
719 '''Get the compressed dummy file'''
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
720
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
721 # 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
722 # 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
723 # that I get the compressed one.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
724 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
725 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
726
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
727 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
728 bytes_written = f.write(test_text)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
729
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
730 self.assertEqual(bytes_written, 30)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
731
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
732 # test file x-fer
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
733 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
734 headers = { 'Accept-Encoding': 'gzip, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
735 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
736 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
737 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
738
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
739 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
740 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
741 'Content-Encoding': 'gzip',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
742 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
743 'Content-Length': '69',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
744 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
745
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
746 # 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
747 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
748 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
749 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
750 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
751
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
752
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
753 # 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
754 self.assertEqual(f.content, test_text)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
755
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
756 '''# 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
757
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
758 # 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
759 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
760 headers = { 'Accept-Encoding': 'br, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
761 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
762 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
763 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
764
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
765 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
766 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
767 'Content-Encoding': 'br',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
768 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
769 'Content-Length': '960',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
770 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
771
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
772 # 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
773 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
774 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
775 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
776 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
777
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
778 try:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
779 from urllib3.response import BrotliDecoder
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
780 # 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
781 data = f.content
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
782 except ImportError:
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
783 # I need to decode
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
784 data = brotli.decompress(f.content)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
785
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
786 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
787 '''
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
788
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
789 # 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
790 # 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
791 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
792
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
793 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
794 headers = { 'Accept-Encoding': 'gzip, foo',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
795 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
796 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
797 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
798
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
799 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
800 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
801 'Content-Encoding': 'gzip',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
802 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
803 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
804
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
805 # 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
806 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
807 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
808 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
809 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
810
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
811
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
812 # 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
813 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
814
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
815 # cleanup
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
816 os.remove(gzfile)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
817
6541
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
818 def test_compression_none_etag(self):
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
819 # use basic auth for rest endpoint
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
820 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
821 auth=('admin', 'sekrit'),
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
822 headers = {'content-type': "",
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
823 'Accept-Encoding': "",
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
824 'Accept': '*/*'})
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
825 print(f.status_code)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
826 print(f.headers)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
827
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
828 self.assertEqual(f.status_code, 200)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
829 expected = { 'Content-Type': 'application/json',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
830 'Access-Control-Allow-Credentials': 'true',
6541
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
831 '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
832 }
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
833
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
834 content_str = '''{ "data": {
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
835 "id": "1",
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
836 "link": "http://localhost:9001/rest/data/user/1/username",
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
837 "data": "admin"
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
838 }
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
839 }'''
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
840 content = json.loads(content_str)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
841
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
842
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
843 if (type("") == type(f.content)):
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
844 json_dict = json.loads(f.content)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
845 else:
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
846 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
847
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
848 # 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
849 del(json_dict['data']['@etag'])
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
850
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
851 # 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
852 # just skip comparing it.
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
853 del(json_dict['data']['type'])
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
854
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
855 self.assertDictEqual(json_dict, content)
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
856
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
857 # 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
858 print(f.headers['ETag'])
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
859 with self.assertRaises(ValueError):
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
860 f.headers['ETag'].index('-')
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
861
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
862 # 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
863 # content-length etc. from f.headers.
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
864 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
865
c8f3ec942e29 Test case where there is no content-encoding.
John Rouillard <rouilj@ieee.org>
parents: 6539
diff changeset
866
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
867 def test_compression_gzip(self, method='gzip'):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
868 if method == 'gzip':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
869 decompressor = None
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
870 elif method == 'br':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
871 decompressor = brotli.decompress
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
872 elif method == 'zstd':
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
873 decompressor = zstd.decompress
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
874
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
875 # use basic auth for rest endpoint
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
876 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
877 auth=('admin', 'sekrit'),
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
878 headers = {'content-type': "",
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
879 'Accept-Encoding': '%s, foo'%method,
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
880 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
881 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
882 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
883
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
884 self.assertEqual(f.status_code, 200)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
885 expected = { 'Content-Type': 'application/json',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
886 'Access-Control-Allow-Credentials': 'true',
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
887 '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
888 'Content-Encoding': method,
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
889 'Vary': 'Origin, Accept-Encoding',
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
890 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
891
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
892 content_str = '''{ "data": {
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
893 "id": "1",
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
894 "link": "http://localhost:9001/rest/data/user/1/username",
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
895 "data": "admin"
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
896 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
897 }'''
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
898 content = json.loads(content_str)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
899
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
900 print(f.content)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
901 print(type(f.content))
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
902
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
903 try:
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
904 if (type("") == type(f.content)):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
905 json_dict = json.loads(f.content)
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
906 else:
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
907 json_dict = json.loads(b2s(f.content))
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
908 except (ValueError, UnicodeDecodeError):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
909 # 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
910 # gzip gets decompressed automatically
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
911 # 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
912 # UnicodeDecodeError - raised by loads on compressed content
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
913 # python3
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
914 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
915
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
916 # 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
917 del(json_dict['data']['@etag'])
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
918
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
919 # 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
920 # just skip comparing it.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
921 del(json_dict['data']['type'])
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
922
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
923 self.assertDictEqual(json_dict, content)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
924
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
925 # verify that ETag header ends with -<method>
6539
f8df7fed18f6 issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents: 6526
diff changeset
926 try:
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
927 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
928 except AttributeError:
f8df7fed18f6 issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents: 6526
diff changeset
929 # 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
930 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
931
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
932 # 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
933 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
934 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
935
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
936
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
937 # 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
938 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
939 auth=('admin', 'sekrit'),
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
940 headers = {'content-type': "",
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
941 'Accept-Encoding': '%s, foo'%method,
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
942 'Accept': '*/*',
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
943 'Origin': 'https://client.com'})
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
944 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
945 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
946
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
947 # NOTE: not compressed payload too small
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
948 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
949 expected = { 'Content-Type': 'application/json',
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
950 'Access-Control-Allow-Credentials': 'true',
7150
72a54826ff4f better rest Origin check; refactor CORS preflight code.
John Rouillard <rouilj@ieee.org>
parents: 6978
diff changeset
951 '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
952 '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
953 'Vary': 'Origin'
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
954 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
955
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
956 content = { "error":
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
957 {
6525
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
958 "status": 400,
c505c774a94d Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents: 6509
diff changeset
959 "msg": "Invalid attribute foo"
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
960 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
961 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
962
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
963 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
964 self.assertDictEqual(json_dict, content)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
965
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
966 # 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
967 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
968 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
969
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
970 # test file x-fer
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
971 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
972 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
973 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
974 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
975 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
976
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
977 self.assertEqual(f.status_code, 200)
6897
d9c9f5b81d4d application/javascript is now text/javascript
John Rouillard <rouilj@ieee.org>
parents: 6813
diff changeset
978 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
979 'Content-Encoding': method,
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
980 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
981 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
982
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
983 # 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
984 # 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
985 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
986 # 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
987 data = f.content
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
988 else:
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
989 # I need to decode
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
990 data = decompressor(f.content)
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
991
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
992 # check first few bytes.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
993 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
994
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
995 # 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
996 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
997 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
998 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
999 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1000
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1001 # test file x-fer
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1002 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
1003 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
1004 'Accept': '*/*'})
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1005 print(f.status_code)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1006 print(f.headers)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1007
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1008 self.assertEqual(f.status_code, 200)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1009 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
1010 'Content-Encoding': method,
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1011 'Vary': 'Accept-Encoding',
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1012 }
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1013
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1014 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
1015 # 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
1016 data = f.content
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1017 else:
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1018 # I need to decode
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1019 data = decompressor(f.content)
6458
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1020
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1021 # check first few bytes.
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1022 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
1023
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1024 # 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
1025 # content-length etc. from f.headers.
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1026 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
1027 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
1028 expected)
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1029
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1030 @skip_brotli
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1031 def test_compression_br(self):
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1032 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
1033
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1034 @skip_zstd
8f1b91756457 issue2551147 - Enable compression of http responses in roundup.
John Rouillard <rouilj@ieee.org>
parents: 6386
diff changeset
1035 def test_compression_zstd(self):
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1036 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
1037
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1038 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
1039 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
1040 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
1041 'Accept': '*/*'})
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1042 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
1043 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
1044
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1045 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
1046 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
1047
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1048 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
1049 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
1050 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
1051 'Accept': '*/*'})
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1052 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
1053 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
1054
c58c7cd31243 issue2550991 - Some mechanism to set expiration header or max age for static resources
John Rouillard <rouilj@ieee.org>
parents: 6541
diff changeset
1055 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
1056 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
1057
6813
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1058 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
1059 '''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
1060 sure cookie is removed.
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1061 '''
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1062
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1063 session, f = self.create_login_session()
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1064
6813
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1065 # 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
1066 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
1067 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
1068 session.cookies)
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1069
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1070 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
1071 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
1072
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1073 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
1074 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
1075 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
1076 break
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1077
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1078 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
1079
6b636fb29740 Refactor client.py session cookie code. Remove session db access.
John Rouillard <rouilj@ieee.org>
parents: 6758
diff changeset
1080 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
1081 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
1082
6750
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1083 def test_login_fail_then_succeed(self):
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1084
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1085 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
1086 expect_login_ok=False)
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1087
6750
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1088 # 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
1089 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
1090 self.assertNotIn('<b>Hello, admin</b>', f.text)
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1091
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1092 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
1093 self.assertIn('<b>Hello, admin</b>', f.text)
c63ddea96fcb Test form login failure code path.
John Rouillard <rouilj@ieee.org>
parents: 6749
diff changeset
1094
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1095 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
1096 """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
1097 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
1098 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
1099 """
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1100 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
1101
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1102 # 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
1103 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
1104 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
1105 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
1106
7934
6a13cf7bdca5 test: refactor tests to use create_login_session
John Rouillard <rouilj@ieee.org>
parents: 7916
diff changeset
1107 # 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
1108 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
1109
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1110 if user == 'admin':
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1111 self.assertIn(b'<input name="submit_button" type="submit" value="Submit Changes">', f.content)
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1112 else:
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1113 self.assertNotIn(b'<input 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
1114
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1115 # logout
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1116 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
1117 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
1118
6758
6d4ac1ae2ae8 Mark test__generic_item_template_editbad as xfail
John Rouillard <rouilj@ieee.org>
parents: 6757
diff changeset
1119 @pytest.mark.xfail
6757
f6dd6cd920bc Split edit ok and edit not ok test into two tests.
John Rouillard <rouilj@ieee.org>
parents: 6756
diff changeset
1120 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
1121 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
1122
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1123 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
1124 session, f = self.create_login_session()
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1125
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1126 # 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
1127 self.assertIn('Hello, admin', f.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1128
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1129 # 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
1130 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
1131 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
1132 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
1133 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
1134
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1135 # 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
1136 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
1137
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1138 # 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
1139 # 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
1140 # 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
1141 # search is working correctly.
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1142 # use groupdict for python2.
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1143 self.assertEqual('http://localhost:9001/issue%(issue)s?@ok_message=file%%20%(file)s%%20created%%0Aissue%%20%(issue)s%%20created&@template=item'%m.groupdict(), f.url)
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1144
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1145 # 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
1146 # seach for unique filename given to it.
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1147 self.assertIn("test1.txt", f.text)
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1148
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1149 # download file and verify content
6570
198875530c04 fix test_new_issue_with_file_upload
John Rouillard <rouilj@ieee.org>
parents: 6569
diff changeset
1150 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
1151 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
1152 self.assertEqual(f.headers["X-Content-Type-Options"], "nosniff")
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1153 print(f.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1154
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1155 def test_new_file_via_rest(self):
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1156
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1157 session = requests.Session()
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1158 session.auth = ('admin', 'sekrit')
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1159
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1160 url = self.url_base() + '/rest/data/'
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1161 fname = 'a-bigger-testfile'
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1162 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
1163 c = dict (content = r'xyzzy')
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1164 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
1165 headers = {'x-requested-with': "rest",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1166 'Origin': "http://localhost:9001"}
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1167 )
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1168
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1169 # was a 500 before fix for issue2551178
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1170 self.assertEqual(r.status_code, 201)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1171 # just compare the path leave off the number
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1172 self.assertIn('http://localhost:9001/rest/data/file/',
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1173 r.headers["location"])
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1174 json_dict = json.loads(r.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1175 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
1176
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1177 # download file and verify content
6693
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1178 r = session.get(r.headers["location"] +'/content',
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1179 headers = {'x-requested-with': "rest",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1180 'Origin': "http://localhost:9001"}
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1181 )
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1182 json_dict = json.loads(r.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1183 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
1184 print(r.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1185
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1186 # 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
1187 session.auth = None
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1188 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
1189 headers = {'x-requested-with': "rest",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1190 'Origin': "http://localhost:9001"}
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1191 )
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1192 self.assertEqual(r.status_code, 403)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1193
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1194 # get session variable from web form login
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1195 # 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
1196 session, f = self.create_login_session()
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1197 # 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
1198 self.assertIn('Hello, admin', f.text)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1199
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1200 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
1201 headers = {'x-requested-with': "rest",
9a1f5e496e6c issue2551203 - Add support for CORS preflight request
John Rouillard <rouilj@ieee.org>
parents: 6655
diff changeset
1202 'Origin': "http://localhost:9001"}
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1203 )
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1204 self.assertEqual(r.status_code, 201)
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1205 print(r.status_code)
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1206
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1207 def test_fts(self):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1208 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
1209 self.assertIn("foo bar", f.text)
6567
34199d2fef48 issue2551178 - Traceback in Apache WSGI (file upload)
John Rouillard <rouilj@ieee.org>
parents: 6548
diff changeset
1210
7909
80cf6098ea65 issue2551334 - Get test suite to pass using windows python
John Rouillard <rouilj@ieee.org>
parents: 7819
diff changeset
1211 @skip_requests
7819
0fe2b9f6e19f issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents: 7816
diff changeset
1212 class TestFeatureFlagCacheTrackerOff(BaseTestCases, WsgiSetup):
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1213 """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
1214 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
1215 """
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1216 def create_app(self):
7819
0fe2b9f6e19f issue2551212 - enable wsgi cache_tracker by default
John Rouillard <rouilj@ieee.org>
parents: 7816
diff changeset
1217 '''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
1218 ff = { "cache_tracker": False }
6747
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1219 if _py3:
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1220 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
1221 else:
d32d43e4a5ba wsgi can cache tracker instance enabled by feature flag.
John Rouillard <rouilj@ieee.org>
parents: 6693
diff changeset
1222 # 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
1223 # 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
1224 return RequestDispatcher(self.dirname, feature_flags=ff)
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1225
7577
0abc225864d1 only run TestPostgresWsgiServer if ostgresl is available.
John Rouillard <rouilj@ieee.org>
parents: 7557
diff changeset
1226 @skip_postgresql
7909
80cf6098ea65 issue2551334 - Get test suite to pass using windows python
John Rouillard <rouilj@ieee.org>
parents: 7819
diff changeset
1227 @skip_requests
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1228 class TestPostgresWsgiServer(BaseTestCases, WsgiSetup):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1229 """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
1230 feature enabled when starting the wsgi server
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1231 """
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1232
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1233 backend = 'postgresql'
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1234
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1235 @classmethod
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1236 def setup_class(cls):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1237 '''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
1238 This instance persists across all tests.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1239 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
1240 create_app() method to be called.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1241
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1242 cribbed from WsgiSetup::setup_class
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1243 '''
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1244
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1245 # tests in this class.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1246 # set up and open a tracker
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1247 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
1248
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1249 # open the database
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1250 cls.db = cls.instance.open('admin')
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1251
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1252 # add a user without edit access for status.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1253 cls.db.user.create(username="fred", roles='User',
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1254 password=password.Password('sekrit'), address='fred@example.com')
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1255
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1256 # set the url the test instance will run at.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1257 cls.db.config['TRACKER_WEB'] = "http://localhost:9001/"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1258 # 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
1259 cls.db.config.MAILHOST = "localhost"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1260 cls.db.config.MAIL_HOST = "localhost"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1261 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
1262
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1263 # 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
1264 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
1265 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
1266 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
1267
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1268 cls.db.config.INDEXER = "native-fts"
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1269
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1270 # 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
1271 # 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
1272 cls.db.config.WEB_LOGIN_ATTEMPTS_MIN = 0
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1273
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1274 # enable static precompressed files
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1275 cls.db.config.WEB_USE_PRECOMPRESSED_FILES = 1
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1276
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1277 cls.db.config.save()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1278
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1279 cls.db.commit()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1280 cls.db.close()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1281
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1282 # 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
1283 cls.db = cls.instance.open('admin')
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1284
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1285 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
1286
6977
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1287 # 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
1288 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
1289 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
1290 date=rdate.Date(),
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1291 messageid="test-msg-id")
ff2c8b430738 flake8 - remove re.compile from method arg + test + doc
John Rouillard <rouilj@ieee.org>
parents: 6918
diff changeset
1292
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1293 cls.db.commit()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1294 cls.db.close()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1295
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1296 # 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
1297 # installed directories
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1298 cls.backup_domain = i18n.DOMAIN
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1299 cls.backup_locale_dirs = i18n.LOCALE_DIRS
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1300 i18n.LOCALE_DIRS = ['locale']
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1301 i18n.DOMAIN = ''
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1302
6918
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1303 @classmethod
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1304 def tearDownClass(cls):
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1305 # cleanup
cb2ed1e8c852 Change method for settin indexer; have test_livetest for pg cleanup
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1306 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
1307
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1308 def test_native_fts(self):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1309 self.assertIn("postgresql_fts", str(self.db.indexer))
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1310
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6897
diff changeset
1311 # 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
1312 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
1313 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
1314
7909
80cf6098ea65 issue2551334 - Get test suite to pass using windows python
John Rouillard <rouilj@ieee.org>
parents: 7819
diff changeset
1315 @skip_requests
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1316 class TestApiRateLogin(WsgiSetup):
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1317 """Class to run test in BaseTestCases with the cache_tracker
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1318 feature flag enabled when starting the wsgi server
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1319 """
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1320
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1321 backend = 'sqlite'
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1322
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1323 @classmethod
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1324 def setup_class(cls):
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1325 '''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
1326 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
1327 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
1328 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
1329
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1330 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
1331 '''
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1332
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1333 # tests in this class.
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1334 # 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
1335 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
1336
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1337 # open the database
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1338 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
1339
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1340 # 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
1341 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
1342 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
1343
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1344 # set the url the test instance will run at.
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1345 cls.db.config['TRACKER_WEB'] = "http://localhost:9001/"
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1346 # 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
1347 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
1348 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
1349 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
1350
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1351 # 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
1352 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
1353 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
1354 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
1355
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1356 # 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
1357 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
1358 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
1359
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1360 # enable static precompressed files
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1361 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
1362
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1363 cls.db.config.save()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1364
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1365 cls.db.commit()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1366 cls.db.close()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1367
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1368 # 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
1369 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
1370
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1371 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
1372
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1373 # 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
1374 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
1375 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
1376 date=rdate.Date(),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1377 messageid="test-msg-id")
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1378
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1379 cls.db.commit()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1380 cls.db.close()
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1381
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1382 # 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
1383 # installed directories
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1384 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
1385 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
1386 i18n.LOCALE_DIRS = ['locale']
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1387 i18n.DOMAIN = ''
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1388
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1389 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
1390 """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
1391 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
1392 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
1393 """
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1394 # 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
1395 # 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
1396 # 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
1397 # 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
1398 # IPv4 request only.
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1399 url_base_numeric = self.url_base()
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1400 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
1401
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1402 # 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
1403 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
1404 # 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
1405
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1406 request_headers = {'content-type': "",
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1407 'Origin': "http://localhost:9001",}
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1408 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
1409 auth=('admin', 'sekrit'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1410 headers=request_headers
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1411 )
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1412 #print(f.status_code)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1413 #print(f.headers)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1414 #print(f.text)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1415
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1416 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
1417
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1418 # 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
1419 headers_expected = {
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1420 '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
1421 '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
1422 'Allow': 'OPTIONS, GET',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1423 '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
1424 '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
1425 }
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1426
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1427 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
1428 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
1429 headers_expected[header])
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1430
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1431
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1432 # 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
1433 # 429
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1434 headers_expected = {
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1435 'Content-Type': 'text/plain'
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1436 }
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1437
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1438 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
1439 # 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
1440
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1441 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
1442 auth=('admin', 'ekrit'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1443 headers = {'content-type': "",
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1444 'Origin': "http://localhost:9001",}
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1445 )
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1446
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1447 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
1448 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
1449 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
1450 headers_expected[header])
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1451 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
1452 else:
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1453 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
1454
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1455 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
1456 'X-RateLimit-Limit': '4',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1457 '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
1458 'X-RateLimit-Remaining': '0',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1459 'Retry-After': '3',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1460 'Access-Control-Expose-Headers':
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1461 ('X-RateLimit-Limit, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1462 'X-RateLimit-Remaining, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1463 'X-RateLimit-Reset, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1464 'X-RateLimit-Limit-Period, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1465 'Retry-After'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1466 'Content-Length': '50'}
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1467
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1468 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
1469 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
1470 headers_expected[header])
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1471
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1472 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
1473 10.0, delta=3,
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1474 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
1475
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1476 # 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
1477 # with 429.
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1478 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
1479 auth=('admin', 'sekrit'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1480 headers = {'content-type': "",
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1481 'Origin': "http://localhost:9001",}
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1482 )
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1483 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
1484
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1485 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
1486 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
1487 headers_expected[header])
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1488
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1489
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1490 sleep(4)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1491 # 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
1492 # 200 return code.
7916
4cca0ae9f901 issue2551334 - get test suite running under windows
John Rouillard <rouilj@ieee.org>
parents: 7909
diff changeset
1493 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
1494 auth=('admin', 'sekrit'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1495 headers = {'content-type': "",
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1496 'Origin': "http://localhost:9001",}
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1497 )
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1498 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
1499 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
1500 print(f.headers)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1501 print(f.text)
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1502
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1503 headers_expected = {
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1504 'Content-Type': 'application/json',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1505 'Vary': 'Origin, Accept-Encoding',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1506 'Access-Control-Expose-Headers':
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1507 ( 'X-RateLimit-Limit, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1508 'X-RateLimit-Remaining, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1509 'X-RateLimit-Reset, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1510 'X-RateLimit-Limit-Period, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1511 'Retry-After, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1512 'Sunset, '
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1513 'Allow'),
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1514 'Access-Control-Allow-Origin': 'http://localhost:9001',
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1515 '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
1516 '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
1517 }
7556
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1518
273c8c2b5042 fix(api): - issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
John Rouillard <rouilj@ieee.org>
parents: 7159
diff changeset
1519 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
1520 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
1521 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
1522
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1523 expected_data = {
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1524 "status": {
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1525 "link": "http://localhost:9001/rest/data/status"
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1526 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1527 "keyword": {
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1528 "link": "http://localhost:9001/rest/data/keyword"
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1529 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1530 "priority": {
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1531 "link": "http://localhost:9001/rest/data/priority"
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1532 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1533 "user": {
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1534 "link": "http://localhost:9001/rest/data/user"
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1535 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1536 "file": {
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1537 "link": "http://localhost:9001/rest/data/file"
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1538 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1539 "msg": {
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1540 "link": "http://localhost:9001/rest/data/msg"
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1541 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1542 "query": {
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1543 "link": "http://localhost:9001/rest/data/query"
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1544 },
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1545 "issue": {
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1546 "link": "http://localhost:9001/rest/data/issue"
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1547 }
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1548 }
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1549
7b481ec7f169 test: fix test_rest_login_RateLimit CI has different char numbers
John Rouillard <rouilj@ieee.org>
parents: 7556
diff changeset
1550 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
1551 self.assertEqual(json_dict['data'], expected_data)

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