fa3adb968b
Moves all tests under orm/services/audit_server to top level tests folder, making minimal necessary changes to get them working. Change-Id: Ia1ed4d2db2e0f75b110ba0d2c4f5658930a1b1ad
156 lines
6.2 KiB
Python
Executable File
156 lines
6.2 KiB
Python
Executable File
"""Base classes for API tests."""
|
|
|
|
import unittest
|
|
|
|
import pecan
|
|
import pecan.testing
|
|
|
|
|
|
class FunctionalTest(unittest.TestCase):
|
|
"""Used for functional tests of Pecan controllers.
|
|
|
|
Used in case when you need to test your literal application and its
|
|
integration with the framework.
|
|
"""
|
|
|
|
PATH_PREFIX = ''
|
|
|
|
def setUp(self):
|
|
"""set up method."""
|
|
self.app = self._make_app()
|
|
|
|
def _make_app(self, enable_acl=False):
|
|
"""make app method."""
|
|
self.config = {
|
|
'app': {
|
|
'root': 'audit_server.controllers.root.RootController',
|
|
'modules': ['audit_server']
|
|
},
|
|
'wsme': {
|
|
'debug': True,
|
|
},
|
|
'database': {
|
|
'url': 'mysql://dummy:dummy@1.1.1.1/orm_audit?charset=utf8',
|
|
'echo_statements': False
|
|
}
|
|
}
|
|
|
|
return pecan.testing.load_test_app(self.config)
|
|
|
|
def tearDown(self):
|
|
"""tear down method."""
|
|
super(FunctionalTest, self).tearDown()
|
|
pecan.set_config({}, overwrite=True)
|
|
|
|
def put_json(self, path, params, expect_errors=False, headers=None,
|
|
extra_environ=None, status=None):
|
|
"""Send simulated HTTP PUT request to Pecan test app.
|
|
|
|
:param path: url path of target service
|
|
:param params: content for wsgi.input of request
|
|
:param expect_errors: boolean value whether an error is expected based
|
|
on request
|
|
:param headers: A dictionary of headers to send along with the request
|
|
:param extra_environ: A dictionary of environ variables to send along
|
|
with the request
|
|
:param status: Expected status code of response
|
|
"""
|
|
return self.post_json(path=path, params=params,
|
|
expect_errors=expect_errors,
|
|
headers=headers, extra_environ=extra_environ,
|
|
status=status, method="put")
|
|
|
|
def post_json(self, path, params, expect_errors=False, headers=None,
|
|
method="post", extra_environ=None, status=None):
|
|
"""Send simulated HTTP POST request to Pecan test app.
|
|
|
|
:param path: url path of target service
|
|
:param params: content for wsgi.input of request
|
|
:param expect_errors: boolean value whether an error is expected based
|
|
on request
|
|
:param headers: A dictionary of headers to send along with the request
|
|
:param method: Request method type. Appropriate method function call
|
|
should be used rather than passing attribute in.
|
|
:param extra_environ: A dictionary of environ variables to send along
|
|
with the request
|
|
:param status: Expected status code of response
|
|
"""
|
|
full_path = self.PATH_PREFIX + path
|
|
response = getattr(self.app, "%s_json" % method)(
|
|
str(full_path),
|
|
params=params,
|
|
headers=headers,
|
|
status=status,
|
|
extra_environ=extra_environ,
|
|
expect_errors=expect_errors
|
|
)
|
|
return response
|
|
|
|
def delete(self, path, expect_errors=False, headers=None,
|
|
extra_environ=None, status=None):
|
|
"""Send simulated HTTP DELETE request to Pecan test app.
|
|
|
|
:param path: url path of target service
|
|
:param expect_errors: boolean value whether an error is expected based
|
|
on request
|
|
:param headers: A dictionary of headers to send along with the request
|
|
:param extra_environ: A dictionary of environ variables to send along
|
|
with the request
|
|
:param status: Expected status code of response
|
|
"""
|
|
full_path = self.PATH_PREFIX + path
|
|
response = self.app.delete(str(full_path),
|
|
headers=headers,
|
|
status=status,
|
|
extra_environ=extra_environ,
|
|
expect_errors=expect_errors)
|
|
return response
|
|
|
|
def get_json(self, path, expect_errors=False, headers=None,
|
|
extra_environ=None, q=None, groupby=None, status=None,
|
|
override_params=None, **params):
|
|
"""Send simulated HTTP GET request to Pecan test app.
|
|
|
|
:param path: url path of target service
|
|
:param expect_errors: boolean value whether an error is expected based
|
|
on request
|
|
:param headers: A dictionary of headers to send along with the request
|
|
:param extra_environ: A dictionary of environ variables to send along
|
|
with the request
|
|
:param q: list of queries consisting of: field, value, op, and type
|
|
keys
|
|
:param groupby: list of fields to group by
|
|
:param status: Expected status code of response
|
|
:param override_params: literally encoded query param string
|
|
:param params: content for wsgi.input of request
|
|
"""
|
|
q = q or []
|
|
groupby = groupby or []
|
|
full_path = self.PATH_PREFIX + path
|
|
if override_params:
|
|
all_params = override_params
|
|
else:
|
|
query_params = {'q.field': [],
|
|
'q.value': [],
|
|
'q.op': [],
|
|
'q.type': [],
|
|
}
|
|
for query in q:
|
|
for name in ['field', 'op', 'value', 'type']:
|
|
query_params['q.%s' % name].append(query.get(name, ''))
|
|
all_params = {}
|
|
all_params.update(params)
|
|
if q:
|
|
all_params.update(query_params)
|
|
if groupby:
|
|
all_params.update({'groupby': groupby})
|
|
response = self.app.get(full_path,
|
|
params=all_params,
|
|
headers=headers,
|
|
extra_environ=extra_environ,
|
|
expect_errors=expect_errors,
|
|
status=status)
|
|
if not expect_errors:
|
|
response = response.json
|
|
return response
|