[tor-commits] [bridgedb/master] Refactor old test_Bridges.py tests into test_bridges.py equivalents.

isis at torproject.org isis at torproject.org
Sat Mar 21 02:02:58 UTC 2015


commit b97f646c072352187b3f67e5059afe7668499b00
Author: Isis Lovecruft <isis at torproject.org>
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 at torproject.org>
+#           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)





More information about the tor-commits mailing list