catching invalid urls and adding tests
This commit is contained in:
parent
937554c85e
commit
1fc40d6c29
swift/common
test
@ -14,6 +14,7 @@
|
|||||||
import time
|
import time
|
||||||
import eventlet
|
import eventlet
|
||||||
from webob import Request, Response
|
from webob import Request, Response
|
||||||
|
from webob.exc import HTTPNotFound
|
||||||
|
|
||||||
from swift.common.utils import split_path, cache_from_env, get_logger
|
from swift.common.utils import split_path, cache_from_env, get_logger
|
||||||
from swift.proxy.server import get_container_memcache_key
|
from swift.proxy.server import get_container_memcache_key
|
||||||
@ -204,7 +205,10 @@ class RateLimitMiddleware(object):
|
|||||||
req = Request(env)
|
req = Request(env)
|
||||||
if self.memcache_client is None:
|
if self.memcache_client is None:
|
||||||
self.memcache_client = cache_from_env(env)
|
self.memcache_client = cache_from_env(env)
|
||||||
version, account, container, obj = split_path(req.path, 1, 4, True)
|
try:
|
||||||
|
version, account, container, obj = split_path(req.path, 1, 4, True)
|
||||||
|
except ValueError:
|
||||||
|
return HTTPNotFound()(env, start_response)
|
||||||
ratelimit_resp = self.handle_ratelimit(req, account, container, obj)
|
ratelimit_resp = self.handle_ratelimit(req, account, container, obj)
|
||||||
if ratelimit_resp is None:
|
if ratelimit_resp is None:
|
||||||
return self.app(env, start_response)
|
return self.app(env, start_response)
|
||||||
|
@ -208,6 +208,7 @@ def split_path(path, minsegs=1, maxsegs=None, rest_with_last=False):
|
|||||||
trailing data, raises ValueError.
|
trailing data, raises ValueError.
|
||||||
:returns: list of segments with a length of maxsegs (non-existant
|
:returns: list of segments with a length of maxsegs (non-existant
|
||||||
segments will return as None)
|
segments will return as None)
|
||||||
|
:raises: ValueError if given an invalid path
|
||||||
"""
|
"""
|
||||||
if not maxsegs:
|
if not maxsegs:
|
||||||
maxsegs = minsegs
|
maxsegs = minsegs
|
||||||
@ -622,6 +623,7 @@ def write_pickle(obj, dest, tmp):
|
|||||||
os.fsync(fd)
|
os.fsync(fd)
|
||||||
renamer(tmppath, dest)
|
renamer(tmppath, dest)
|
||||||
|
|
||||||
|
|
||||||
def audit_location_generator(devices, datadir, mount_check=True, logger=None):
|
def audit_location_generator(devices, datadir, mount_check=True, logger=None):
|
||||||
'''
|
'''
|
||||||
Given a devices path and a data directory, yield (path, device,
|
Given a devices path and a data directory, yield (path, device,
|
||||||
|
@ -170,6 +170,15 @@ class TestAccount(Base):
|
|||||||
self.assert_status(412)
|
self.assert_status(412)
|
||||||
self.assert_body('Bad URL')
|
self.assert_body('Bad URL')
|
||||||
|
|
||||||
|
def testInvalidPath(self):
|
||||||
|
was_url = self.env.account.conn.storage_url
|
||||||
|
self.env.account.conn.storage_url = "/%s" % was_url
|
||||||
|
self.env.account.conn.make_request('GET')
|
||||||
|
try:
|
||||||
|
self.assert_status(404)
|
||||||
|
finally:
|
||||||
|
self.env.account.conn.storage_url = was_url
|
||||||
|
|
||||||
def testPUT(self):
|
def testPUT(self):
|
||||||
self.env.account.conn.make_request('PUT')
|
self.env.account.conn.make_request('PUT')
|
||||||
self.assert_status([403, 405])
|
self.assert_status([403, 405])
|
||||||
|
@ -366,6 +366,26 @@ class TestRateLimit(unittest.TestCase):
|
|||||||
time_took = time.time() - begin
|
time_took = time.time() - begin
|
||||||
self.assert_(round(time_took, 1) == .4)
|
self.assert_(round(time_took, 1) == .4)
|
||||||
|
|
||||||
|
def test_call_invalid_path(self):
|
||||||
|
env = {'REQUEST_METHOD': 'GET',
|
||||||
|
'SCRIPT_NAME': '',
|
||||||
|
'PATH_INFO': '//v1/AUTH_1234567890',
|
||||||
|
'SERVER_NAME': '127.0.0.1',
|
||||||
|
'SERVER_PORT': '80',
|
||||||
|
'swift.cache': FakeMemcache(),
|
||||||
|
'SERVER_PROTOCOL': 'HTTP/1.0'}
|
||||||
|
|
||||||
|
app = lambda *args, **kwargs: None
|
||||||
|
rate_mid = ratelimit.RateLimitMiddleware(app, {},
|
||||||
|
logger=FakeLogger())
|
||||||
|
|
||||||
|
class a_callable(object):
|
||||||
|
|
||||||
|
def __call__(self, *args, **kwargs):
|
||||||
|
pass
|
||||||
|
resp = rate_mid.__call__(env, a_callable())
|
||||||
|
self.assert_('404 Not Found' in resp[0])
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user