Ejemplo n.º 1
0
    def _router_begin(self, data):
        args = data.split()
        self._router = Router(self.protocol)
        self._router.from_consensus = True
        self._router.update(
            args[1],  # nickname
            args[2],  # idhash
            args[3],  # orhash
            datetime.datetime.strptime(args[4] + args[5], '%Y-%m-%f%H:%M:%S'),
            args[6],  # ip address
            args[7],  # ORPort
            args[8])  # DirPort

        if self._router.id_hex in self.routers:
            ## FIXME should I do an update() on this one??
            self._router = self.routers[self._router.id_hex]
            return

        if self._router.name in self.routers_by_name:
            self.routers_by_name[self._router.name].append(self._router)

        else:
            self.routers_by_name[self._router.name] = [self._router]

        if self._router.name in self.routers:
            self.routers[self._router.name] = None

        else:
            self.routers[self._router.name] = self._router
        self.routers[self._router.id_hex] = self._router
Ejemplo n.º 2
0
 def test_policy_not_set_error(self):
     router = Router(object())
     try:
         router.accepts_port(123)
         self.fail()
     except Exception as e:
         self.assertTrue("policy" in str(e))
Ejemplo n.º 3
0
 def test_repr(self):
     router = Router(FakeController())
     router.update("foo", "AHhuQ8zFQJdT8l42Axxc6m6kNwI",
                   "MAANkj30tnFvmoh7FsjVFr+cmcs", "2011-12-16 15:11:34",
                   "1.2.3.4", "24051", "24052")
     router.flags = ['Named']
     repr(router)
Ejemplo n.º 4
0
    def _router_begin(self, data):
        args = data.split()
        self._router = Router(self.protocol)
        self._router.from_consensus = True
        self._router.update(
            args[1],  # nickname
            args[2],  # idhash
            args[3],  # orhash
            args[4] + ' ' + args[5],  # modified (like '%Y-%m-%f %H:%M:%S')
            args[6],  # ip address
            args[7],  # ORPort
            args[8],  # DirPort
        )

        if self._router.id_hex in self.routers:
            # FIXME should I do an update() on this one??
            self._router = self.routers[self._router.id_hex]

        if self._router.name in self.routers_by_name:
            self.routers_by_name[self._router.name].append(self._router)

        else:
            self.routers_by_name[self._router.name] = [self._router]

        if self._router.name in self.routers:
            self.routers[self._router.name] = None

        else:
            self.routers[self._router.name] = self._router
        self.routers[self._router.id_hex] = self._router
        self.routers_by_hash[self._router.id_hex] = self._router
        self.all_routers.add(self._router)
Ejemplo n.º 5
0
 def test_policy_error(self):
     router = Router(object())
     try:
         router.policy = 'foo 123'
         self.fail()
     except Exception as e:
         self.assertTrue("Don't understand" in str(e))
Ejemplo n.º 6
0
 def test_flags_from_string(self):
     controller = object()
     router = Router(controller)
     router.update("foo", "AHhuQ8zFQJdT8l42Axxc6m6kNwI",
                   "MAANkj30tnFvmoh7FsjVFr+cmcs", "2011-12-16 15:11:34",
                   "77.183.225.114", "24051", "24052")
     router.flags = "Exit Fast Named Running V2Dir Valid"
     self.assertEqual(router.name_is_unique, True)
Ejemplo n.º 7
0
 def test_ctor(self):
     controller = object()
     router = Router(controller)
     router.update("foo", "AHhuQ8zFQJdT8l42Axxc6m6kNwI",
                   "MAANkj30tnFvmoh7FsjVFr+cmcs", "2011-12-16 15:11:34",
                   "77.183.225.114", "24051", "24052")
     self.assertEqual(router.id_hex,
                      "$00786E43CCC5409753F25E36031C5CEA6EA43702")
     self.assertEqual(router.policy, '')
Ejemplo n.º 8
0
 def setUp(self):
     self.router = Router(FakeController())
     self.router.update(
         "foo",
         "AHhuQ8zFQJdT8l42Axxc6m6kNwI",
         "MAANkj30tnFvmoh7FsjVFr+cmcs",
         "2011-12-16 15:11:34",
         "1.2.3.4",
         "24051", "24052"
     )
Ejemplo n.º 9
0
    def test_get_location_unknown(self):
        class CountryCodeController(object):
            def get_info_raw(self, i):
                raise RuntimeError("shouldn't happen")

        controller = CountryCodeController()

        r = Router(controller)
        loc = yield r.get_location()

        self.assertEqual(loc.countrycode, None)
Ejemplo n.º 10
0
 def test_policy_accept(self):
     controller = object()
     router = Router(controller)
     router.update("foo", "AHhuQ8zFQJdT8l42Axxc6m6kNwI",
                   "MAANkj30tnFvmoh7FsjVFr+cmcs", "2011-12-16 15:11:34",
                   "77.183.225.114", "24051", "24052")
     router.policy = "accept 25,128-256".split()
     self.assertTrue(router.accepts_port(25))
     for x in range(128, 256):
         self.assertTrue(router.accepts_port(x))
     self.assertTrue(not router.accepts_port(26))
     self.assertEqual(router.policy, 'accept 25,128-256')
