[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [bridgedb/master] Refactor old test_Bridges.py tests into test_bridges.py equivalents.
commit b97f646c072352187b3f67e5059afe7668499b00
Author: Isis Lovecruft <isis@xxxxxxxxxxxxxx>
Date: Fri Dec 5 23:08:13 2014 +0000
Refactor old test_Bridges.py tests into test_bridges.py equivalents.
The changes were very minor, mostly just replacing
's/Bridges\.Bridge/bridges\.Bridge/'. The old test_init() integration
test was separated into six new tests, test_integration_init_[0-6]; all
other integration tests have one-to-one correspondents with only trivial
changes.
---
lib/bridgedb/test/test_Bridges.py | 200 --------------------------
lib/bridgedb/test/test_bridges.py | 283 +++++++++++++++++++++++++++++++++++++
2 files changed, 283 insertions(+), 200 deletions(-)
diff --git a/lib/bridgedb/test/test_Bridges.py b/lib/bridgedb/test/test_Bridges.py
deleted file mode 100644
index 2c7d09b..0000000
--- a/lib/bridgedb/test/test_Bridges.py
+++ /dev/null
@@ -1,200 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of BridgeDB, a Tor bridge distribution system.
-#
-# :authors: please also see AUTHORS file
-# :copyright: (c) 2007-2014, The Tor Project, Inc.
-# (c) 2007-2014, all entities within the AUTHORS file
-# :license: 3-Clause BSD, see LICENSE for licensing information
-
-"""Unittests for the :mod:`bridgedb.EmailServer` module."""
-
-import ipaddr
-from binascii import a2b_hex
-
-from twisted.trial import unittest
-
-from bridgedb import Bridges
-from bridgedb.bridges import PluggableTransport
-from bridgedb.parse.addr import PortList
-
-import hashlib
-try:
- from cStringIO import StringIO
-except ImportError:
- from io import StringIO
-
-
-class BridgeClassTest(unittest.TestCase):
- """Tests for :class:`bridgedb.Bridges.Bridge`."""
-
- def setUp(self):
- self.nickname = 'unnamed'
- self.ip = ipaddr.IPAddress('127.0.0.1')
- self.orport = '9001'
- self.fingerprint = 'a1cc8dfef1fa11af9c40af1054df9daf45250556'
- self.id_digest = a2b_hex(self.fingerprint)
- self.or_addresses = {ipaddr.IPAddress('6.6.6.6'): PortList(6666),
- ipaddr.IPAddress('42.1.42.1'): PortList(443)}
-
- def test_init(self):
- try:
- Bridges.Bridge(self.nickname, self.ip, self.orport,
- fingerprint=self.fingerprint)
- Bridges.Bridge(self.nickname, self.ip, self.orport,
- id_digest=self.id_digest)
- except Exception as e:
- self.fail("Unexpected %s exception." % type(e))
-
- self.failUnlessRaises(TypeError, Bridges.Bridge,
- self.nickname, self.ip, self.orport,
- id_digest=self.id_digest[:-1])
-
- self.failUnlessRaises(TypeError, Bridges.Bridge,
- self.nickname, self.ip, self.orport,
- fingerprint=self.fingerprint[:-1])
-
- self.failUnlessRaises(TypeError, Bridges.Bridge,
- self.nickname, self.ip, self.orport)
-
- invalid_fingerprint = self.fingerprint[:-1] + 'q'
- self.failUnlessRaises(TypeError, Bridges.Bridge, self.nickname,
- self.ip, self.orport,
- fingerprint=invalid_fingerprint)
-
- def test_getID(self):
- bridge = Bridges.Bridge(self.nickname, self.ip, self.orport,
- self.fingerprint)
- self.assertEqual(self.id_digest, bridge.getID())
-
- def test_setDescriptorDigest(self):
- """Test setting the server-descriptor digest value."""
- bridge = Bridges.Bridge(self.nickname, self.ip, self.orport,
- self.fingerprint)
- testtext = 'thisisatest'
- bridge.setDescriptorDigest(testtext)
- self.assertEqual(bridge.desc_digest, testtext)
-
- def test_setExtraInfoDigest(self):
- """Test setting the extra-info digest value."""
- bridge = Bridges.Bridge(self.nickname, self.ip, self.orport,
- self.fingerprint)
- testtext = 'thisisatest'
- bridge.setExtraInfoDigest(testtext)
- self.assertEqual(bridge.ei_digest, testtext)
-
- def test_setVerified(self):
- """Test setting the `verified` attribute on a Bridge."""
- bridge = Bridges.Bridge(self.nickname, self.ip, self.orport,
- self.fingerprint)
- bridge.setVerified()
- self.assertTrue(bridge.isVerified())
- self.assertTrue(bridge.verified)
- self.assertEqual(self.id_digest, bridge.getID())
-
- def test_setRunningStable(self):
- """Test setting the `running` and `stable` attributes on a Bridge."""
- bridge = Bridges.Bridge(self.nickname, self.ip, self.orport,
- self.fingerprint)
- self.assertFalse(bridge.running)
- self.assertFalse(bridge.stable)
- bridge.setStatus(True, True)
- self.assertTrue(bridge.running)
- self.assertTrue(bridge.stable)
-
- def test_getConfigLine_vanilla_withoutFingerprint(self):
- """Should return a config line without a fingerprint."""
- bridge = Bridges.Bridge('nofpr', '23.23.23.23', 2323, self.fingerprint,
- or_addresses=self.or_addresses)
- bridgeLine = bridge.getConfigLine()
- ip = bridgeLine.split(':')[0]
- self.assertTrue(ipaddr.IPAddress(ip))
-
- def test_getConfigLine_vanilla_withFingerprint(self):
- """Should return a config line with a fingerprint."""
- bridge = Bridges.Bridge('fpr', '23.23.23.23', 2323,
- id_digest=self.id_digest,
- or_addresses=self.or_addresses)
- bridgeLine = bridge.getConfigLine(includeFingerprint=True)
- self.assertSubstring(self.fingerprint, bridgeLine)
- ip = bridgeLine.split(':')[0]
- self.assertTrue(ipaddr.IPAddress(ip))
-
- def test_getConfigLine_scramblesuit_withFingerprint(self):
- """Should return a scramblesuit config line with a fingerprint."""
- bridge = Bridges.Bridge('philipkdick', '23.23.23.23', 2323,
- id_digest=self.id_digest,
- or_addresses=self.or_addresses)
- ptArgs = {'password': 'NEQGQYLUMUQGK5TFOJ4XI2DJNZTS4LRO'}
- pt = PluggableTransport(bridge.fingerprint, 'scramblesuit',
- ipaddr.IPAddress('42.42.42.42'), 4242,
- ptArgs)
- bridge.transports.append(pt)
- bridgeLine = bridge.getConfigLine(includeFingerprint=True,
- transport='scramblesuit')
- ptArgsList = ' '.join(["{0}={1}".format(k,v) for k,v in ptArgs.items()])
- self.assertEqual("scramblesuit 42.42.42.42:4242 %s %s"
- % (self.fingerprint, ptArgsList),
- bridgeLine)
-
- def test_getDescriptorDigests(self):
- sha1hash = hashlib.sha1()
- ei_digest = 'abcdefghijklmno'
-
- test = "this is a test line\nFollowed by another\n"
- test += "extra-info-digest %s\n" % ei_digest
- sha1hash.update(test)
- digest = sha1hash.hexdigest()
- test += "-----BEGIN SIGNATURE-----\n"
- test += "This is a test line that should be skipped\n"
- test += "-----END SIGNATURE-----\n"
- digests = Bridges.getDescriptorDigests(StringIO(test))
- self.failUnlessIn(digest, digests)
- self.failUnlessEqual(ei_digest, digests[digest])
-
- def test_getExtraInfoDigests(self):
- sha1hash = hashlib.sha1()
-
- test = "Many words and line all together\n"
- test += "extra info is nothing like weather\n"
- test += "it's certain to come, like the key in a hum\n"
- test += "but sometimes without a transport and rum\n"
- content = test
- sha1hash.update(test)
- digest = sha1hash.hexdigest()
- test += "-----BEGIN SIGNATURE-----\n"
- test += "But the rum can't save the world like you\n"
- test += "-----END SIGNATURE-----\n"
- digests = Bridges.getExtraInfoDigests(StringIO(test))
- self.failUnlessIn(digest, digests)
- self.failUnlessEqual(content, digests[digest].read())
-
- def test_splitterBridgeInsertion(self):
- key = "Testing-Bridges-To-Rings"
- splitter = Bridges.FilteredBridgeSplitter(key)
-
- bridge1 = Bridges.Bridge('unamed1', '1.2.3.5', 9100,
- 'a1cc8dfef1fa11af9c40af1054df9daf45250550')
- bridge1.setStatus(running = True)
- bridge2 = Bridges.Bridge('unamed2', '1.2.3.4', 8080,
- 'a1cc8dfef1fa11af9c40af1054df9daf45250551')
- bridge2.setStatus(running = True)
- bridge3 = Bridges.Bridge('unamed3', '5.2.3.4', 8080,
- 'b1cc8dfef1fa11af9c40af1054df9daf45250552')
- bridge3.setStatus(running = True)
- bridge4 = Bridges.Bridge('unamed3', '5.2.3.4', 8080,
- 'b1cc8dfef1fa11af9c40af1054df9daf45250552')
- bridge4.setStatus(running = True)
-
- self.failUnlessEqual(len(splitter), 0)
- splitter.insert(bridge1)
- splitter.insert(bridge2)
- splitter.insert(bridge3)
- # Check that all were inserted
- self.failUnlessEqual(len(splitter), 3)
- splitter.insert(bridge1)
- # Check that the same bridge is not inserted twice
- self.failUnlessEqual(len(splitter), 3)
- splitter.insert(bridge4)
- # Check that identical bridges are not inserted twice
- self.failUnlessEqual(len(splitter), 3)
diff --git a/lib/bridgedb/test/test_bridges.py b/lib/bridgedb/test/test_bridges.py
new file mode 100644
index 0000000..6164620
--- /dev/null
+++ b/lib/bridgedb/test/test_bridges.py
@@ -0,0 +1,283 @@
+# -*- coding: utf-8 -*-
+#
+# This file is part of BridgeDB, a Tor bridge distribution system.
+#
+# :authors: Isis Lovecruft <isis@xxxxxxxxxxxxxx>
+# please also see AUTHORS file
+# :copyright: (c) 2007-2014, The Tor Project, Inc.
+# (c) 2007-2014, all entities within the AUTHORS file
+# :license: 3-Clause BSD, see LICENSE for licensing information
+
+"""Unittests for the :mod:`bridgedb.bridges` module."""
+
+from binascii import a2b_hex
+
+import ipaddr
+import io
+import hashlib
+import warnings
+
+from twisted.trial import unittest
+
+from bridgedb import bridges
+from bridgedb.Bridges import FilteredBridgeSplitter
+from bridgedb.bridgerequest import BridgeRequestBase
+from bridgedb.parse.addr import PortList
+
+# Don't print "WARNING:root: Couldn't parse K=V from PT arg: ''" a bunch of
+# times while running the tests.
+warnings.filterwarnings("ignore", ".*Couldn't parse K=V from PT arg.*", Warning)
+
+
+class BridgeIntegrationTests(unittest.TestCase):
+ """Integration tests to ensure that the new :class:`bridgedb.bridges.Bridge`
+ class has compatible behaviour with the expected behaviour of the old
+ :class:`bridgedb.Bridges.Bridge` class.
+
+ .. data: OldTest (enum)
+
+ These tests were refactored from the old tests for
+ :class:`~bridgedb.test.deprecated.Bridge`, which lived in
+ ``lib/bridgedb/test/test_Bridges.py``. For the translations from the old
+ tests in ``bridgedb.test.test_Bridges.BridgeClassTest`` to their new
+ equivalents here in ``bridgedb.test.test_bridges.BridgeIntegrationTests``,
+ which should test for the same things as their old equivalents, see the
+ following table:
+
+ ============================================== ========================
+ OldTest Equivalent Test(s) Here
+ ============================================== ========================
+ test_init test_integration_init_[0-5]
+ test_getID test_integration_getID
+ test_setDescriptorDigest test_integration_setDescriptorDigest
+ test_setExtraInfoDigest test_integration_setExtraInfoDigest
+ test_setVerified test_integration_setVerified
+ test_setRunningStable test_integration_setRunningStable
+ test_getConfigLine_vanilla_withoutFingerprint test_integration_getConfigLine_vanilla_withoutFingerprint
+ test_getConfigLine_vanilla_withFingerprint test_integration_getConfigLine_vanilla_withFingerprint
+ test_getConfigLine_scramblesuit_withFingeprint test_integration_getConfigLine_scramblesuit_withFingerprint
+ test_getDescriptorDigests test_integration_getDescriptorDigests
+ test_getExtraInfoDigests test_integration_getExtraInfoDigests
+ test_splitterBridgeInsertion test_integration_splitterBridgeInsertion
+ ============================================== ========================
+ ..
+ """
+
+ def setUp(self):
+ self.nickname = 'unnamed'
+ self.ip = ipaddr.IPAddress('127.0.0.1')
+ self.orport = '9001'
+ self.fingerprint = 'a1cc8dfef1fa11af9c40af1054df9daf45250556'
+ self.id_digest = a2b_hex(self.fingerprint)
+ self.or_addresses = {ipaddr.IPAddress('6.6.6.6'): PortList(6666),
+ ipaddr.IPAddress('42.1.42.1'): PortList(443)}
+
+ def test_integration_init_0(self):
+ """Ensure that we can initialise the new :class:`bridgedb.bridges.Bridge`
+ class in the same manner as the old :class:`bridgedb.Bridges.Bridge`
+ class. This test ensures that initialisation with a fingerprint is
+ successful.
+ """
+ b = bridges.Bridge(self.nickname, self.ip, self.orport,
+ fingerprint=self.fingerprint)
+ self.assertIsInstance(b, bridges.Bridge)
+
+ def test_integration_init_1(self):
+ """Ensure that we can initialise the new :class:`bridgedb.bridges.Bridge`
+ class in the same manner as the old :class:`bridgedb.Bridges.Bridge`
+ class. This test ensures that initialisation with a digest of a
+ bridge's ID key is successful.
+ """
+ b = bridges.Bridge(self.nickname, self.ip, self.orport,
+ id_digest=self.id_digest)
+ self.assertIsInstance(b, bridges.Bridge)
+
+ def test_integration_init_2(self):
+ """Initialisation of a :class:`bridgedb.bridges.Bridge` with a bad
+ ``id_digest`` should raise a TypeError.
+ """
+ self.failUnlessRaises(TypeError, bridges.Bridge,
+ self.nickname, self.ip, self.orport,
+ id_digest=self.id_digest[:-1])
+
+ def test_integration_init_3(self):
+ """Initialisation of a :class:`bridgedb.bridges.Bridge` with a bad
+ ``fingerprint`` should raise a TypeError.
+ """
+ self.failUnlessRaises(TypeError, bridges.Bridge,
+ self.nickname, self.ip, self.orport,
+ fingerprint=self.fingerprint[:-1])
+
+ def test_integration_init_4(self):
+ """Initialisation of a :class:`bridgedb.bridges.Bridge` with a bad
+ ``fingerprint`` should raise a TypeError.
+ """
+ invalid_fingerprint = self.fingerprint[:-1] + 'q'
+ self.failUnlessRaises(TypeError, bridges.Bridge, self.nickname,
+ self.ip, self.orport,
+ fingerprint=invalid_fingerprint)
+
+ def test_integration_init_5(self):
+ """Initialisation of a :class:`bridgedb.bridges.Bridge` without either
+ a ``fingerprint`` or an ``id_digest`` should raise a TypeError.
+ """
+ self.failUnlessRaises(TypeError, bridges.Bridge,
+ self.nickname, self.ip, self.orport)
+
+ def test_integration_getID(self):
+ """Calling ``bridges.Bridge.getID()`` should return the binary encoded
+ ``fingerprint``.
+ """
+ bridge = bridges.Bridge(self.nickname, self.ip, self.orport,
+ self.fingerprint)
+ self.assertEqual(self.id_digest, bridge.getID())
+
+ def test_integration_setDescriptorDigest(self):
+ """Test setting the server-descriptor digest value."""
+ bridge = bridges.Bridge(self.nickname, self.ip, self.orport,
+ self.fingerprint)
+ testtext = 'thisisatest'
+ bridge.setDescriptorDigest(testtext)
+ self.assertEqual(bridge.desc_digest, testtext)
+
+ def test_integration_setExtraInfoDigest(self):
+ """Test setting the extra-info digest value."""
+ bridge = bridges.Bridge(self.nickname, self.ip, self.orport,
+ self.fingerprint)
+ testtext = 'thisisatest'
+ bridge.setExtraInfoDigest(testtext)
+ self.assertEqual(bridge.ei_digest, testtext)
+
+ def test_integration_setVerified(self):
+ """Test setting the `verified` attribute on a Bridge."""
+ raise unittest.SkipTest(
+ ("The setVerified() and isVerified() methods were not refactored "
+ "into the new bridgedb.bridges.Bridge class, as it's not clear "
+ "yet if they are necessary. Skip these tests for now."))
+
+ bridge = bridges.Bridge(self.nickname, self.ip, self.orport,
+ self.fingerprint)
+ bridge.setVerified()
+ self.assertTrue(bridge.isVerified())
+ self.assertTrue(bridge.verified)
+ self.assertEqual(self.id_digest, bridge.getID())
+
+ def test_integration_setRunningStable(self):
+ """Test setting the `running` and `stable` attributes on a Bridge."""
+ bridge = bridges.Bridge(self.nickname, self.ip, self.orport,
+ self.fingerprint)
+ self.assertFalse(bridge.running)
+ self.assertFalse(bridge.stable)
+ bridge.setStatus(True, True)
+ self.assertTrue(bridge.running)
+ self.assertTrue(bridge.stable)
+
+ def test_integration_getConfigLine_vanilla_withoutFingerprint(self):
+ """Should return a config line without a fingerprint."""
+ #self.skip = True
+ bridge = bridges.Bridge('nofpr', '23.23.23.23', 2323, self.fingerprint,
+ or_addresses=self.or_addresses)
+ bridgeLine = bridge.getConfigLine()
+ ip = bridgeLine.split(':')[0]
+ self.assertTrue(ipaddr.IPAddress(ip))
+
+ def test_integration_getConfigLine_vanilla_withFingerprint(self):
+ """Should return a config line with a fingerprint."""
+ bridge = bridges.Bridge('fpr', '23.23.23.23', 2323,
+ id_digest=self.id_digest,
+ or_addresses=self.or_addresses)
+ bridgeLine = bridge.getConfigLine(includeFingerprint=True)
+ self.assertSubstring(self.fingerprint, bridgeLine)
+ ip = bridgeLine.split(':')[0]
+ self.assertTrue(ipaddr.IPAddress(ip))
+
+ def test_integration_getConfigLine_scramblesuit_withFingerprint(self):
+ """Should return a scramblesuit config line with a fingerprint."""
+ bridge = bridges.Bridge('philipkdick', '23.23.23.23', 2323,
+ id_digest=self.id_digest,
+ or_addresses=self.or_addresses)
+ ptArgs = {'password': 'NEQGQYLUMUQGK5TFOJ4XI2DJNZTS4LRO'}
+ pt = bridges.PluggableTransport(bridge.fingerprint, 'scramblesuit',
+ ipaddr.IPAddress('42.42.42.42'), 4242,
+ ptArgs)
+ bridge.transports.append(pt)
+ bridgeLine = bridge.getConfigLine(includeFingerprint=True,
+ transport='scramblesuit')
+ ptArgsList = ' '.join(["{0}={1}".format(k,v) for k,v in ptArgs.items()])
+ self.assertEqual("scramblesuit 42.42.42.42:4242 %s %s"
+ % (self.fingerprint, ptArgsList),
+ bridgeLine)
+
+ def test_integration_getDescriptorDigests(self):
+ raise unittest.SkipTest(
+ ("The functions getDescriptorDigests() and getExtraInfoDigests() "
+ "have not been refactored into the new bridgedb.bridges module "
+ "because it's not clear yet if they're necessary. Skip these "
+ "tests for now."))
+
+ sha1hash = hashlib.sha1()
+ ei_digest = 'abcdefghijklmno'
+
+ test = "this is a test line\nFollowed by another\n"
+ test += "extra-info-digest %s\n" % ei_digest
+ sha1hash.update(test)
+ digest = sha1hash.hexdigest()
+ test += "-----BEGIN SIGNATURE-----\n"
+ test += "This is a test line that should be skipped\n"
+ test += "-----END SIGNATURE-----\n"
+ digests = bridges.getDescriptorDigests(io.StringIO(test))
+ self.failUnlessIn(digest, digests)
+ self.failUnlessEqual(ei_digest, digests[digest])
+
+ def test_integration_getExtraInfoDigests(self):
+ raise unittest.SkipTest(
+ ("The functions getDescriptorDigests() and getExtraInfoDigests() "
+ "have not been refactored into the new bridgedb.bridges module "
+ "because it's not clear yet if they're necessary. Skip these "
+ "tests for now."))
+
+ sha1hash = hashlib.sha1()
+
+ test = "Many words and line all together\n"
+ test += "extra info is nothing like weather\n"
+ test += "it's certain to come, like the key in a hum\n"
+ test += "but sometimes without a transport and rum\n"
+ content = test
+ sha1hash.update(test)
+ digest = sha1hash.hexdigest()
+ test += "-----BEGIN SIGNATURE-----\n"
+ test += "But the rum can't save the world like you\n"
+ test += "-----END SIGNATURE-----\n"
+ digests = bridges.getExtraInfoDigests(io.StringIO(test))
+ self.failUnlessIn(digest, digests)
+ self.failUnlessEqual(content, digests[digest].read())
+
+ def test_integration_splitterBridgeInsertion(self):
+ key = "Testing-Bridges-To-Rings"
+ splitter = FilteredBridgeSplitter(key)
+
+ bridge1 = bridges.Bridge('unamed1', '1.2.3.5', 9100,
+ 'a1cc8dfef1fa11af9c40af1054df9daf45250550')
+ bridge1.setStatus(running = True)
+ bridge2 = bridges.Bridge('unamed2', '1.2.3.4', 8080,
+ 'a1cc8dfef1fa11af9c40af1054df9daf45250551')
+ bridge2.setStatus(running = True)
+ bridge3 = bridges.Bridge('unamed3', '5.2.3.4', 8080,
+ 'b1cc8dfef1fa11af9c40af1054df9daf45250552')
+ bridge3.setStatus(running = True)
+ bridge4 = bridges.Bridge('unamed3', '5.2.3.4', 8080,
+ 'b1cc8dfef1fa11af9c40af1054df9daf45250552')
+ bridge4.setStatus(running = True)
+
+ self.failUnlessEqual(len(splitter), 0)
+ splitter.insert(bridge1)
+ splitter.insert(bridge2)
+ splitter.insert(bridge3)
+ # Check that all were inserted
+ self.failUnlessEqual(len(splitter), 3)
+ splitter.insert(bridge1)
+ # Check that the same bridge is not inserted twice
+ self.failUnlessEqual(len(splitter), 3)
+ splitter.insert(bridge4)
+ # Check that identical bridges are not inserted twice
+ self.failUnlessEqual(len(splitter), 3)
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits