##// END OF EJS Templates
release: Merge default into stable for release preparation
release: Merge default into stable for release preparation

File last commit:

r850:cbc05af2 default
r992:2a5ae811 merge stable
Show More
test_wsgi_app_caller.py
96 lines | 3.0 KiB | text/x-python | PythonLexer
/ vcsserver / tests / test_wsgi_app_caller.py
packaging: moved tests into the main library itself. This is consistent with how our other projects do it.
r130 # RhodeCode VCSServer provides access to different vcs backends via network.
code: update copyrights to 2020
r850 # Copyright (C) 2014-2020 RhodeCode GmbH
packaging: moved tests into the main library itself. This is consistent with how our other projects do it.
r130 #
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
import wsgiref.simple_server
import wsgiref.validate
from vcsserver import wsgi_app_caller
# pylint: disable=protected-access,too-many-public-methods
@wsgiref.validate.validator
def demo_app(environ, start_response):
"""WSGI app used for testing."""
data = [
'Hello World!\n',
'input_data=%s\n' % environ['wsgi.input'].read(),
]
for key, value in sorted(environ.items()):
data.append('%s=%s\n' % (key, value))
write = start_response("200 OK", [('Content-Type', 'text/plain')])
write('Old school write method\n')
write('***********************\n')
return data
BASE_ENVIRON = {
'REQUEST_METHOD': 'GET',
'SERVER_NAME': 'localhost',
'SERVER_PORT': '80',
'SCRIPT_NAME': '',
'PATH_INFO': '/',
'QUERY_STRING': '',
'foo.var': 'bla',
}
def test_complete_environ():
environ = dict(BASE_ENVIRON)
data = "data"
wsgi_app_caller._complete_environ(environ, data)
wsgiref.validate.check_environ(environ)
assert data == environ['wsgi.input'].read()
def test_start_response():
start_response = wsgi_app_caller._StartResponse()
status = '200 OK'
headers = [('Content-Type', 'text/plain')]
start_response(status, headers)
assert status == start_response.status
assert headers == start_response.headers
def test_start_response_with_error():
start_response = wsgi_app_caller._StartResponse()
status = '500 Internal Server Error'
headers = [('Content-Type', 'text/plain')]
start_response(status, headers, (None, None, None))
assert status == start_response.status
assert headers == start_response.headers
def test_wsgi_app_caller():
caller = wsgi_app_caller.WSGIAppCaller(demo_app)
environ = dict(BASE_ENVIRON)
input_data = 'some text'
responses, status, headers = caller.handle(environ, input_data)
response = ''.join(responses)
assert status == '200 OK'
assert headers == [('Content-Type', 'text/plain')]
assert response.startswith(
'Old school write method\n***********************\n')
assert 'Hello World!\n' in response
assert 'foo.var=bla\n' in response
assert 'input_data=%s\n' % input_data in response