def generateFilters(self): """Build the list of callables, ``filters``, according to the current contents of the lists of ``transports``, ``notBlockedIn``, and the ``ipVersion``. """ self.clearFilters() pt = self.justOnePTType() msg = ("Adding a filter to %s for %s for IPv%d" % (self.__class__.__name__, self.client, self.ipVersion)) # If this bridge runs any active probing-resistant PTs, we should # *only* hand out its active probing-resistant PTs. Otherwise, a # non-resistant PT would get this bridge scanned and blocked: # <https://bugs.torproject.org/28655> self.addFilter(byProbingResistance(pt, self.ipVersion)) if self.notBlockedIn: for country in self.notBlockedIn: logging.info("%s %s bridges not blocked in %s..." % (msg, pt or "vanilla", country)) self.addFilter( byNotBlockedIn(country, pt or "vanilla", self.ipVersion)) elif pt: logging.info("%s %s bridges..." % (msg, pt)) self.addFilter(byTransport(pt, self.ipVersion)) else: logging.info("%s bridges..." % msg) self.addFilter(byIPv(self.ipVersion))
def test_byTransport_with_transport_ipv6(self): """A bridge with an IPv6 voltron transport should cause byTransport('voltron', ipVersion=6) to return True. """ self.addIPv6VoltronPT() filtre = filters.byTransport('voltron', ipVersion=6) self.assertTrue(filtre(self.bridge))
def test_byTransport_wrong_transport(self): """A bridge with only a Voltron transport should cause byTransport('obfs3') to return False. """ self.addIPv4VoltronPT() filtre = filters.byTransport('obfs3') self.assertFalse(filtre(self.bridge))
def test_byTransport_wrong_transport(self): """A bridge with only a Voltron transport should cause byTransport('obfs3') to return False. """ self.addIPv4VoltronPT() filtre = filters.byTransport('obfs3') self.assertFalse(filtre(self.bridge))
def test_byTransport_vanilla_ipv6(self): """byTranspfort(ipVersion=6) without namimg a transport to filter by should just return the bridge's IPv4 address. """ self.bridge.orAddresses = [(ipaddr.IPv6Address('2006:3333::3333'), 3333, 6)] filtre = filters.byTransport(ipVersion=6) self.assertTrue(filtre(self.bridge))
def test_byTransport_with_transport_ipv6_filtering_by_ipv4(self): """A bridge with an IPv6 voltron transport should cause byTransport('voltron') to return True. """ self.addIPv6VoltronPT() filtre = filters.byTransport('voltron') self.assertFalse(filtre(self.bridge))
def test_byTransport_with_transport_ipv6(self): """A bridge with an IPv6 voltron transport should cause byTransport('voltron', ipVersion=6) to return True. """ self.addIPv6VoltronPT() filtre = filters.byTransport('voltron', ipVersion=6) self.assertTrue(filtre(self.bridge))
def test_byTransport_with_transport_ipv6_filtering_by_ipv4(self): """A bridge with an IPv6 voltron transport should cause byTransport('voltron') to return True. """ self.addIPv6VoltronPT() filtre = filters.byTransport('voltron') self.assertFalse(filtre(self.bridge))
def test_byTransport_vanilla_ipv6(self): """byTranspfort(ipVersion=6) without namimg a transport to filter by should just return the bridge's IPv4 address. """ self.bridge.orAddresses = [(ipaddr.IPv6Address('2006:3333::3333'), 3333, 6)] filtre = filters.byTransport(ipVersion=6) self.assertTrue(filtre(self.bridge))
def test_byFilters_bySubring_byTransport_wrong_subhashring_no_transport(self): """Filtering byTransport('voltron') and bySubring(HMAC, 2, 2) when the Bridge has no transports and is assigned to sub-hashring 1-of-2 should return False. """ filtre = filters.byFilters([filters.bySubring(self.hmac, 2, 2), filters.byTransport('voltron')]) self.assertFalse(filtre(self.bridge))
def test_byFilters_bySubring_byTransport_correct_subhashring_with_transport(self): """Filtering byTransport('voltron') and bySubring(HMAC, 1, 2) when the Bridge has a voltron transport and is assigned to sub-hashring 1-of-2 should return True. """ self.addIPv4VoltronPT() filtre = filters.byFilters([filters.bySubring(self.hmac, 1, 2), filters.byTransport('voltron')]) self.assertTrue(filtre(self.bridge))
def test_byFilters_bySubring_byTransport_correct_subhashring_no_transport( self): """Filtering byTransport('voltron') and bySubring(HMAC, 1, 2) when the Bridge has no transports and is assigned to sub-hashring 1-of-2 should return False. """ filtre = filters.byFilters([ filters.bySubring(self.hmac, 1, 2), filters.byTransport('voltron') ]) self.assertFalse(filtre(self.bridge))
def test_byFilters_bySubring_byTransport_wrong_subhashring_with_transport( self): """Filtering byTransport('voltron') and bySubring(HMAC, 2, 2) when the Bridge has a voltron transport and is assigned to sub-hashring 1-of-2 should return False. """ self.addIPv4VoltronPT() filtre = filters.byFilters([ filters.bySubring(self.hmac, 2, 2), filters.byTransport('voltron') ]) self.assertFalse(filtre(self.bridge))
def generateFilters(self): """Build the list of callables, ``filters``, according to the current contents of the lists of ``transports``, ``notBlockedIn``, and the ``ipVersion``. """ self.clearFilters() pt = self.justOnePTType() msg = ("Adding a filter to %s for %s for IPv%d" % (self.__class__.__name__, self.client, self.ipVersion)) if self.notBlockedIn: for country in self.notBlockedIn: logging.info("%s %s bridges not blocked in %s..." % (msg, pt or "vanilla", country)) self.addFilter(byNotBlockedIn(country, pt, self.ipVersion)) elif pt: logging.info("%s %s bridges..." % (msg, pt)) self.addFilter(byTransport(pt, self.ipVersion)) else: logging.info("%s bridges..." % msg) self.addFilter(byIPv(self.ipVersion))
def test_byTransport_no_transports(self): """A bridge without any transports should cause byTransport('voltron') to return False. """ filtre = filters.byTransport('voltron') self.assertFalse(filtre(self.bridge))
def test_byTransport_vanilla_ipv4(self): """byTransport() without namimg a transport to filter by should just return the bridge's IPv4 address. """ filtre = filters.byTransport() self.assertTrue(filtre(self.bridge))
def test_byTransport_vanilla_ipv4(self): """byTransport() without namimg a transport to filter by should just return the bridge's IPv4 address. """ filtre = filters.byTransport() self.assertTrue(filtre(self.bridge))
def test_byTransport_no_transports(self): """A bridge without any transports should cause byTransport('voltron') to return False. """ filtre = filters.byTransport('voltron') self.assertFalse(filtre(self.bridge))