Merge "tests: Unify FakeMemcaches"
This commit is contained in:
commit
d6464f1676
@ -49,6 +49,7 @@ from six.moves import range
|
|||||||
from six.moves.http_client import HTTPException
|
from six.moves.http_client import HTTPException
|
||||||
|
|
||||||
from swift.common import storage_policy, swob, utils
|
from swift.common import storage_policy, swob, utils
|
||||||
|
from swift.common.memcached import MemcacheConnectionError
|
||||||
from swift.common.storage_policy import (StoragePolicy, ECStoragePolicy,
|
from swift.common.storage_policy import (StoragePolicy, ECStoragePolicy,
|
||||||
VALID_EC_TYPES)
|
VALID_EC_TYPES)
|
||||||
from swift.common.utils import Timestamp, md5
|
from swift.common.utils import Timestamp, md5
|
||||||
@ -405,6 +406,8 @@ class FakeMemcache(object):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.store = {}
|
self.store = {}
|
||||||
self.calls = []
|
self.calls = []
|
||||||
|
self.error_on_incr = False
|
||||||
|
self.init_incr_return_neg = False
|
||||||
|
|
||||||
def clear_calls(self):
|
def clear_calls(self):
|
||||||
del self.calls[:]
|
del self.calls[:]
|
||||||
@ -420,16 +423,31 @@ class FakeMemcache(object):
|
|||||||
self._called('keys')
|
self._called('keys')
|
||||||
return self.store.keys()
|
return self.store.keys()
|
||||||
|
|
||||||
def set(self, key, value, time=0):
|
def set(self, key, value, serialize=True, time=0):
|
||||||
self._called('set', key, value, time)
|
self._called('set', key, value, time)
|
||||||
|
if serialize:
|
||||||
|
value = json.loads(json.dumps(value))
|
||||||
|
else:
|
||||||
|
assert isinstance(value, (str, bytes))
|
||||||
self.store[key] = value
|
self.store[key] = value
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def incr(self, key, time=0):
|
def incr(self, key, delta=1, time=0):
|
||||||
self._called('incr', key, time=time)
|
self._called('incr', key, time=time)
|
||||||
self.store[key] = self.store.setdefault(key, 0) + 1
|
if self.error_on_incr:
|
||||||
|
raise MemcacheConnectionError('Memcache restarting')
|
||||||
|
if self.init_incr_return_neg:
|
||||||
|
# simulate initial hit, force reset of memcache
|
||||||
|
self.init_incr_return_neg = False
|
||||||
|
return -10000000
|
||||||
|
self.store[key] = int(self.store.setdefault(key, 0)) + delta
|
||||||
|
if self.store[key] < 0:
|
||||||
|
self.store[key] = 0
|
||||||
return self.store[key]
|
return self.store[key]
|
||||||
|
|
||||||
|
def decr(self, key, delta=1, time=0):
|
||||||
|
return self.incr(key, delta=-delta, time=time)
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def soft_lock(self, key, timeout=0, retries=5):
|
def soft_lock(self, key, timeout=0, retries=5):
|
||||||
yield True
|
yield True
|
||||||
|
@ -17,60 +17,18 @@ import unittest
|
|||||||
import time
|
import time
|
||||||
import eventlet
|
import eventlet
|
||||||
import mock
|
import mock
|
||||||
from contextlib import contextmanager
|
|
||||||
|
|
||||||
from test.debug_logger import debug_logger
|
from test.debug_logger import debug_logger
|
||||||
|
from test.unit import FakeMemcache
|
||||||
from swift.common.middleware import ratelimit
|
from swift.common.middleware import ratelimit
|
||||||
from swift.proxy.controllers.base import get_cache_key, \
|
from swift.proxy.controllers.base import get_cache_key, \
|
||||||
headers_to_container_info
|
headers_to_container_info
|
||||||
from swift.common.memcached import MemcacheConnectionError
|
|
||||||
from swift.common.swob import Request
|
from swift.common.swob import Request
|
||||||
from swift.common import utils
|
from swift.common import utils
|
||||||
|
|
||||||
threading = eventlet.patcher.original('threading')
|
threading = eventlet.patcher.original('threading')
|
||||||
|
|
||||||
|
|
||||||
class FakeMemcache(object):
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self.store = {}
|
|
||||||
self.error_on_incr = False
|
|
||||||
self.init_incr_return_neg = False
|
|
||||||
|
|
||||||
def get(self, key):
|
|
||||||
return self.store.get(key)
|
|
||||||
|
|
||||||
def set(self, key, value, serialize=False, time=0):
|
|
||||||
self.store[key] = value
|
|
||||||
return True
|
|
||||||
|
|
||||||
def incr(self, key, delta=1, time=0):
|
|
||||||
if self.error_on_incr:
|
|
||||||
raise MemcacheConnectionError('Memcache restarting')
|
|
||||||
if self.init_incr_return_neg:
|
|
||||||
# simulate initial hit, force reset of memcache
|
|
||||||
self.init_incr_return_neg = False
|
|
||||||
return -10000000
|
|
||||||
self.store[key] = int(self.store.setdefault(key, 0)) + int(delta)
|
|
||||||
if self.store[key] < 0:
|
|
||||||
self.store[key] = 0
|
|
||||||
return int(self.store[key])
|
|
||||||
|
|
||||||
def decr(self, key, delta=1, time=0):
|
|
||||||
return self.incr(key, delta=-delta, time=time)
|
|
||||||
|
|
||||||
@contextmanager
|
|
||||||
def soft_lock(self, key, timeout=0, retries=5):
|
|
||||||
yield True
|
|
||||||
|
|
||||||
def delete(self, key):
|
|
||||||
try:
|
|
||||||
del self.store[key]
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
class FakeApp(object):
|
class FakeApp(object):
|
||||||
skip_handled_check = False
|
skip_handled_check = False
|
||||||
|
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
import json
|
import json
|
||||||
import unittest
|
import unittest
|
||||||
from contextlib import contextmanager
|
|
||||||
from base64 import b64encode as _b64encode
|
from base64 import b64encode as _b64encode
|
||||||
from time import time
|
from time import time
|
||||||
|
|
||||||
@ -26,6 +25,7 @@ from swift.common.middleware import tempauth as auth
|
|||||||
from swift.common.middleware.acl import format_acl
|
from swift.common.middleware.acl import format_acl
|
||||||
from swift.common.swob import Request, Response
|
from swift.common.swob import Request, Response
|
||||||
from swift.common.utils import split_path
|
from swift.common.utils import split_path
|
||||||
|
from test.unit import FakeMemcache
|
||||||
|
|
||||||
NO_CONTENT_RESP = (('204 No Content', {}, ''),) # mock server response
|
NO_CONTENT_RESP = (('204 No Content', {}, ''),) # mock server response
|
||||||
|
|
||||||
@ -36,42 +36,6 @@ def b64encode(str_or_bytes):
|
|||||||
return _b64encode(str_or_bytes).decode('ascii')
|
return _b64encode(str_or_bytes).decode('ascii')
|
||||||
|
|
||||||
|
|
||||||
class FakeMemcache(object):
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self.store = {}
|
|
||||||
|
|
||||||
def get(self, key):
|
|
||||||
return self.store.get(key)
|
|
||||||
|
|
||||||
def set(self, key, value, time=0):
|
|
||||||
if isinstance(value, (tuple, list)):
|
|
||||||
decoded = []
|
|
||||||
for elem in value:
|
|
||||||
if isinstance(elem, bytes):
|
|
||||||
decoded.append(elem.decode('utf8'))
|
|
||||||
else:
|
|
||||||
decoded.append(elem)
|
|
||||||
value = tuple(decoded)
|
|
||||||
self.store[key] = value
|
|
||||||
return True
|
|
||||||
|
|
||||||
def incr(self, key, time=0):
|
|
||||||
self.store[key] = self.store.setdefault(key, 0) + 1
|
|
||||||
return self.store[key]
|
|
||||||
|
|
||||||
@contextmanager
|
|
||||||
def soft_lock(self, key, timeout=0, retries=5):
|
|
||||||
yield True
|
|
||||||
|
|
||||||
def delete(self, key):
|
|
||||||
try:
|
|
||||||
del self.store[key]
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
class FakeApp(object):
|
class FakeApp(object):
|
||||||
|
|
||||||
def __init__(self, status_headers_body_iter=None, acl=None, sync_key=None):
|
def __init__(self, status_headers_body_iter=None, acl=None, sync_key=None):
|
||||||
|
@ -337,7 +337,7 @@ class TestController(unittest.TestCase):
|
|||||||
'container_count': '12345',
|
'container_count': '12345',
|
||||||
'total_object_count': None,
|
'total_object_count': None,
|
||||||
'bytes': None,
|
'bytes': None,
|
||||||
'storage_policies': {p.idx: {
|
'storage_policies': {str(p.idx): {
|
||||||
'container_count': 0,
|
'container_count': 0,
|
||||||
'object_count': 0,
|
'object_count': 0,
|
||||||
'bytes': 0} for p in POLICIES},
|
'bytes': 0} for p in POLICIES},
|
||||||
@ -368,7 +368,7 @@ class TestController(unittest.TestCase):
|
|||||||
'container_count': None, # internally keep None
|
'container_count': None, # internally keep None
|
||||||
'total_object_count': None,
|
'total_object_count': None,
|
||||||
'bytes': None,
|
'bytes': None,
|
||||||
'storage_policies': {p.idx: {
|
'storage_policies': {str(p.idx): {
|
||||||
'container_count': 0,
|
'container_count': 0,
|
||||||
'object_count': 0,
|
'object_count': 0,
|
||||||
'bytes': 0} for p in POLICIES},
|
'bytes': 0} for p in POLICIES},
|
||||||
|
Loading…
Reference in New Issue
Block a user