def testDistWithFilterBlockedCountries(self): d = bridgedb.Dist.IPBasedDistributor(self.dumbAreaMapper, 3, "Foo") for _ in xrange(250): d.insert(fakeBridge6(or_addresses=True)) d.insert(fakeBridge(or_addresses=True)) for b in d.splitter.bridges: # china blocks all :-( for pt in b.transports: key = "%s:%s" % (pt.address, pt.port) b.blockingCountries[key] = set(['cn']) for address, portlist in b.or_addresses.items(): for port in portlist: key = "%s:%s" % (address, port) b.blockingCountries[key] = set(['cn']) key = "%s:%s" % (b.ip, b.orport) b.blockingCountries[key] = set(['cn']) for i in xrange(5): b = d.getBridgesForIP(randomIPv4String(), "x", 1, bridgeFilterRules=[ filterBridgesByNotBlockedIn("cn")]) assert len(b) == 0 b = d.getBridgesForIP(randomIPv4String(), "x", 1, bridgeFilterRules=[ filterBridgesByNotBlockedIn("us")]) assert len(b) > 0
def testDistWithFilterBlockedCountries(self): d = bridgedb.Dist.IPBasedDistributor(self.dumbAreaMapper, 3, "Foo") for _ in xrange(250): d.insert(fakeBridge6(or_addresses=True)) d.insert(fakeBridge(or_addresses=True)) for b in d.splitter.bridges: # china blocks all :-( for pt in b.transports: key = "%s:%s" % (pt.address, pt.port) b.blockingCountries[key] = set(['cn']) for address, portlist in b.or_addresses.items(): for port in portlist: key = "%s:%s" % (address, port) b.blockingCountries[key] = set(['cn']) key = "%s:%s" % (b.ip, b.orport) b.blockingCountries[key] = set(['cn']) for i in xrange(5): b = d.getBridgesForIP( randomIPv4String(), "x", 1, bridgeFilterRules=[filterBridgesByNotBlockedIn("cn")]) assert len(b) == 0 b = d.getBridgesForIP( randomIPv4String(), "x", 1, bridgeFilterRules=[filterBridgesByNotBlockedIn("us")]) assert len(b) > 0
def fakeBridge(orport=8080, running=True, stable=True, or_addresses=False, transports=False): nn = "bridge-%s"%random.randrange(0,1000000) ip = ipaddr.IPAddress(randomIPv4()) fp = "".join([random.choice("0123456789ABCDEF") for _ in xrange(40)]) b = bridgedb.Bridges.Bridge(nn,ip,orport,fingerprint=fp) b.setStatus(running, stable) oraddrs = [] if or_addresses: for i in xrange(8): # Only add or_addresses if they are valid. Otherwise, the test # will randomly fail if an invalid address is chosen: address = randomIPv4String() portlist = addr.PortList(randomPortSpec()) if addr.isValidIP(address): oraddrs.append((address, portlist,)) for address, portlist in oraddrs: networkstatus.parseALine("{0}:{1}".format(address, portlist)) try: portlist.add(b.or_addresses[address]) except KeyError: pass finally: b.or_addresses[address] = portlist if transports: for i in xrange(0,8): b.transports.append(bridgedb.Bridges.PluggableTransport(b, random.choice(["obfs", "obfs2", "pt1"]), randomIP(), randomPort())) return b
def testDistWithFilterAll(self): d = bridgedb.Dist.IPBasedDistributor(self.dumbAreaMapper, 3, "Foo") for _ in xrange(250): d.insert(fakeBridge6(or_addresses=True)) d.insert(fakeBridge(or_addresses=True)) for i in xrange(5): b = d.getBridgesForIP(randomIPv4String(), "x", 1, bridgeFilterRules=[ filterBridgesByIP4, filterBridgesByIP6]) assert len(b) == 0
def testDistWithFilterAll(self): d = bridgedb.Dist.IPBasedDistributor(self.dumbAreaMapper, 3, "Foo") for _ in xrange(250): d.insert(fakeBridge6(or_addresses=True)) d.insert(fakeBridge(or_addresses=True)) for i in xrange(5): b = d.getBridgesForIP( randomIPv4String(), "x", 1, bridgeFilterRules=[filterBridgesByIP4, filterBridgesByIP6]) assert len(b) == 0
def testDistWithFilterIP4(self): d = bridgedb.Dist.IPBasedDistributor(self.dumbAreaMapper, 3, "Foo") for _ in xrange(250): d.insert(fakeBridge6(or_addresses=True)) d.insert(fakeBridge(or_addresses=True)) for i in xrange(500): bridges = d.getBridgesForIP(randomIPv4String(), "faketimestamp", bridgeFilterRules=[filterBridgesByIP4]) bridge = random.choice(bridges) bridge_line = bridge.getConfigLine(addressClass=ipaddr.IPv4Address) address, portlist = networkstatus.parseALine(bridge_line) assert type(ipaddr.IPAddress(address)) is ipaddr.IPv4Address assert filterBridgesByIP4(random.choice(bridges))
def fakeBridge(orport=8080, running=True, stable=True, or_addresses=False, transports=False): nn = "bridge-%s" % random.randrange(0, 1000000) ip = ipaddr.IPAddress(randomIPv4()) fp = "".join([random.choice("0123456789ABCDEF") for _ in xrange(40)]) b = bridgedb.Bridges.Bridge(nn, ip, orport, fingerprint=fp) b.setStatus(running, stable) oraddrs = [] if or_addresses: for i in xrange(8): # Only add or_addresses if they are valid. Otherwise, the test # will randomly fail if an invalid address is chosen: address = randomIPv4String() portlist = addr.PortList(randomPortSpec()) if addr.isValidIP(address): oraddrs.append(( address, portlist, )) for address, portlist in oraddrs: networkstatus.parseALine("{0}:{1}".format(address, portlist)) try: portlist.add(b.or_addresses[address]) except KeyError: pass finally: b.or_addresses[address] = portlist if transports: for i in xrange(0, 8): b.transports.append( bridgedb.Bridges.PluggableTransport( b, random.choice(["obfs", "obfs2", "pt1"]), randomIP(), randomPort())) return b
def testDistWithFilterBoth(self): d = bridgedb.Dist.IPBasedDistributor(self.dumbAreaMapper, 3, "Foo") for _ in xrange(250): d.insert(fakeBridge6(or_addresses=True)) d.insert(fakeBridge(or_addresses=True)) for i in xrange(50): bridges = d.getBridgesForIP( randomIPv4String(), "faketimestamp", 1, bridgeFilterRules=[filterBridgesByIP4, filterBridgesByIP6]) if bridges: t = bridges.pop() assert filterBridgesByIP4(t) assert filterBridgesByIP6(t) address, portlist = networkstatus.parseALine( t.getConfigLine(addressClass=ipaddr.IPv4Address)) assert type(address) is ipaddr.IPv4Address address, portlist = networkstatus.parseALine( t.getConfigLine(addressClass=ipaddr.IPv6Address)) assert type(address) is ipaddr.IPv6Address
def testDistWithFilterBoth(self): d = bridgedb.Dist.IPBasedDistributor(self.dumbAreaMapper, 3, "Foo") for _ in xrange(250): d.insert(fakeBridge6(or_addresses=True)) d.insert(fakeBridge(or_addresses=True)) for i in xrange(50): bridges = d.getBridgesForIP(randomIPv4String(), "faketimestamp", 1, bridgeFilterRules=[ filterBridgesByIP4, filterBridgesByIP6]) if bridges: t = bridges.pop() assert filterBridgesByIP4(t) assert filterBridgesByIP6(t) address, portlist = networkstatus.parseALine( t.getConfigLine(addressClass=ipaddr.IPv4Address)) assert type(address) is ipaddr.IPv4Address address, portlist = networkstatus.parseALine( t.getConfigLine(addressClass=ipaddr.IPv6Address)) assert type(address) is ipaddr.IPv6Address