Skip to content

Commit

Permalink
In unit tests, explicitly pass in the Redis client (#300)
Browse files Browse the repository at this point in the history
This is the first step toward using a separate Redis database for unit
tests, for easier cleanup.
  • Loading branch information
brainix committed Dec 27, 2020
1 parent 1aed654 commit 77f857e
Show file tree
Hide file tree
Showing 10 changed files with 290 additions and 197 deletions.
17 changes: 14 additions & 3 deletions tests/test_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,24 @@ def test_random_key_raises_randomkeyerror_when_no_tries_left(self):
class _BaseTestCase(TestCase):
def setUp(self):
super().setUp()
self.raj = RedisDict(key='pottery:raj', hobby='music', vegetarian=True)
self.raj = RedisDict(
redis=self.redis,
key='pottery:raj',
hobby='music',
vegetarian=True,
)
self.nilika = RedisDict(
redis=self.redis,
key='pottery:nilika',
hobby='music',
vegetarian=True,
)
self.luvh = RedisDict(key='luvh', hobby='bullying', vegetarian=False)
self.luvh = RedisDict(
redis=self.redis,
key='luvh',
hobby='bullying',
vegetarian=False,
)

def tearDown(self):
self.redis.delete('luvh')
Expand All @@ -50,7 +61,7 @@ def tearDown(self):
class CommonTests(_BaseTestCase):
def test_out_of_scope(self):
def scope():
raj = RedisDict(hobby='music', vegetarian=True)
raj = RedisDict(redis=self.redis, hobby='music', vegetarian=True)
assert self.redis.exists(raj.key)
return raj.key

Expand Down
49 changes: 40 additions & 9 deletions tests/test_bloom.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@ class BloomFilterTests(TestCase):

def test_init_without_iterable(self):
'Test BloomFilter.__init__() without an iterable for initialization'
dilberts = BloomFilter(num_elements=100, false_positives=0.01)
dilberts = BloomFilter(
redis=self.redis,
num_elements=100,
false_positives=0.01,
)
assert dilberts.num_elements == 100
assert dilberts.false_positives == 0.01
assert 'rajiv' not in dilberts
Expand All @@ -33,6 +37,7 @@ def test_init_with_iterable(self):
'Test BloomFilter.__init__() with an iterable for initialization'
dilberts = BloomFilter(
{'rajiv', 'raj'},
redis=self.redis,
num_elements=100,
false_positives=0.01,
)
Expand All @@ -51,25 +56,45 @@ def test_init_with_iterable(self):

def test_size_and_num_hashes(self):
'Test BloomFilter.size()'
dilberts = BloomFilter(num_elements=100, false_positives=0.1)
dilberts = BloomFilter(
redis=self.redis,
num_elements=100,
false_positives=0.1,
)
assert dilberts.size() == 480
assert dilberts.num_hashes() == 4

dilberts = BloomFilter(num_elements=1000, false_positives=0.1)
dilberts = BloomFilter(
redis=self.redis,
num_elements=1000,
false_positives=0.1,
)
assert dilberts.size() == 4793
assert dilberts.num_hashes() == 4

dilberts = BloomFilter(num_elements=100, false_positives=0.01)
dilberts = BloomFilter(
redis=self.redis,
num_elements=100,
false_positives=0.01,
)
assert dilberts.size() == 959
assert dilberts.num_hashes() == 7

dilberts = BloomFilter(num_elements=1000, false_positives=0.01)
dilberts = BloomFilter(
redis=self.redis,
num_elements=1000,
false_positives=0.01,
)
assert dilberts.size() == 9586
assert dilberts.num_hashes() == 7

def test_add(self):
'Test BloomFilter add(), __contains__(), and __len__()'
dilberts = BloomFilter(num_elements=100, false_positives=0.01)
dilberts = BloomFilter(
redis=self.redis,
num_elements=100,
false_positives=0.01,
)
assert 'rajiv' not in dilberts
assert 'raj' not in dilberts
assert 'dan' not in dilberts
Expand Down Expand Up @@ -120,7 +145,11 @@ def test_add(self):

def test_update(self):
'Test BloomFilter update(), __contains__(), and __len__()'
dilberts = BloomFilter(num_elements=100, false_positives=0.01)
dilberts = BloomFilter(
redis=self.redis,
num_elements=100,
false_positives=0.01,
)
assert 'rajiv' not in dilberts
assert 'raj' not in dilberts
assert 'dan' not in dilberts
Expand Down Expand Up @@ -163,9 +192,10 @@ def test_update(self):
def test_repr(self):
'Test BloomFilter.__repr__()'
dilberts = BloomFilter(
redis=self.redis,
key=self._KEY,
num_elements=100,
false_positives=0.01,
key=self._KEY,
)
assert repr(dilberts) == f'<BloomFilter key={self._KEY}>'

Expand Down Expand Up @@ -195,9 +225,10 @@ def setUp(self):
# Initialize the recently consumed Bloom filter on the seen set.
self.recently_consumed = BloomFilter(
self.seen_links,
redis=self.redis,
key=self._KEY,
num_elements=1000,
false_positives=0.001,
key=self._KEY,
)

def tearDown(self):
Expand Down
28 changes: 16 additions & 12 deletions tests/test_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,22 @@ class CacheDecoratorTests(TestCase):

def setUp(self):
super().setUp()

def expensive_method(*args, **kwargs):
'getrandbits(16) -> x. Generates a 16-bit random int.'
return random.getrandbits(16)

self.expensive_method_expiration = redis_cache(
redis=self.redis,
key=self._KEY_EXPIRATION,
)(expensive_method)

self.expensive_method_no_expiration = redis_cache(
redis=self.redis,
key=self._KEY_NO_EXPIRATION,
timeout=None,
)(expensive_method)

self.expensive_method_expiration.cache_clear()
self.expensive_method_no_expiration.cache_clear()

Expand All @@ -33,18 +49,6 @@ def tearDown(self):
self.expensive_method_no_expiration.cache_clear()
super().tearDown()

@staticmethod
@redis_cache(key=_KEY_EXPIRATION)
def expensive_method_expiration(*args, **kwargs):
'getrandbits(16) -> x. Generates a 16-bit random int.'
return random.getrandbits(16)

@staticmethod
@redis_cache(key=_KEY_NO_EXPIRATION, timeout=None)
def expensive_method_no_expiration(*args, **kwargs):
'getrandbits(16) -> x. Generates a 16-bit random int.'
return random.getrandbits(16)

def test_cache(self):
assert self.expensive_method_expiration.cache_info() == CacheInfo(
hits=0,
Expand Down

0 comments on commit 77f857e

Please sign in to comment.