summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keystonemiddleware/tests/unit/audit/base.py5
-rw-r--r--keystonemiddleware/tests/unit/audit/test_audit_api.py3
-rw-r--r--keystonemiddleware/tests/unit/audit/test_audit_middleware.py52
-rw-r--r--keystonemiddleware/tests/unit/audit/test_audit_oslo_messaging.py29
-rw-r--r--keystonemiddleware/tests/unit/audit/test_logging_notifier.py8
-rw-r--r--keystonemiddleware/tests/unit/utils.py7
-rw-r--r--test-requirements.txt1
7 files changed, 44 insertions, 61 deletions
diff --git a/keystonemiddleware/tests/unit/audit/base.py b/keystonemiddleware/tests/unit/audit/base.py
index 27fd1b8..d2faab1 100644
--- a/keystonemiddleware/tests/unit/audit/base.py
+++ b/keystonemiddleware/tests/unit/audit/base.py
@@ -67,7 +67,7 @@ class BaseAuditMiddlewareTest(utils.MiddlewareTestCase):
return self.audit_map_file_fixture.path
@staticmethod
- def get_environ_header(req_type):
+ def get_environ_header(req_type=None):
env_headers = {'HTTP_X_SERVICE_CATALOG':
'''[{"endpoints_links": [],
"endpoints": [{"adminURL":
@@ -85,5 +85,6 @@ class BaseAuditMiddlewareTest(utils.MiddlewareTestCase):
'HTTP_X_AUTH_TOKEN': 'token',
'HTTP_X_PROJECT_ID': 'tenant_id',
'HTTP_X_IDENTITY_STATUS': 'Confirmed'}
- env_headers['REQUEST_METHOD'] = req_type
+ if req_type:
+ env_headers['REQUEST_METHOD'] = req_type
return env_headers
diff --git a/keystonemiddleware/tests/unit/audit/test_audit_api.py b/keystonemiddleware/tests/unit/audit/test_audit_api.py
index c0706f8..367d7d0 100644
--- a/keystonemiddleware/tests/unit/audit/test_audit_api.py
+++ b/keystonemiddleware/tests/unit/audit/test_audit_api.py
@@ -24,10 +24,11 @@ class AuditApiLogicTest(base.BaseAuditMiddlewareTest):
def get_payload(self, method, url,
audit_map=None, body=None, environ=None):
audit_map = audit_map or self.audit_map
- environ = environ or self.get_environ_header(method)
+ environ = environ or self.get_environ_header()
req = webob.Request.blank(url,
body=body,
+ method=method,
environ=environ,
remote_addr='192.168.0.1')
diff --git a/keystonemiddleware/tests/unit/audit/test_audit_middleware.py b/keystonemiddleware/tests/unit/audit/test_audit_middleware.py
index 66a8eeb..39daf55 100644
--- a/keystonemiddleware/tests/unit/audit/test_audit_middleware.py
+++ b/keystonemiddleware/tests/unit/audit/test_audit_middleware.py
@@ -32,10 +32,8 @@ class AuditMiddlewareTest(base.BaseAuditMiddlewareTest):
super(AuditMiddlewareTest, self).setUp()
def test_api_request(self):
- req = webob.Request.blank('/foo/bar',
- environ=self.get_environ_header('GET'))
-
- self.create_simple_middleware()(req)
+ self.create_simple_app().get('/foo/bar',
+ extra_environ=self.get_environ_header())
# Check first notification with only 'request'
call_args = self.notifier.notify.call_args_list[0][0]
@@ -55,18 +53,18 @@ class AuditMiddlewareTest(base.BaseAuditMiddlewareTest):
def test_api_request_failure(self):
- def cb(self, req):
- raise Exception('It happens!')
+ class CustomException(Exception):
+ pass
- middleware = self.create_middleware(cb)
-
- req = webob.Request.blank('/foo/bar',
- environ=self.get_environ_header('GET'))
+ def cb(req):
+ raise CustomException('It happens!')
try:
- middleware(req)
+ self.create_app(cb).get('/foo/bar',
+ extra_environ=self.get_environ_header())
+
self.fail('Application exception has not been re-raised')
- except Exception:
+ except CustomException:
pass
# Check first notification with only 'request'
@@ -101,22 +99,17 @@ class AuditMiddlewareTest(base.BaseAuditMiddlewareTest):
self.assertTrue(self.notifier.notify.called)
def test_ignore_req_opt(self):
- middleware = self.create_simple_middleware(ignore_req_list='get, PUT')
-
- req = webob.Request.blank('/skip/foo',
- environ=self.get_environ_header('GET'))
- req1 = webob.Request.blank('/skip/foo',
- environ=self.get_environ_header('PUT'))
- req2 = webob.Request.blank('/accept/foo',
- environ=self.get_environ_header('POST'))
+ app = self.create_simple_app(ignore_req_list='get, PUT')
# Check GET/PUT request does not send notification
- middleware(req)
- middleware(req1)
+ app.get('/skip/foo', extra_environ=self.get_environ_header())
+ app.put('/skip/foo', extra_environ=self.get_environ_header())
+
self.assertFalse(self.notifier.notify.called)
# Check non-GET/PUT request does send notification
- middleware(req2)
+ app.post('/accept/foo', extra_environ=self.get_environ_header())
+
self.assertEqual(2, self.notifier.notify.call_count)
call_args = self.notifier.notify.call_args_list[0][0]
@@ -128,10 +121,8 @@ class AuditMiddlewareTest(base.BaseAuditMiddlewareTest):
self.assertEqual('/accept/foo', call_args[2]['requestPath'])
def test_cadf_event_context_scoped(self):
- req = webob.Request.blank('/foo/bar',
- environ=self.get_environ_header('GET'))
-
- self.create_simple_middleware()(req)
+ self.create_simple_app().get('/foo/bar',
+ extra_environ=self.get_environ_header())
self.assertEqual(2, self.notifier.notify.call_count)
first, second = [a[0] for a in self.notifier.notify.call_args_list]
@@ -143,10 +134,9 @@ class AuditMiddlewareTest(base.BaseAuditMiddlewareTest):
self.assertIs(first[0], second[0])
def test_cadf_event_scoped_to_request(self):
- req = webob.Request.blank('/foo/bar',
- environ=self.get_environ_header('GET'))
- self.create_simple_middleware()(req)
- self.assertIsNotNone(req.environ.get('cadf_event'))
+ app = self.create_simple_app()
+ resp = app.get('/foo/bar', extra_environ=self.get_environ_header())
+ self.assertIsNotNone(resp.request.environ.get('cadf_event'))
# ensure exact same event is used between request and response
self.assertEqual(self.notifier.calls[0].payload['id'],
diff --git a/keystonemiddleware/tests/unit/audit/test_audit_oslo_messaging.py b/keystonemiddleware/tests/unit/audit/test_audit_oslo_messaging.py
index 190c5f4..a745e2f 100644
--- a/keystonemiddleware/tests/unit/audit/test_audit_oslo_messaging.py
+++ b/keystonemiddleware/tests/unit/audit/test_audit_oslo_messaging.py
@@ -11,7 +11,6 @@
# under the License.
import mock
-import webob
from keystonemiddleware.tests.unit.audit import base
@@ -20,13 +19,10 @@ class AuditNotifierConfigTest(base.BaseAuditMiddlewareTest):
def test_conf_middleware_log_and_default_as_messaging(self):
self.cfg.config(driver='log', group='audit_middleware_notifications')
- middleware = self.create_simple_middleware()
- req = webob.Request.blank('/foo/bar',
- environ=self.get_environ_header('GET'))
- req.context = {}
+ app = self.create_simple_app()
with mock.patch('oslo_messaging.notify._impl_log.LogDriver.notify',
side_effect=Exception('error')) as driver:
- middleware._process_request(req)
+ app.get('/foo/bar', extra_environ=self.get_environ_header())
# audit middleware conf has 'log' make sure that driver is invoked
# and not the one specified in DEFAULT section
self.assertTrue(driver.called)
@@ -37,13 +33,10 @@ class AuditNotifierConfigTest(base.BaseAuditMiddlewareTest):
self.cfg.config(driver='log',
group='audit_middleware_notifications')
- middleware = self.create_simple_middleware()
- req = webob.Request.blank('/foo/bar',
- environ=self.get_environ_header('GET'))
- req.context = {}
+ app = self.create_simple_app()
with mock.patch('oslo_messaging.notify._impl_log.LogDriver.notify',
side_effect=Exception('error')) as driver:
- middleware._process_request(req)
+ app.get('/foo/bar', extra_environ=self.get_environ_header())
# audit middleware conf has 'log' make sure that driver is invoked
# and not the one specified in oslo_messaging_notifications section
self.assertTrue(driver.called)
@@ -52,16 +45,13 @@ class AuditNotifierConfigTest(base.BaseAuditMiddlewareTest):
self.cfg.config(driver='log', group='oslo_messaging_notifications')
self.cfg.config(driver='messaging',
group='audit_middleware_notifications')
- middleware = self.create_simple_middleware()
- req = webob.Request.blank('/foo/bar',
- environ=self.get_environ_header('GET'))
- req.context = {}
+ app = self.create_simple_app()
with mock.patch('oslo_messaging.notify.messaging.MessagingDriver'
'.notify',
side_effect=Exception('error')) as driver:
# audit middleware has 'messaging' make sure that driver is invoked
# and not the one specified in oslo_messaging_notifications section
- middleware._process_request(req)
+ app.get('/foo/bar', extra_environ=self.get_environ_header())
self.assertTrue(driver.called)
def test_with_no_middleware_notification_conf(self):
@@ -69,16 +59,13 @@ class AuditNotifierConfigTest(base.BaseAuditMiddlewareTest):
group='oslo_messaging_notifications')
self.cfg.config(driver=None, group='audit_middleware_notifications')
- middleware = self.create_simple_middleware()
- req = webob.Request.blank('/foo/bar',
- environ=self.get_environ_header('GET'))
- req.context = {}
+ app = self.create_simple_app()
with mock.patch('oslo_messaging.notify.messaging.MessagingDriver'
'.notify',
side_effect=Exception('error')) as driver:
# audit middleware section is not set. So driver needs to be
# invoked from oslo_messaging_notifications section.
- middleware._process_request(req)
+ app.get('/foo/bar', extra_environ=self.get_environ_header())
self.assertTrue(driver.called)
@mock.patch('oslo_messaging.get_transport')
diff --git a/keystonemiddleware/tests/unit/audit/test_logging_notifier.py b/keystonemiddleware/tests/unit/audit/test_logging_notifier.py
index 8472339..f0174ad 100644
--- a/keystonemiddleware/tests/unit/audit/test_logging_notifier.py
+++ b/keystonemiddleware/tests/unit/audit/test_logging_notifier.py
@@ -12,7 +12,6 @@
import fixtures
import mock
-import webob
from keystonemiddleware.tests.unit.audit import base
@@ -28,11 +27,8 @@ class TestLoggingNotifier(base.BaseAuditMiddlewareTest):
@mock.patch('keystonemiddleware.audit._LOG.info')
def test_api_request_no_messaging(self, log):
- middleware = self.create_simple_middleware()
-
- req = webob.Request.blank('/foo/bar',
- environ=self.get_environ_header('GET'))
- req.get_response(middleware)
+ self.create_simple_app().get('/foo/bar',
+ extra_environ=self.get_environ_header())
# Check first notification with only 'request'
call_args = log.call_args_list[0][0]
diff --git a/keystonemiddleware/tests/unit/utils.py b/keystonemiddleware/tests/unit/utils.py
index a165b4d..38a0d95 100644
--- a/keystonemiddleware/tests/unit/utils.py
+++ b/keystonemiddleware/tests/unit/utils.py
@@ -21,6 +21,7 @@ import mock
import oslotest.base as oslotest
import requests
import webob
+import webtest
class BaseTestCase(oslotest.BaseTestCase):
@@ -95,6 +96,12 @@ class MiddlewareTestCase(BaseTestCase):
return self.create_middleware(cb, **kwargs)
+ def create_app(self, *args, **kwargs):
+ return webtest.TestApp(self.create_middleware(*args, **kwargs))
+
+ def create_simple_app(self, *args, **kwargs):
+ return webtest.TestApp(self.create_simple_middleware(*args, **kwargs))
+
class TestResponse(requests.Response):
"""Utility class to wrap requests.Response.
diff --git a/test-requirements.txt b/test-requirements.txt
index 68ac56d..2845998 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -19,6 +19,7 @@ testrepository>=0.0.18 # Apache-2.0/BSD
testresources>=0.2.4 # Apache-2.0/BSD
testtools>=1.4.0 # MIT
python-memcached>=1.56 # PSF
+WebTest>=2.0 # MIT
# Bandit security code scanner
bandit>=1.1.0 # Apache-2.0