Improve ut coverage about storlet_docker_gateway
Change-Id: If0a86431186734bd1feadad1defff30e130f6adc
This commit is contained in:
@@ -65,14 +65,12 @@ class DockerStorletRequest(object):
|
||||
2. Metadata identifying the stream
|
||||
"""
|
||||
|
||||
def user_metadata(self, headers):
|
||||
def _get_user_metadata(self, headers):
|
||||
metadata = {}
|
||||
for key in headers:
|
||||
if (key.startswith('X-Storlet') or
|
||||
key.startswith('X-Object-Meta-Storlet')):
|
||||
if key.startswith('X-Object-Meta-Storlet'):
|
||||
pass
|
||||
elif (key.startswith('X-Object-Meta-') or
|
||||
key.startswith('X-Object-Meta-'.lower())):
|
||||
elif key.startswith('X-Object-Meta-'):
|
||||
short_key = key[len('X-Object-Meta-'):]
|
||||
metadata[short_key] = headers[key]
|
||||
return metadata
|
||||
@@ -84,7 +82,7 @@ class DockerStorletRequest(object):
|
||||
self.generate_log = request.headers.get('X-Storlet-Generate-Log',
|
||||
False)
|
||||
self.storlet_id = request.headers.get('X-Object-Meta-Storlet-Main')
|
||||
self.user_metadata = self.user_metadata(request.headers)
|
||||
self.user_metadata = self._get_user_metadata(request.headers)
|
||||
self.params = params
|
||||
self.account = account
|
||||
self.request = request
|
||||
|
||||
@@ -14,7 +14,8 @@
|
||||
# limitations under the License.
|
||||
|
||||
from tests.unit.swift import FakeLogger
|
||||
from storlet_gateway.storlet_docker_gateway import StorletGatewayDocker
|
||||
from storlet_gateway.storlet_docker_gateway import DockerStorletRequest, \
|
||||
StorletGatewayDocker
|
||||
from swift.common.swob import HTTPException, Request, Response
|
||||
import unittest
|
||||
|
||||
@@ -26,6 +27,30 @@ class FakeApp(object):
|
||||
env, start_response)
|
||||
|
||||
|
||||
class TestDockerStorletRequest(unittest.TestCase):
|
||||
|
||||
def test_init(self):
|
||||
account = 'a'
|
||||
headers = {'X-Object-Meta-Storlet-Main': 'main',
|
||||
'X-Storlet-Key0': 'Value0',
|
||||
'x-storlet-key1': 'Value1',
|
||||
'X-Object-Meta-Storlet-Key2': 'Value2',
|
||||
'x-object-meta-storlet-key3': 'Value3',
|
||||
'X-Object-Meta-Key4': 'Value4',
|
||||
'x-object-meta-key5': 'Value5'}
|
||||
params = {'Param6': 'Value6',
|
||||
'Param7': 'Value7'}
|
||||
req = Request.blank('', headers=headers)
|
||||
dsreq = DockerStorletRequest(account, req, params)
|
||||
|
||||
self.assertEqual(dsreq.generate_log, False)
|
||||
self.assertEqual(dsreq.storlet_id, 'main')
|
||||
self.assertEqual(dsreq.user_metadata,
|
||||
{'Key4': 'Value4',
|
||||
'Key5': 'Value5'})
|
||||
self.assertEqual(dsreq.account, account)
|
||||
|
||||
|
||||
class TestStorletGatewayDocker(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
@@ -197,6 +222,50 @@ class TestStorletGatewayDocker(unittest.TestCase):
|
||||
for key in sheaders.keys():
|
||||
self.assertEqual(sheaders[key], gw.storlet_metadata[key])
|
||||
|
||||
def test_augmentStorletExcecution(self):
|
||||
a = 'a'
|
||||
c = 'c'
|
||||
o = 'o'
|
||||
so = 'storlets-1.0.jar'
|
||||
path = '/'.join(['/v1', a, c, o])
|
||||
|
||||
# Metadata specific to Storlet
|
||||
sheaders = {
|
||||
'X-Object-Meta-Storlet-Language': 'java',
|
||||
'X-Object-Meta-Storlet-Interface-Version': '1.0',
|
||||
'X-Object-Meta-Storlet-Dependency': 'dep_file',
|
||||
'X-Object-Meta-Storlet-Object-Metadata': 'no'}
|
||||
|
||||
# Normal Metadata about object
|
||||
oheaders = {'X-Timestamp': '1450000000.000',
|
||||
'Content-Length': '1024',
|
||||
'X-Object-Meta-Key': 'Value'}
|
||||
oheaders.update(sheaders)
|
||||
|
||||
class FakeApp200(object):
|
||||
def __call__(self, env, start_response):
|
||||
req = Request(env)
|
||||
return Response(request=req, headers=oheaders)(
|
||||
env, start_response)
|
||||
|
||||
gw = StorletGatewayDocker(self.sconf, self.logger, FakeApp200(), 'v1',
|
||||
a, c, o)
|
||||
env = {'REQUEST_METHOD': 'GET'}
|
||||
req = Request.blank(path, environ=env,
|
||||
headers={'X-Run-Storlet': so})
|
||||
|
||||
# Set storlet_metadata
|
||||
gw.authorizeStorletExecution(req)
|
||||
|
||||
gw.augmentStorletRequest(req)
|
||||
|
||||
for key in sheaders:
|
||||
self.assertEqual(req.headers[key], sheaders[key])
|
||||
self.assertEqual(req.headers['X-Storlet-X-Timestamp'],
|
||||
'1450000000.000')
|
||||
self.assertEqual(req.headers['X-Storlet-Content-Length'],
|
||||
'1024')
|
||||
|
||||
def test_verify_access(self):
|
||||
a = 'a'
|
||||
c = 'c'
|
||||
@@ -214,6 +283,8 @@ class TestStorletGatewayDocker(unittest.TestCase):
|
||||
class FakeApp200(object):
|
||||
def __call__(self, env, start_response):
|
||||
req = Request(env)
|
||||
if req.path != '/'.join(['/v1', a, sc, so]):
|
||||
raise Exception('Request for wrong path: %s' % req.path)
|
||||
return Response(request=req, headers=sheaders)(
|
||||
env, start_response)
|
||||
|
||||
@@ -229,6 +300,8 @@ class TestStorletGatewayDocker(unittest.TestCase):
|
||||
class FakeApp401(object):
|
||||
def __call__(self, env, start_response):
|
||||
req = Request(env)
|
||||
if req.path != '/'.join(['/v1', a, sc, so]):
|
||||
raise Exception('Request for wrong path: %s' % req.path)
|
||||
return Response(request=req, status='401 Unauthorized')(
|
||||
env, start_response)
|
||||
|
||||
@@ -243,6 +316,8 @@ class TestStorletGatewayDocker(unittest.TestCase):
|
||||
class FakeApp404(object):
|
||||
def __call__(self, env, start_response):
|
||||
req = Request(env)
|
||||
if req.path != '/'.join(['/v1', a, sc, so]):
|
||||
raise Exception('Request for wrong path: %s' % req.path)
|
||||
return Response(request=req, status='404 Not Found')(
|
||||
env, start_response)
|
||||
|
||||
@@ -254,6 +329,42 @@ class TestStorletGatewayDocker(unittest.TestCase):
|
||||
self.assertRaisesWithStatus(401, gw._verify_access, req, 'v1',
|
||||
a, sc, so)
|
||||
|
||||
def test_clean_storlet_stuff_from_request(self):
|
||||
a = 'a'
|
||||
c = 'c'
|
||||
o = 'o'
|
||||
path = '/'.join(['/v1', a, c, o])
|
||||
gw = StorletGatewayDocker(self.sconf, self.logger, FakeApp(), 'v1',
|
||||
a, c, o)
|
||||
|
||||
headers = {'X-Storlet-Key1': 'Value1',
|
||||
'X-Key2': 'Value2',
|
||||
'X-Object-Meta-Storlet-Key3': 'Value3',
|
||||
'X-Object-Meta-Key4': 'Value4'}
|
||||
req = Request.blank(path, headers=headers)
|
||||
gw._clean_storlet_stuff_from_request(req.headers)
|
||||
|
||||
self.assertFalse('X-Storlet-Key1' in req.headers)
|
||||
self.assertEqual(req.headers['X-Key2'], 'Value2')
|
||||
self.assertFalse('X-Object-Meta-Storlet-Key3' in req.headers)
|
||||
self.assertEqual(req.headers['X-Object-Meta-Key4'], 'Value4')
|
||||
|
||||
def test_set_metadata_in_headers(self):
|
||||
a = 'a'
|
||||
c = 'c'
|
||||
o = 'o'
|
||||
gw = StorletGatewayDocker(self.sconf, self.logger, FakeApp(), 'v1',
|
||||
a, c, o)
|
||||
headers = {'HeaderKey1': 'HeaderValue1'}
|
||||
gw._set_metadata_in_headers(headers, {})
|
||||
self.assertEqual(headers, {'HeaderKey1': 'HeaderValue1'})
|
||||
|
||||
md = {'MetaKey1': 'MetaValue1'}
|
||||
gw._set_metadata_in_headers(headers, md)
|
||||
self.assertEqual(headers,
|
||||
{'HeaderKey1': 'HeaderValue1',
|
||||
'X-Object-Meta-MetaKey1': 'MetaValue1'})
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user