示例#1
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
示例#2
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
示例#3
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
示例#4
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
示例#5
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
示例#6
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))
示例#7
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))
示例#8
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
示例#9
0
    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
示例#10
0
    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