commit 60c0e8a7cac1273b8d5422f591bc1c84882fbeec Merge: 6a1a935 3827008 Author: Isis Lovecruft isis@torproject.org Date: Fri Mar 27 00:01:03 2015 +0000
Merge branch 'fix/13202-missing-pt-args' into develop
Conflicts: lib/bridgedb/test/test_bridges.py
lib/bridgedb/bridges.py | 52 ++++++++++++++---- lib/bridgedb/test/test_bridges.py | 107 +++++++++++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+), 9 deletions(-)
diff --cc lib/bridgedb/test/test_bridges.py index 1755e6f,e9e0526..5a79d5e --- a/lib/bridgedb/test/test_bridges.py +++ b/lib/bridgedb/test/test_bridges.py @@@ -1473,39 -1411,54 +1528,91 @@@ class BridgeTests(unittest.TestCase) self.assertTrue(self.bridge.addressIsBlockedIn('GB', '179.178.155.140', 36493)) self.assertFalse(self.bridge.addressIsBlockedIn('gb', '179.178.155.140', 36488))
+ def test_Bridge_updateFromExtraInfoDescriptor_changed_no_verify(self): + """A changed extrainfo descriptor should log that a transport's + IP and/or port changed. + """ + self.bridge.updateFromNetworkStatus(self.networkstatus) + self.bridge.updateFromServerDescriptor(self.serverdescriptor) + self.bridge.updateFromExtraInfoDescriptor(self.extrainfo) + + changedExtrainfo = BRIDGE_EXTRAINFO + changedExtrainfo.replace('transport obfs3 179.178.155.140:36490', + 'transport obfs3 179.178.155.14:3649') + self._writeExtrainfo(changedExtrainfo) + + self.bridge.updateFromExtraInfoDescriptor(self.extrainfo, verify=False) + + def test_Bridge_updateFromExtraInfoDescriptor_changed_verify(self): + """A changed extrainfo descriptor with verify=True should raise an + InvalidExtraInfoSignature exception. + """ + self.bridge.updateFromNetworkStatus(self.networkstatus) + self.bridge.updateFromServerDescriptor(self.serverdescriptor) + self.bridge.updateFromExtraInfoDescriptor(self.extrainfo) + self.bridge.updateFromExtraInfoDescriptor(self.extrainfoNew) + + # We should have hit the return just after the + # `except InvalidExtraInfoSignature` line, and so the + # bridge.descriptors['extrainfo'] shouldn't have been updated. + # Therefore, the one we stored should be older, that is, we shouldn't + # have kept the new one. + self.assertLess(self.bridge.descriptors['extrainfo'].published, + self.extrainfoNew.published) + # And the one we stored should be the older one, with the same + # published timestamp: + self.assertEqual(self.bridge.descriptors['extrainfo'], self.extrainfo) + self.assertEqual(self.bridge.descriptors['extrainfo'].published, + self.extrainfo.published) ++ + def test_Bridge_updateFromExtraInfoDescriptor_obfs4_no_iatmode(self): + """An extrainfo descriptor with an obfs4 transport missing the + `iat-mode=[…]` argument should not add the obfs4 transport. + """ + self.bridge.updateFromNetworkStatus(self.networkstatus) + self.bridge.updateFromServerDescriptor(self.serverdescriptor) + + obfs4 = self.extrainfo.transport['obfs4'] + obfs4 = (u'1.1.1.1', 1111, obfs4[-1][-1].replace('iat-mode=0,', '')) + + self.extrainfo.transport['obfs4'] = obfs4 + self.bridge.updateFromExtraInfoDescriptor(self.extrainfo) + + self.assertTrue(len(self.bridge.transports), 3) + self.assertNotIn('obfs4', + [pt.methodname for pt in self.bridge.transports]) + + def test_Bridge_updateFromExtraInfoDescriptor_scramblesuit_no_password(self): + """An extrainfo descriptor with `transport scramblesuit 1.1.1.1:1111` + (i.e. missing the `password=[…]` argument) should not add the + scramblesuit transport. + """ + self.bridge.updateFromNetworkStatus(self.networkstatus) + self.bridge.updateFromServerDescriptor(self.serverdescriptor) + + self.extrainfo.transport['scramblesuit'] = (u'1.1.1.1', 1111, []) + self.bridge.updateFromExtraInfoDescriptor(self.extrainfo) + + self.assertTrue(len(self.bridge.transports), 3) + self.assertNotIn('scramblesuit', + [pt.methodname for pt in self.bridge.transports]) + + def test_Bridge_updateFromExtraInfoDescriptor_changed_scramblesuit_no_password(self): + """An extrainfo descriptor whose scramblesuit transport was previously + valid and is now missing the `password=[…]` argument should be removed + from the Bridge.transports list. + """ + self.bridge.updateFromNetworkStatus(self.networkstatus) + self.bridge.updateFromServerDescriptor(self.serverdescriptor) + self.bridge.updateFromExtraInfoDescriptor(self.extrainfo) + + self.assertTrue(len(self.bridge.transports), 4) + self.assertIn('scramblesuit', + [pt.methodname for pt in self.bridge.transports]) + + self.extrainfo.transport['scramblesuit'] = (u'1.1.1.1', 1111, []) + self.bridge.updateFromExtraInfoDescriptor(self.extrainfo) + + self.assertTrue(len(self.bridge.transports), 3) + self.assertNotIn('scramblesuit', + [pt.methodname for pt in self.bridge.transports])
tor-commits@lists.torproject.org