summaryrefslogtreecommitdiffstats
path: root/tests/test_s3_token_middleware.py
diff options
context:
space:
mode:
authorChmouel Boudjnah <chmouel@chmouel.com>2012-04-04 17:30:51 +0200
committerChmouel Boudjnah <chmouel@chmouel.com>2012-05-01 11:49:44 +0100
commitac3d31468da184abd7a68f5417822402aa69c199 (patch)
tree1a2fec26bd70ce89c2da495e69c88957d064e0ff /tests/test_s3_token_middleware.py
parent3dd36e3e87b8dfe3e9468dbe0a413a34ce6f63df (diff)
downloadkeystone-ac3d31468da184abd7a68f5417822402aa69c199.tar.gz
keystone-ac3d31468da184abd7a68f5417822402aa69c199.tar.xz
keystone-ac3d31468da184abd7a68f5417822402aa69c199.zip
Exit on error in a S3 way.
- Fixes bug 973433. - Add more debug logging. - Test xml output of s3_token. Change-Id: Ibd0714bb6eeb75cfde614043fc7d062f584d0714
Diffstat (limited to 'tests/test_s3_token_middleware.py')
-rw-r--r--tests/test_s3_token_middleware.py44
1 files changed, 41 insertions, 3 deletions
diff --git a/tests/test_s3_token_middleware.py b/tests/test_s3_token_middleware.py
index c254ee2b..5a6d167b 100644
--- a/tests/test_s3_token_middleware.py
+++ b/tests/test_s3_token_middleware.py
@@ -26,10 +26,24 @@ from swift.common import utils as swift_utils
from keystone.middleware import s3_token
+def denied_request(code):
+ error_table = {
+ 'AccessDenied':
+ (401, 'Access denied'),
+ 'InvalidURI':
+ (400, 'Could not parse the specified URI'),
+ }
+ xml = '<?xml version="1.0" encoding="UTF-8"?>\r\n<Error>\r\n ' \
+ '<Code>%s</Code>\r\n <Message>%s</Message>\r\n</Error>\r\n' \
+ % (code, error_table[code][1])
+ return xml
+
+
def setUpModule(self):
self.stubs = stubout.StubOutForTesting()
# Stub out swift_utils.get_logger. get_logger tries to configure
# syslogging to '/dev/log', which will fail on OS X.
+
def fake_get_logger(config, log_route=None):
return logging.getLogger(log_route)
self.stubs.Set(swift_utils, 'get_logger', fake_get_logger)
@@ -43,20 +57,25 @@ class FakeHTTPResponse(object):
def __init__(self, status, body):
self.status = status
self.body = body
+ self.reason = ""
def read(self):
return self.body
class FakeHTTPConnection(object):
+ status = 201
+
def __init__(self, *args):
pass
def request(self, method, path, **kwargs):
+ if self.status == 503:
+ raise Exception
ret = {'access': {'token': {'id': 'TOKEN_ID',
'tenant': {'id': 'TENANT_ID'}}}}
body = json.dumps(ret)
- status = 201
+ status = self.status
self.resp = FakeHTTPResponse(status, body)
def getresponse(self):
@@ -111,8 +130,27 @@ class S3TokenMiddlewareTest(unittest.TestCase):
req = webob.Request.blank('/v1/AUTH_cfa/c/o')
req.headers['Authorization'] = 'badboy'
req.headers['X-Storage-Token'] = 'token'
- self.middleware(req.environ, self._start_fake_response)
- self.assertEqual(self.response_status, 400)
+ resp = req.get_response(self.middleware)
+ self.assertEqual(resp.status_int, 400)
+ self.assertEqual(resp.body, denied_request('InvalidURI'))
+
+ def test_bad_token(self):
+ req = webob.Request.blank('/v1/AUTH_cfa/c/o')
+ req.headers['Authorization'] = 'access:signature'
+ req.headers['X-Storage-Token'] = 'token'
+ self.middleware.http_client_class.status = 403
+ resp = req.get_response(self.middleware)
+ self.assertEqual(resp.status_int, 401)
+ self.assertEqual(resp.body, denied_request('AccessDenied'))
+
+ def test_fail_to_connect_to_keystone(self):
+ req = webob.Request.blank('/v1/AUTH_cfa/c/o')
+ req.headers['Authorization'] = 'access:signature'
+ req.headers['X-Storage-Token'] = 'token'
+ self.middleware.http_client_class.status = 503
+ resp = req.get_response(self.middleware)
+ self.assertEqual(resp.status_int, 400)
+ self.assertEqual(resp.body, denied_request('InvalidURI'))
def test_authorized(self):
req = webob.Request.blank('/v1/AUTH_cfa/c/o')