[tor-commits] [bridgedb/develop] Add obfs4 bridge line unittests and regression tests for #12932.

isis at torproject.org isis at torproject.org
Sat Sep 20 23:47:50 UTC 2014


commit 6f29393d48612f1a5fee97d889971fefa671b877
Author: Isis Lovecruft <isis at torproject.org>
Date:   Sat Sep 6 02:59:24 2014 +0000

    Add obfs4 bridge line unittests and regression tests for #12932.
---
 lib/bridgedb/test/test_https.py |  133 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 133 insertions(+)

diff --git a/lib/bridgedb/test/test_https.py b/lib/bridgedb/test/test_https.py
index bb783fb..2262db3 100644
--- a/lib/bridgedb/test/test_https.py
+++ b/lib/bridgedb/test/test_https.py
@@ -218,3 +218,136 @@ class HTTPTests(unittest.TestCase):
             self.assertEquals(PT, pt)
             self.assertTrue(password.find("password=") != -1,
                             "Password field missing expected text")
+
+    def test_get_obfs4_ipv4(self):
+        """Try asking for obfs4 bridges, and check that the PT arguments in the
+        returned bridge lines were space-separated.
+
+        This is a regression test for #12932, see
+        https://bugs.torproject.org/12932.
+        """
+        if os.environ.get("CI"):
+            if not self.pid or not processExists(self.pid):
+                raise FailTest("Could not start BridgeDB process on CI server!")
+        if not self.pid or not processExists(self.pid):
+            raise SkipTest("Can't run test: no BridgeDB process running.")
+
+        self.openBrowser()
+        self.goToOptionsPage()
+
+        PT = 'obfs4'
+
+        try:
+            soup = self.submitOptions(transport=PT, ipv6=False,
+                                      captchaResponse=CAPTCHA_RESPONSE)
+        except ValueError as error:
+            if 'non-disabled' in str(error):
+                raise SkipTest("Pluggable Transport obfs4 is currently disabled.")
+
+        bridges = self.getBridgeLinesFromSoup(soup, fieldsPerBridge=6)
+        for bridge in bridges:
+            pt = bridge[0]
+            ptArgs = bridge[-3:]
+            self.assertEquals(PT, pt)
+            self.assertTrue(len(ptArgs) == 3,
+                            ("Expected obfs4 bridge line to have 3 PT args, "
+                             "found %d instead: %s") % (len(ptArgs), ptArgs))
+
+    def test_get_obfs4_ipv4_iatmode(self):
+        """Ask for obfs4 bridges and check that there is an 'iat-mode' PT
+        argument in the bridge lines.
+        """
+        if os.environ.get("CI"):
+            if not self.pid or not processExists(self.pid):
+                raise FailTest("Could not start BridgeDB process on CI server!")
+        if not self.pid or not processExists(self.pid):
+            raise SkipTest("Can't run test: no BridgeDB process running.")
+
+        self.openBrowser()
+        self.goToOptionsPage()
+
+        PT = 'obfs4'
+
+        try:
+            soup = self.submitOptions(transport=PT, ipv6=False,
+                                      captchaResponse=CAPTCHA_RESPONSE)
+        except ValueError as error:
+            if 'non-disabled' in str(error):
+                raise SkipTest("Pluggable Transport obfs4 is currently disabled.")
+
+        bridges = self.getBridgeLinesFromSoup(soup, fieldsPerBridge=6)
+        for bridge in bridges:
+            ptArgs = bridge[-3:]
+            hasIATMode = False
+            for arg in ptArgs:
+                if 'iat-mode' in arg:
+                    hasIATMode = True
+
+            self.assertTrue(hasIATMode,
+                            "obfs4 bridge line is missing 'iat-mode' PT arg.")
+
+    def test_get_obfs4_ipv4_publickey(self):
+        """Ask for obfs4 bridges and check that there is an 'public-key' PT
+        argument in the bridge lines.
+        """
+        if os.environ.get("CI"):
+            if not self.pid or not processExists(self.pid):
+                raise FailTest("Could not start BridgeDB process on CI server!")
+        if not self.pid or not processExists(self.pid):
+            raise SkipTest("Can't run test: no BridgeDB process running.")
+
+        self.openBrowser()
+        self.goToOptionsPage()
+
+        PT = 'obfs4'
+
+        try:
+            soup = self.submitOptions(transport=PT, ipv6=False,
+                                      captchaResponse=CAPTCHA_RESPONSE)
+        except ValueError as error:
+            if 'non-disabled' in str(error):
+                raise SkipTest("Pluggable Transport obfs4 is currently disabled.")
+
+        bridges = self.getBridgeLinesFromSoup(soup, fieldsPerBridge=6)
+        for bridge in bridges:
+            ptArgs = bridge[-3:]
+            hasPublicKey = False
+            for arg in ptArgs:
+                if 'public-key' in arg:
+                    hasPublicKey = True
+
+            self.assertTrue(hasPublicKey,
+                            "obfs4 bridge line is missing 'public-key' PT arg.")
+
+    def test_get_obfs4_ipv4_nodeid(self):
+        """Ask for obfs4 bridges and check that there is an 'node-id' PT
+        argument in the bridge lines.
+        """
+        if os.environ.get("CI"):
+            if not self.pid or not processExists(self.pid):
+                raise FailTest("Could not start BridgeDB process on CI server!")
+        if not self.pid or not processExists(self.pid):
+            raise SkipTest("Can't run test: no BridgeDB process running.")
+
+        self.openBrowser()
+        self.goToOptionsPage()
+
+        PT = 'obfs4'
+
+        try:
+            soup = self.submitOptions(transport=PT, ipv6=False,
+                                      captchaResponse=CAPTCHA_RESPONSE)
+        except ValueError as error:
+            if 'non-disabled' in str(error):
+                raise SkipTest("Pluggable Transport obfs4 is currently disabled.")
+
+        bridges = self.getBridgeLinesFromSoup(soup, fieldsPerBridge=6)
+        for bridge in bridges:
+            ptArgs = bridge[-3:]
+            hasNodeID = False
+            for arg in ptArgs:
+                if 'node-id' in arg:
+                    hasNodeID = True
+
+            self.assertTrue(hasNodeID,
+                            "obfs4 bridge line is missing 'node-id' PT arg.")





More information about the tor-commits mailing list