f72704fc82
Change-Id: I7c3df47c31759dbeb3105f8883e2688ada848d58 Closes-bug: #1214176
139 lines
4.3 KiB
Python
139 lines
4.3 KiB
Python
# Copyright (c) 2010-2012 OpenStack Foundation
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
# implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
import unittest
|
|
from ConfigParser import NoSectionError, NoOptionError
|
|
|
|
from swift.common.middleware import memcache
|
|
from swift.common.memcached import MemcacheRing
|
|
from swift.common.swob import Request
|
|
|
|
|
|
class FakeApp(object):
|
|
def __call__(self, env, start_response):
|
|
return env
|
|
|
|
|
|
class ExcConfigParser(object):
|
|
|
|
def read(self, path):
|
|
raise Exception('read called with %r' % path)
|
|
|
|
|
|
class EmptyConfigParser(object):
|
|
|
|
def read(self, path):
|
|
return False
|
|
|
|
|
|
class SetConfigParser(object):
|
|
|
|
def read(self, path):
|
|
return True
|
|
|
|
def get(self, section, option):
|
|
if section == 'memcache':
|
|
if option == 'memcache_servers':
|
|
return '1.2.3.4:5'
|
|
elif option == 'memcache_serialization_support':
|
|
return '1'
|
|
else:
|
|
raise NoOptionError(option)
|
|
else:
|
|
raise NoSectionError(option)
|
|
|
|
|
|
def start_response(*args):
|
|
pass
|
|
|
|
|
|
class TestCacheMiddleware(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.app = memcache.MemcacheMiddleware(FakeApp(), {})
|
|
|
|
def test_cache_middleware(self):
|
|
req = Request.blank('/something', environ={'REQUEST_METHOD': 'GET'})
|
|
resp = self.app(req.environ, start_response)
|
|
self.assertTrue('swift.cache' in resp)
|
|
self.assertTrue(isinstance(resp['swift.cache'], MemcacheRing))
|
|
|
|
def test_conf_default_read(self):
|
|
orig_parser = memcache.ConfigParser
|
|
memcache.ConfigParser = ExcConfigParser
|
|
exc = None
|
|
try:
|
|
memcache.MemcacheMiddleware(FakeApp(), {})
|
|
except Exception as err:
|
|
exc = err
|
|
finally:
|
|
memcache.ConfigParser = orig_parser
|
|
self.assertEquals(str(exc),
|
|
"read called with '/etc/swift/memcache.conf'")
|
|
|
|
def test_conf_set_no_read(self):
|
|
orig_parser = memcache.ConfigParser
|
|
memcache.ConfigParser = ExcConfigParser
|
|
exc = None
|
|
try:
|
|
memcache.MemcacheMiddleware(
|
|
FakeApp(), {'memcache_servers': '1.2.3.4:5',
|
|
'memcache_serialization_support': '2'})
|
|
except Exception as err:
|
|
exc = err
|
|
finally:
|
|
memcache.ConfigParser = orig_parser
|
|
self.assertEquals(exc, None)
|
|
|
|
def test_conf_default(self):
|
|
orig_parser = memcache.ConfigParser
|
|
memcache.ConfigParser = EmptyConfigParser
|
|
try:
|
|
app = memcache.MemcacheMiddleware(FakeApp(), {})
|
|
finally:
|
|
memcache.ConfigParser = orig_parser
|
|
self.assertEquals(app.memcache_servers, '127.0.0.1:11211')
|
|
self.assertEquals(app.memcache._allow_pickle, False)
|
|
self.assertEquals(app.memcache._allow_unpickle, False)
|
|
|
|
def test_conf_from_extra_conf(self):
|
|
orig_parser = memcache.ConfigParser
|
|
memcache.ConfigParser = SetConfigParser
|
|
try:
|
|
app = memcache.MemcacheMiddleware(FakeApp(), {})
|
|
finally:
|
|
memcache.ConfigParser = orig_parser
|
|
self.assertEquals(app.memcache_servers, '1.2.3.4:5')
|
|
self.assertEquals(app.memcache._allow_pickle, False)
|
|
self.assertEquals(app.memcache._allow_unpickle, True)
|
|
|
|
def test_conf_from_inline_conf(self):
|
|
orig_parser = memcache.ConfigParser
|
|
memcache.ConfigParser = SetConfigParser
|
|
try:
|
|
app = memcache.MemcacheMiddleware(
|
|
FakeApp(),
|
|
{'memcache_servers': '6.7.8.9:10',
|
|
'serialization_format': '0'})
|
|
finally:
|
|
memcache.ConfigParser = orig_parser
|
|
self.assertEquals(app.memcache_servers, '6.7.8.9:10')
|
|
self.assertEquals(app.memcache._allow_pickle, False)
|
|
self.assertEquals(app.memcache._allow_unpickle, True)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|