52 lines
2.3 KiB
Python
52 lines
2.3 KiB
Python
|
|
from django.test import override_settings
|
||
|
|
|
||
|
|
from common.cache import ensure_cache_key_allocates_to_the_same_hash_slot
|
||
|
|
|
||
|
|
PATTERN = "schedule_oncall_users"
|
||
|
|
NON_EXISTENT_PATTERN = "nmzxcnvmzxcv"
|
||
|
|
NUM_CACHE_KEYS = 5
|
||
|
|
SINGLE_CACHE_KEY = f"{PATTERN}_0"
|
||
|
|
CACHE_KEYS = [f"{PATTERN}_{pk}" for pk in range(NUM_CACHE_KEYS)]
|
||
|
|
SET_MANY_CACHE_KEYS_DICT = {k: "foo" for k in CACHE_KEYS}
|
||
|
|
|
||
|
|
|
||
|
|
def test_ensure_cache_key_allocates_to_the_same_hash_slot() -> None:
|
||
|
|
def _convert_key(key: str) -> str:
|
||
|
|
return key.replace(PATTERN, f"{{{PATTERN}}}")
|
||
|
|
|
||
|
|
# when USE_REDIS_CLUSTER is False the method should just return the cache keys
|
||
|
|
with override_settings(USE_REDIS_CLUSTER=False):
|
||
|
|
assert ensure_cache_key_allocates_to_the_same_hash_slot(SINGLE_CACHE_KEY, PATTERN) == SINGLE_CACHE_KEY
|
||
|
|
assert ensure_cache_key_allocates_to_the_same_hash_slot(CACHE_KEYS, PATTERN) == CACHE_KEYS
|
||
|
|
assert (
|
||
|
|
ensure_cache_key_allocates_to_the_same_hash_slot(SET_MANY_CACHE_KEYS_DICT, PATTERN)
|
||
|
|
== SET_MANY_CACHE_KEYS_DICT
|
||
|
|
)
|
||
|
|
|
||
|
|
# when USE_REDIS_CLUSTER is True the method should wrap the specified pattern within the cache keys in curly brackets
|
||
|
|
with override_settings(USE_REDIS_CLUSTER=True):
|
||
|
|
# works with a single str cache key
|
||
|
|
assert ensure_cache_key_allocates_to_the_same_hash_slot(SINGLE_CACHE_KEY, PATTERN) == _convert_key(
|
||
|
|
SINGLE_CACHE_KEY
|
||
|
|
)
|
||
|
|
|
||
|
|
# works with a list (useful for cache.get_many operations)
|
||
|
|
assert ensure_cache_key_allocates_to_the_same_hash_slot(CACHE_KEYS, PATTERN) == [
|
||
|
|
_convert_key(k) for k in CACHE_KEYS
|
||
|
|
]
|
||
|
|
|
||
|
|
# works with a dict (useful for cache.set_many operations)
|
||
|
|
assert ensure_cache_key_allocates_to_the_same_hash_slot(SET_MANY_CACHE_KEYS_DICT, PATTERN) == {
|
||
|
|
_convert_key(k): v for k, v in SET_MANY_CACHE_KEYS_DICT.items()
|
||
|
|
}
|
||
|
|
|
||
|
|
# if the pattern doesn't exist, we don't wrap it in brackets
|
||
|
|
assert (
|
||
|
|
ensure_cache_key_allocates_to_the_same_hash_slot(SINGLE_CACHE_KEY, NON_EXISTENT_PATTERN) == SINGLE_CACHE_KEY
|
||
|
|
)
|
||
|
|
assert ensure_cache_key_allocates_to_the_same_hash_slot(CACHE_KEYS, NON_EXISTENT_PATTERN) == CACHE_KEYS
|
||
|
|
assert (
|
||
|
|
ensure_cache_key_allocates_to_the_same_hash_slot(SET_MANY_CACHE_KEYS_DICT, NON_EXISTENT_PATTERN)
|
||
|
|
== SET_MANY_CACHE_KEYS_DICT
|
||
|
|
)
|