[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [stem/master] Unit test directory equality
commit d893ec53b03bda8fa973e0552c65999b5eb5167f
Author: Damian Johnson <atagar@xxxxxxxxxxxxxx>
Date: Sun May 6 13:03:24 2018 -0700
Unit test directory equality
Now that we've cleaned up our equality checks it's a natural spot to start
testing. Found an interesting bug where 'False' and 'None' values resulted in
directories being considered equal.
---
stem/util/__init__.py | 8 ++++++++
test/settings.cfg | 1 +
test/unit/directory/__init__.py | 1 +
test/unit/directory/authority.py | 28 ++++++++++++++++++++++++++++
test/unit/directory/fallback.py | 24 ++++++++++++++++++++++++
5 files changed, 62 insertions(+)
diff --git a/stem/util/__init__.py b/stem/util/__init__.py
index 5ccd921a..711f28a5 100644
--- a/stem/util/__init__.py
+++ b/stem/util/__init__.py
@@ -31,6 +31,12 @@ else:
str_type = unicode
int_type = long
+# Python hashes booleans to zero or one. Usually this would be fine, but since
+# we use hashes for equality checks we need them to be something less common.
+
+TRUE_HASH_VALUE = 4813749
+FALSE_HASH_VALUE = 5826450
+
def datetime_to_unix(timestamp):
"""
@@ -72,6 +78,8 @@ def _hash_attr(obj, *attributes, **kwargs):
elif isinstance(attr_value, (list, tuple)):
for entry in attr_value:
my_hash = (my_hash + hash(entry)) * 1024
+ elif isinstance(attr_value, bool):
+ my_hash += TRUE_HASH_VALUE if attr_value else FALSE_HASH_VALUE
else:
my_hash += hash(attr_value)
diff --git a/test/settings.cfg b/test/settings.cfg
index 2206c7e7..312e3ce9 100644
--- a/test/settings.cfg
+++ b/test/settings.cfg
@@ -220,6 +220,7 @@ test.unit_tests
|test.unit.endpoint.TestEndpoint
|test.unit.version.TestVersion
|test.unit.manual.TestManual
+|test.unit.directory.authority.TestAuthority
|test.unit.directory.fallback.TestFallback
|test.unit.tutorial.TestTutorial
|test.unit.tutorial_examples.TestTutorialExamples
diff --git a/test/unit/directory/__init__.py b/test/unit/directory/__init__.py
index 78e42d7c..7ca7ea92 100644
--- a/test/unit/directory/__init__.py
+++ b/test/unit/directory/__init__.py
@@ -3,5 +3,6 @@ Unit tests for stem.directory.
"""
__all__ = [
+ 'authority',
'fallback',
]
diff --git a/test/unit/directory/authority.py b/test/unit/directory/authority.py
new file mode 100644
index 00000000..4a5f3a12
--- /dev/null
+++ b/test/unit/directory/authority.py
@@ -0,0 +1,28 @@
+"""
+Unit tests for stem.directory.Authority.
+"""
+
+import unittest
+
+import stem.directory
+
+
+class TestAuthority(unittest.TestCase):
+ def test_equality(self):
+ authority_attr = {
+ 'address': '5.9.110.236',
+ 'or_port': 9001,
+ 'dir_port': 9030,
+ 'fingerprint': '0756B7CD4DFC8182BE23143FAC0642F515182CEB',
+ 'nickname': 'rueckgrat',
+ 'v3ident': '23D15D965BC35114467363C165C4F724B64B4F66',
+ 'is_bandwidth_authority': False,
+ }
+
+ self.assertEqual(stem.directory.Authority(**authority_attr), stem.directory.Authority(**authority_attr))
+
+ for attr in authority_attr:
+ for value in (None, 'something else'):
+ second_authority = dict(authority_attr)
+ second_authority[attr] = value
+ self.assertNotEqual(stem.directory.Authority(**authority_attr), stem.directory.Authority(**second_authority))
diff --git a/test/unit/directory/fallback.py b/test/unit/directory/fallback.py
index c95d74b7..cd857b9f 100644
--- a/test/unit/directory/fallback.py
+++ b/test/unit/directory/fallback.py
@@ -65,6 +65,30 @@ FALLBACK_ENTRY = b"""\
class TestFallback(unittest.TestCase):
+ def test_equality(self):
+ fallback_attr = {
+ 'address': '5.9.110.236',
+ 'or_port': 9001,
+ 'dir_port': 9030,
+ 'fingerprint': '0756B7CD4DFC8182BE23143FAC0642F515182CEB',
+ 'nickname': 'rueckgrat',
+ 'has_extrainfo': True,
+ 'orport_v6': ('2a01:4f8:162:51e2::2', 9001),
+ 'header': OrderedDict((
+ ('type', 'fallback'),
+ ('version', '2.0.0'),
+ ('timestamp', '20170526090242'),
+ )),
+ }
+
+ self.assertEqual(stem.directory.Fallback(**fallback_attr), stem.directory.Fallback(**fallback_attr))
+
+ for attr in fallback_attr:
+ for value in (None, 'something else'):
+ second_fallback = dict(fallback_attr)
+ second_fallback[attr] = value
+ self.assertNotEqual(stem.directory.Fallback(**fallback_attr), stem.directory.Fallback(**second_fallback))
+
def test_from_cache(self):
# quick sanity test that we can load cached content
fallback_directories = stem.directory.Fallback.from_cache()
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits