summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorBastien Gerard <bastien.gerard@cluepoints.com>2021-01-25 09:11:32 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2021-01-25 11:35:41 -0500
commitec352d55e947a0ecf61fcc66d31c962bc36df2ad (patch)
treed8bdd6c0ba4e42326bdf35efe64e8d178a7364e6 /tests
parent505b35a3b7792a2c3a9d8e06c5f3915d5fe2fbaf (diff)
downloaddogpile-cache-ec352d55e947a0ecf61fcc66d31c962bc36df2ad.tar.gz
Add feature region.key_is_locked()
Added new region method :meth:`.Region.key_is_locked`. Returns True if the given key is subject to the dogpile lock, which would indicate that the generator function is running at that time. Pull request courtesy Bastien Gerard. Fixes: #101 Closes: #198 Pull-request: https://github.com/sqlalchemy/dogpile.cache/pull/198 Pull-request-sha: 8a5ec7aa07dbdfc654617632ffffae6834078263 Change-Id: I8449beeeef0052ac11a4e3d2e8305e10ba70a765
Diffstat (limited to 'tests')
-rw-r--r--tests/cache/_fixtures.py23
-rw-r--r--tests/cache/test_region.py5
2 files changed, 28 insertions, 0 deletions
diff --git a/tests/cache/_fixtures.py b/tests/cache/_fixtures.py
index 1be5a2c..539e27d 100644
--- a/tests/cache/_fixtures.py
+++ b/tests/cache/_fixtures.py
@@ -6,6 +6,7 @@ from threading import Lock
from threading import Thread
import time
from unittest import TestCase
+import uuid
import pytest
@@ -109,6 +110,21 @@ class _GenericBackendTest(_GenericBackendFixture, TestCase):
backend.delete("some_key")
eq_(backend.get_serialized("some_key"), NO_VALUE)
+ def test_region_is_key_locked(self):
+ reg = self._region()
+ random_key = str(uuid.uuid1())
+ assert not reg.get(random_key)
+ eq_(reg.key_is_locked(random_key), False)
+ # ensures that calling key_is_locked doesn't acquire the lock
+ eq_(reg.key_is_locked(random_key), False)
+
+ mutex = reg.backend.get_mutex(random_key)
+ if mutex:
+ mutex.acquire()
+ eq_(reg.key_is_locked(random_key), True)
+ mutex.release()
+ eq_(reg.key_is_locked(random_key), False)
+
def test_region_set_get_value(self):
reg = self._region()
reg.set("some key", "some value")
@@ -387,11 +403,15 @@ class _GenericMutexTest(_GenericBackendFixture, TestCase):
backend = self._backend()
mutex = backend.get_mutex("foo")
+ assert not mutex.locked()
ac = mutex.acquire()
assert ac
ac2 = mutex.acquire(False)
+ assert mutex.locked()
assert not ac2
mutex.release()
+ assert not mutex.locked()
+
ac3 = mutex.acquire()
assert ac3
mutex.release()
@@ -470,6 +490,9 @@ class MockMutex(object):
def release(self):
return
+ def locked(self):
+ return False
+
class MockBackend(CacheBackend):
def __init__(self, arguments):
diff --git a/tests/cache/test_region.py b/tests/cache/test_region.py
index 467e16a..0a10beb 100644
--- a/tests/cache/test_region.py
+++ b/tests/cache/test_region.py
@@ -202,6 +202,11 @@ class RegionTest(TestCase):
eq_(reg.get_or_create("some key", creator), "some value")
+ def test_key_is_locked(self):
+ reg = self._region()
+
+ eq_(reg.key_is_locked("some key"), False)
+
def test_multi_creator(self):
reg = self._region()