Ejemplo n.º 11
0
    def test_get_location_something(self):
        class CountryCodeController(object):
            def get_info_raw(self, i):
                return defer.succeed('250-ip-to-country/8.8.8.8=US\r\n250 OK')

        controller = CountryCodeController()
        r = Router(controller)
        r.update('routername', 'deadbeef', 'orhash', 'modified', '8.8.8.8', '',
                 '')
        loc = yield r.get_location()

        self.assertNotEqual(loc.countrycode, None)
Ejemplo n.º 12
0
    def test_countrycode(self):
        class CountryCodeController(object):
            def get_info_raw(self, i):
                return defer.succeed(
                    '250-ip-to-country/127.1.2.3=ZZ\r\n250 OK')

        controller = CountryCodeController()
        router = Router(controller)
        router.update("foo", "AHhuQ8zFQJdT8l42Axxc6m6kNwI",
                      "MAANkj30tnFvmoh7FsjVFr+cmcs", "2011-12-16 15:11:34",
                      "127.1.2.3", "24051", "24052")

        self.assertEqual(router.location.countrycode, 'ZZ')
Ejemplo n.º 13
0
    def test_policy_reject(self):
        controller = object()
        router = Router(controller)
        router.update("foo", "AHhuQ8zFQJdT8l42Axxc6m6kNwI",
                      "MAANkj30tnFvmoh7FsjVFr+cmcs", "2011-12-16 15:11:34",
                      "77.183.225.114", "24051", "24052")
        router.policy = "reject 500-600,655,7766".split()
        for x in range(1, 500):
            self.assertTrue(router.accepts_port(x))
        for x in range(500, 601):
            self.assertTrue(not router.accepts_port(x))

        self.assertEqual(router.policy, 'reject 500-600,655,7766')
Ejemplo n.º 14
0
    def test_ctor(self):
        controller = object()
        router = Router(controller)
        router.update("foo", "AHhuQ8zFQJdT8l42Axxc6m6kNwI",
                      "MAANkj30tnFvmoh7FsjVFr+cmcs", "2011-12-16 15:11:34",
                      "77.183.225.114", "24051", "24052")
        self.assertEqual(router.id_hex,
                         "$00786E43CCC5409753F25E36031C5CEA6EA43702")

        # we assert this twice to cover the cached + uncached cases
        self.assertTrue(isinstance(router.modified, datetime))
        self.assertTrue(isinstance(router.modified, datetime))
        self.assertEqual(router.policy, '')
Ejemplo n.º 15
0
    def test_get_location_private(self):
        class CountryCodeController(object):
            def get_info_raw(self, i):
                return defer.succeed(
                    '250-ip-to-country/192.168.0.1=ZZ\r\n250 OK')

        controller = CountryCodeController()
        r = Router(controller)
        r.update('routername', 'deadbeef', 'orhash', 'modified', '192.168.0.1',
                 '', '')
        loc0 = yield r.get_location()
        loc1 = yield r.get_location()

        self.assertEqual(loc0.countrycode, 'ZZ')
        self.assertEqual(loc1.countrycode, 'ZZ')
Ejemplo n.º 16
0
    def _create_router(self, **kw):
        id_hex = hexIdFromHash(kw['idhash'])
        try:
            router = self.routers[id_hex]
        except KeyError:
            router = Router(self.protocol)
            self.routers[router.id_hex] = router
        router.from_consensus = True
        router.update(
            kw['nickname'],
            kw['idhash'],
            kw['orhash'],
            kw['modified'],
            kw['ip'],
            kw['orport'],
            kw['dirport'],
        )
        router.flags = kw.get('flags', [])
        if 'bandwidth' in kw:
            router.bandwidth = kw['bandwidth']
        if 'ip_v6' in kw:
            router.ip_v6.extend(kw['ip_v6'])

        if 'guard' in router.flags:
            self.guards[router.id_hex] = router
        if 'authority' in router.flags:
            self.authorities[router.name] = router

        if router.id_hex in self.routers:
            # FIXME should I do an update() on this one??
            router = self.routers[router.id_hex]
        else:
            if router.name in self.routers:
                self.routers[router.name] = None

            else:
                self.routers[router.name] = router

        if router.name in self.routers_by_name:
            self.routers_by_name[router.name].append(router)

        else:
            self.routers_by_name[router.name] = [router]

        self.routers[router.id_hex] = router
        self.routers_by_hash[router.id_hex] = router
        self.all_routers.add(router)
Ejemplo n.º 17
0
    def router_from_id(self, routerid):
        """IRouterContainer API"""

        try:
            return self.routers[routerid]

        except KeyError:
            router = Router(self.protocol)
            if routerid[0] != '$':
                raise  # just re-raise the KeyError

            idhash = routerid[1:41]
            nick = ''
            is_named = False
            if len(routerid) > 41:
                nick = routerid[42:]
                is_named = routerid[41] == '='
            router.update(nick, hashFromHexId(idhash), '0' * 27, 'unknown',
                          'unknown', '0', '0')
            router.name_is_unique = is_named
            return router
Ejemplo n.º 18
0
 def test_repr_no_update(self):
     router = Router(FakeController())
     repr(router)
Ejemplo n.º 19
0
 def test_countrycode(self):
     controller = FakeController()
     router = Router(controller)
     router.update("foo", "AHhuQ8zFQJdT8l42Axxc6m6kNwI",
                   "MAANkj30tnFvmoh7FsjVFr+cmcs", "2011-12-16 15:11:34",
                   "127.0.0.1", "24051", "24052")