[tor-commits] [bridgedb/master] Filter out <br /> tags in mechanize tests in test_https.py.
isis at torproject.org
isis at torproject.org
Sat Mar 21 02:03:01 UTC 2015
commit 8c6f0bdd023753540400533d40f8de84b6122caf
Author: Isis Lovecruft <isis at torproject.org>
Date: Wed Feb 18 20:53:30 2015 +0000
Filter out <br /> tags in mechanize tests in test_https.py.
These tests were intermittently failing (again) do the the
``split('<br></br>')`` call. This was due to the template engine, Mako,
sometimes deciding to use ``<br></br>`` and other times only ``<br />``.
Additionally, BridgeDB (somewhat) dynamically determines the number of
bridges to give out to a client based on the number of bridges in the
pool, ergo with different HTTPS_SHARE:EMAIL_SHARE:RESERVED_SHARE
proportions and a low number of descriptors (as is the case in
BridgeDB's CI setup) the number of bridges in a response may
occaisionally wobble between 1 and *_N_BRIDGES_PER_ANSWER (in increments
of 1, i.e. it might give 1 or 2 bridges, or 3 or 4, but not 2 or 4).
Usually, for the CI server case, it was usually 1 bridge because of the
low number of mocked descriptors, but occaisionally it was 2. This thus
sometimes (when the number of bridges in the response was randomly 2)
caused the ``split('<br></br>')`` call to sometimes (when Mako decides
to randomly shorten ``<br></br>`` into ``<br />``) smash together the
fingerprint of the first bridge line with the address or PT methodname
of the second bridge line, which then of course caused the tests to fail
(because the number of expected elements/words in the bridge lines has
hardcoded test assertions for each type of bridge line).
Hooray non-determinism.
---
lib/bridgedb/test/test_https.py | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/lib/bridgedb/test/test_https.py b/lib/bridgedb/test/test_https.py
index 86b1f84..fe9e4e3 100644
--- a/lib/bridgedb/test/test_https.py
+++ b/lib/bridgedb/test/test_https.py
@@ -132,10 +132,13 @@ class HTTPTests(unittest.TestCase):
self.assertTrue(soup, "Could not find <div class='bridge-lines'>!")
for portion in soup:
- bridge_lines = portion.text.strip().split('<br></br>')
+ br_tags = portion.findChildren('br')
+ bridge_lines = set(portion.contents).difference(set(br_tags))
for bridge_line in bridge_lines:
- fields = bridge_line.split()
- bridges.append(fields)
+ bridge_line = bridge_line.strip()
+ if bridge_line:
+ fields = bridge_line.split()
+ bridges.append(fields)
self.assertTrue(len(bridges) > 0, "Found no bridge lines in %s" % soup)
More information about the tor-commits
mailing list