[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [bridgedb/develop] Add unittests for the new bridgedb.bridges.PluggableTransport class.
commit 9f91454a2e32f4b39aed5bb34d8b8221850c41ba
Author: Isis Lovecruft <isis@xxxxxxxxxxxxxx>
Date: Fri Dec 5 23:16:40 2014 +0000
Add unittests for the new bridgedb.bridges.PluggableTransport class.
---
lib/bridgedb/test/test_bridges.py | 168 ++++++++++++++++++++++++++++++++++++-
1 file changed, 166 insertions(+), 2 deletions(-)
diff --git a/lib/bridgedb/test/test_bridges.py b/lib/bridgedb/test/test_bridges.py
index 6ca96de..2805c6d 100644
--- a/lib/bridgedb/test/test_bridges.py
+++ b/lib/bridgedb/test/test_bridges.py
@@ -81,7 +81,7 @@ class BridgeIntegrationTests(unittest.TestCase):
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`
@@ -91,7 +91,7 @@ class BridgeIntegrationTests(unittest.TestCase):
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.
@@ -324,3 +324,167 @@ class FlagsTests(unittest.TestCase):
self.flags.update(["Fast", "Stable"])
self.assertTrue(self.flags.fast)
self.assertTrue(self.flags.stable)
+
+
+class PluggableTransportTests(unittest.TestCase):
+ """Tests for :class:`bridgedb.bridges.PluggableTransport."""
+
+ def setUp(self):
+ self.fingerprint = "ABCDEF0123456789ABCDEF0123456789ABCDEF01"
+
+ def test_PluggableTransport_init_with_parameters(self):
+ """Initialising a PluggableTransport with args should work."""
+ pt = bridges.PluggableTransport(self.fingerprint,
+ "voltronPT", "1.2.3.4", 443,
+ {'sharedsecret': 'foobar'})
+ self.assertIsInstance(pt, bridges.PluggableTransport)
+
+ def test_PluggableTransport_init(self):
+ """Initialising a PluggableTransport without args should work."""
+ pt = bridges.PluggableTransport()
+ self.assertIsInstance(pt, bridges.PluggableTransport)
+
+ def test_PluggableTransport_parseArgumentsIntoDict_valid_list(self):
+ """Parsing a valid list of PT args should return a dictionary."""
+ pt = bridges.PluggableTransport()
+ args = pt._parseArgumentsIntoDict(["sharedsecret=foobar",
+ "publickey=1234"])
+ self.assertIsInstance(args, dict)
+ self.assertItemsEqual(args, {"sharedsecret": "foobar",
+ "publickey": "1234"})
+
+ def test_PluggableTransport_parseArgumentsIntoDict_valid_list_multi(self):
+ """Parsing a valid list with multiple PT args in a single list element
+ should return a dictionary.
+ """
+ pt = bridges.PluggableTransport()
+ args = pt._parseArgumentsIntoDict(["sharedsecret=foobar,password=baz",
+ "publickey=1234"])
+ self.assertIsInstance(args, dict)
+ self.assertItemsEqual(args, {"sharedsecret": "foobar",
+ "password": "baz",
+ "publickey": "1234"})
+
+ def test_PluggableTransport_parseArgumentsIntoDict_invalid_missing_equals(self):
+ """Parsing a string of PT args where one PT arg (K=V) is missing an
+ ``=`` character should raise a ValueError.
+ """
+ pt = bridges.PluggableTransport()
+ args = pt._parseArgumentsIntoDict(
+ ["sharedsecret=foobar,password,publickey=1234"])
+ self.assertItemsEqual(args, {"sharedsecret": "foobar",
+ "publickey": "1234"})
+
+ def test_PluggableTransport_runChecks_invalid_fingerprint(self):
+ """Calling _runChecks() on a PluggableTransport with an invalid
+ fingerprint should raise a MalformedPluggableTransport exception.
+ """
+ pt = bridges.PluggableTransport()
+ self.assertRaises(
+ bridges.MalformedPluggableTransport,
+ pt.updateFromStemTransport,
+ "INVALIDFINGERPRINT", 'obfs4', ('34.230.223.87', 37341, [
+ ('iat-mode=0,'
+ 'node-id=2a79f14120945873482b7823caabe2fcde848722,'
+ 'public-key=0a5b046d07f6f971b7776de682f57c5b9cdc8fa060db7ef59de82e721c8098f4')]))
+
+ def test_PluggableTransport_runChecks_invalid_ip(self):
+ """Calling _runChecks() on a PluggableTransport with an invalid
+ IP address should raise a InvalidPluggableTransportIP exception.
+ """
+ pt = bridges.PluggableTransport()
+ self.assertRaises(
+ bridges.InvalidPluggableTransportIP,
+ pt.updateFromStemTransport,
+ self.fingerprint, 'obfs4', ('34.230.223', 37341, [
+ ('iat-mode=0,'
+ 'node-id=2a79f14120945873482b7823caabe2fcde848722,')]))
+
+ def test_PluggableTransport_runChecks_invalid_port_type(self):
+ """Calling _runChecks() on a PluggableTransport with an invalid port
+ should raise a MalformedPluggableTransport exception.
+ """
+ pt = bridges.PluggableTransport()
+ self.assertRaises(
+ bridges.MalformedPluggableTransport,
+ pt.updateFromStemTransport,
+ self.fingerprint, 'obfs4', ('34.230.223.87', "anyport", [
+ ('iat-mode=0,'
+ 'node-id=2a79f14120945873482b7823caabe2fcde848722,')]))
+
+ def test_PluggableTransport_runChecks_invalid_port_range(self):
+ """Calling _runChecks() on a PluggableTransport with an invalid port
+ (too high) should raise a MalformedPluggableTransport exception.
+ """
+ pt = bridges.PluggableTransport()
+ self.assertRaises(
+ bridges.MalformedPluggableTransport,
+ pt.updateFromStemTransport,
+ self.fingerprint, 'obfs4', ('34.230.223.87', 65536, [
+ ('iat-mode=0,'
+ 'node-id=2a79f14120945873482b7823caabe2fcde848722,')]))
+
+ def test_PluggableTransport_runChecks_invalid_pt_args(self):
+ """Calling _runChecks() on a PluggableTransport with an invalid PT
+ args should raise a MalformedPluggableTransport exception.
+ """
+ try:
+ pt = bridges.PluggableTransport(self.fingerprint,
+ "voltronPT", "1.2.3.4", 443,
+ 'sharedsecret=foobar')
+ except Exception as error:
+ self.failUnlessIsInstance(error,
+ bridges.MalformedPluggableTransport)
+
+ def test_PluggableTransport_getTransportLine_bridge_prefix(self):
+ """If the 'Bridge ' prefix was requested, then it should be at the
+ beginning of the bridge line.
+ """
+ pt = bridges.PluggableTransport(self.fingerprint,
+ "voltronPT", "1.2.3.4", 443,
+ {'sharedsecret': 'foobar',
+ 'password': 'unicorns'})
+ bridgeLine = pt.getTransportLine(bridgePrefix=True)
+ self.assertTrue(bridgeLine.startswith("Bridge "))
+
+ def test_PluggableTransport_getTransportLine_without_Fingerprint(self):
+ """If no fingerprint was requested, then there shouldn't be a
+ fingerprint in the bridge line.
+ """
+ pt = bridges.PluggableTransport(self.fingerprint,
+ "voltronPT", "1.2.3.4", 443,
+ {'sharedsecret': 'foobar',
+ 'password': 'unicorns'})
+ bridgeLine = pt.getTransportLine(includeFingerprint=False)
+ self.assertNotSubstring(self.fingerprint, bridgeLine)
+
+ def test_PluggableTransport_getTransportLine_content_order(self):
+ """Check the order and content of the bridge line string."""
+ pt = bridges.PluggableTransport(self.fingerprint,
+ "voltronPT", "1.2.3.4", 443,
+ {'sharedsecret': 'foobar',
+ 'password': 'unicorns'})
+ bridgeLine = pt.getTransportLine()
+
+ # We have to check for substrings because we don't know which order
+ # the PT arguments will end up in the bridge line. Fortunately, the
+ # following three are the only ones which are important to have in
+ # order:
+ self.assertTrue(bridgeLine.startswith("voltronPT"))
+ self.assertSubstring("voltronPT 1.2.3.4:443 " + self.fingerprint,
+ bridgeLine)
+ # These ones can be in any order, but they should be at the end of the
+ # bridge line:
+ self.assertSubstring("password=unicorns", bridgeLine)
+ self.assertSubstring("sharedsecret=foobar", bridgeLine)
+
+ def test_PluggableTransport_getTransportLine_ptargs_space_delimited(self):
+ """The PT arguments in a bridge line should be space-separated."""
+ pt = bridges.PluggableTransport(self.fingerprint,
+ "voltronPT", "1.2.3.4", 443,
+ {'sharedsecret': 'foobar',
+ 'password': 'unicorns'})
+ bridgeLine = pt.getTransportLine()
+ self.assertTrue(
+ ("password=unicorns sharedsecret=foobar" in bridgeLine) or
+ ("sharedsecret=foobar password=unicorns" in bridgeLine))
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits