annotate test/test_liveserver.py @ 6693:9a1f5e496e6c

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

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