Пример #1
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
Пример #2
0
def fakeBridge6(orport=8080,
                running=True,
                stable=True,
                or_addresses=False,
                transports=False):
    nn = "bridge-%s" % random.randrange(0, 1000000)
    ip = ipaddr.IPAddress(randomIPv6())
    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 = randomIPv6()
            portlist = addr.PortList(randomPortSpec())
            if addr.isValidIP(address):
                address = bracketIPv6(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

            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
Пример #3
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
Пример #4
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
Пример #5
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))
Пример #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))