Skip to content

Commit 8cb90f0

Browse files
committed
use random keys for tests
observing key collisions among workers, so make sure each test uses a unique key Change-Id: Iad87a35bd0fbd30d98e6d1f8d563dfffa81c4e5a
1 parent f943f1d commit 8cb90f0

File tree

1 file changed

+41
-24
lines changed

1 file changed

+41
-24
lines changed

tests/cache/_fixtures.py

Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
from . import eq_
2222

2323

24+
def gen_some_key():
25+
return f"some_key_{random.randint(1, 100000)}"
26+
27+
2428
class _GenericBackendFixture(object):
2529
@classmethod
2630
def setup_class(cls):
@@ -33,12 +37,13 @@ def setup_class(cls):
3337
cls._check_backend_available(backend)
3438

3539
def tearDown(self):
40+
some_key = gen_some_key()
3641
if self._region_inst:
3742
for key in self._keys:
3843
self._region_inst.delete(key)
3944
self._keys.clear()
4045
elif self._backend_inst:
41-
self._backend_inst.delete("some_key")
46+
self._backend_inst.delete(some_key)
4247

4348
@classmethod
4449
def _check_backend_available(cls, backend):
@@ -94,22 +99,26 @@ def _backend(self):
9499
class _GenericBackendTest(_GenericBackendFixture, TestCase):
95100
def test_backend_get_nothing(self):
96101
backend = self._backend()
97-
eq_(backend.get_serialized("some_key"), NO_VALUE)
102+
some_key = gen_some_key()
103+
eq_(backend.get_serialized(some_key), NO_VALUE)
98104

99105
def test_backend_delete_nothing(self):
100106
backend = self._backend()
101-
backend.delete("some_key")
107+
some_key = gen_some_key()
108+
backend.delete(some_key)
102109

103110
def test_backend_set_get_value(self):
104111
backend = self._backend()
105-
backend.set_serialized("some_key", b"some value")
106-
eq_(backend.get_serialized("some_key"), b"some value")
112+
some_key = gen_some_key()
113+
backend.set_serialized(some_key, b"some value")
114+
eq_(backend.get_serialized(some_key), b"some value")
107115

108116
def test_backend_delete(self):
109117
backend = self._backend()
110-
backend.set_serialized("some_key", b"some value")
111-
backend.delete("some_key")
112-
eq_(backend.get_serialized("some_key"), NO_VALUE)
118+
some_key = gen_some_key()
119+
backend.set_serialized(some_key, b"some value")
120+
backend.delete(some_key)
121+
eq_(backend.get_serialized(some_key), NO_VALUE)
113122

114123
def test_region_is_key_locked(self):
115124
reg = self._region()
@@ -128,8 +137,9 @@ def test_region_is_key_locked(self):
128137

129138
def test_region_set_get_value(self):
130139
reg = self._region()
131-
reg.set("some key", "some value")
132-
eq_(reg.get("some key"), "some value")
140+
some_key = gen_some_key()
141+
reg.set(some_key, "some value")
142+
eq_(reg.get(some_key), "some value")
133143

134144
def test_region_set_multiple_values(self):
135145
reg = self._region()
@@ -202,16 +212,18 @@ def test_region_delete_multiple(self):
202212

203213
def test_region_set_get_nothing(self):
204214
reg = self._region()
205-
reg.delete_multi(["some key"])
206-
eq_(reg.get("some key"), NO_VALUE)
215+
some_key = gen_some_key()
216+
reg.delete_multi([some_key])
217+
eq_(reg.get(some_key), NO_VALUE)
207218

208219
def test_region_creator(self):
209220
reg = self._region()
210221

211222
def creator():
212223
return "some value"
213224

214-
eq_(reg.get_or_create("some key", creator), "some value")
225+
some_key = gen_some_key()
226+
eq_(reg.get_or_create(some_key, creator), "some value")
215227

216228
@pytest.mark.time_intensive
217229
def test_threaded_dogpile(self):
@@ -221,6 +233,7 @@ def test_threaded_dogpile(self):
221233
reg = self._region(config_args={"expiration_time": 0.25})
222234
lock = Lock()
223235
canary = []
236+
some_key = gen_some_key()
224237

225238
def creator():
226239
ack = lock.acquire(False)
@@ -232,7 +245,7 @@ def creator():
232245

233246
def f():
234247
for x in range(5):
235-
reg.get_or_create("some key", creator)
248+
reg.get_or_create(some_key, creator)
236249
time.sleep(0.5)
237250

238251
threads = [Thread(target=f) for i in range(10)]
@@ -253,8 +266,9 @@ def test_threaded_get_multi(self):
253266
With "distributed" locks, this is not 100% the case.
254267
255268
"""
269+
some_key = gen_some_key()
256270
reg = self._region(config_args={"expiration_time": 0.25})
257-
backend_mutex = reg.backend.get_mutex("some_key")
271+
backend_mutex = reg.backend.get_mutex(some_key)
258272
is_custom_mutex = backend_mutex is not None
259273

260274
locks = dict((str(i), Lock()) for i in range(11))
@@ -310,10 +324,11 @@ def f():
310324

311325
def test_region_delete(self):
312326
reg = self._region()
313-
reg.set("some key", "some value")
314-
reg.delete("some key")
315-
reg.delete("some key")
316-
eq_(reg.get("some key"), NO_VALUE)
327+
some_key = gen_some_key()
328+
reg.set(some_key, "some value")
329+
reg.delete(some_key)
330+
reg.delete(some_key)
331+
eq_(reg.get(some_key), NO_VALUE)
317332

318333
@pytest.mark.time_intensive
319334
def test_region_expire(self):
@@ -324,6 +339,7 @@ def test_region_expire(self):
324339
# with very slow processing missing a timeout, as is often the
325340
# case with this particular test
326341

342+
some_key = gen_some_key()
327343
expire_time = 1.00
328344

329345
reg = self._region(config_args={"expiration_time": expire_time})
@@ -332,18 +348,18 @@ def test_region_expire(self):
332348
def creator():
333349
return "some value %d" % next(counter)
334350

335-
eq_(reg.get_or_create("some key", creator), "some value 1")
351+
eq_(reg.get_or_create(some_key, creator), "some value 1")
336352
time.sleep(expire_time + (0.2 * expire_time))
337353
# expiration is definitely hit
338-
post_expiration = reg.get("some key", ignore_expiration=True)
354+
post_expiration = reg.get(some_key, ignore_expiration=True)
339355
if post_expiration is not NO_VALUE:
340356
eq_(post_expiration, "some value 1")
341357

342-
eq_(reg.get_or_create("some key", creator), "some value 2")
358+
eq_(reg.get_or_create(some_key, creator), "some value 2")
343359

344360
# this line needs to run less the expire_time sec before the previous
345361
# two or it hits the expiration
346-
eq_(reg.get("some key"), "some value 2")
362+
eq_(reg.get(some_key), "some value 2")
347363

348364
def test_decorated_fn_functionality(self):
349365
# test for any quirks in the fn decoration that interact
@@ -371,13 +387,14 @@ def my_function(x, y):
371387
eq_(my_function(4, 3), 11)
372388

373389
def test_exploding_value_fn(self):
390+
some_key = gen_some_key()
374391
reg = self._region()
375392

376393
def boom():
377394
raise Exception("boom")
378395

379396
assert_raises_message(
380-
Exception, "boom", reg.get_or_create, "some_key", boom
397+
Exception, "boom", reg.get_or_create, some_key, boom
381398
)
382399

383400

0 commit comments

Comments
 (0)