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
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))
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)
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)
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))
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)
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, '')
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" )
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)
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')
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)
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')
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')
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, '')
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')
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)
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
def test_repr_no_update(self): router = Router(FakeController()) repr(router)
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")