Loading sbws/lib/circuitbuilder.py +5 −18 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ from stem import CircuitExtensionFailed, InvalidRequest, ProtocolError, Timeout from stem import InvalidArguments import random import sbws.util.stem as stem_utils from .relaylist import RelayList from .relaylist import Relay, RelayList import logging log = logging.getLogger(__name__) Loading Loading @@ -125,9 +125,9 @@ class GapsCircuitBuilder(CircuitBuilder): if not fp: new_path.append(None) continue relay = stem_utils.fp_or_nick_to_relay(self.controller, fp) if not relay: log.debug('Failed to get descriptor for relay %s', fp) relay = Relay(fp, self.controller) if not relay.fingerprint: log.debug('Tor seems to no longer think %s is a relay', fp) return None new_path.append(relay) return new_path Loading @@ -147,20 +147,7 @@ class GapsCircuitBuilder(CircuitBuilder): continue chosen_fps.append(choice) black_fps.append(choice) relays = [] for fp in chosen_fps: relay = stem_utils.fp_or_nick_to_relay(self.controller, fp) if not relay: log.warning( 'We\'re selecting a handful of random relays and stem ' 'doesn\'t think one of the fingerprints we gave it goes ' 'to a relay. Maybe we got a new consensus since the last ' 'time we refreshed our list of relays. In any case, we ' 'could try to recover. But failing inside ' '_random_sample_relays is easier. Sorry.') return None relays.append(relay) return relays return [Relay(fp, self.controller) for fp in chosen_fps] def build_circuit(self, path): ''' <path> is a list of relays and Falsey values. Relays can be Loading sbws/util/stem.py +0 −11 Original line number Diff line number Diff line Loading @@ -14,17 +14,6 @@ log = logging.getLogger(__name__) stream_building_lock = RLock() def fp_or_nick_to_relay(controller, fp_nick): ''' Takes a string that could be either a relay's fingerprint or nickname. Return the relay's descriptor if found. Otherwise return None. Note that if a nickname is given and multiple relays have that nickname, only one of them will be returned. ''' assert isinstance(fp_nick, str) assert is_controller_okay(controller) return controller.get_network_status(fp_nick, default=None) def attach_stream_to_circuit_listener(controller, circ_id): ''' Returns a function that should be given to add_event_listener(). It looks for newly created streams and attaches them to the given circ_id ''' Loading tests/integration/util/test_stem.py +0 −32 Original line number Diff line number Diff line import sbws.util.stem as stem_utils from stem.descriptor.router_status_entry import RouterStatusEntryV3 def test_launch_and_okay(persistent_launch_tor): cont = persistent_launch_tor assert stem_utils.is_controller_okay(cont) assert stem_utils.is_bootstrapped(cont) def test_get_relay_from_fp(persistent_launch_tor): cont = persistent_launch_tor # AA45C13025C037F056E734169891878ED0880231 is auth1 relay = stem_utils.fp_or_nick_to_relay( cont, 'AA45C13025C037F056E734169891878ED0880231') assert isinstance(relay, RouterStatusEntryV3) assert relay.fingerprint == 'AA45C13025C037F056E734169891878ED0880231' assert relay.nickname == 'auth1' def test_get_relay_from_nick(persistent_launch_tor): cont = persistent_launch_tor # AA45C13025C037F056E734169891878ED0880231 is auth1 relay = stem_utils.fp_or_nick_to_relay(cont, 'auth1') assert isinstance(relay, RouterStatusEntryV3) assert relay.fingerprint == 'AA45C13025C037F056E734169891878ED0880231' assert relay.nickname == 'auth1' def test_get_relay_from_bad_nick(persistent_launch_tor): cont = persistent_launch_tor relay = stem_utils.fp_or_nick_to_relay(cont, 'notarelaynick') assert relay is None def test_get_relay_from_bad_fp(persistent_launch_tor): cont = persistent_launch_tor relay = stem_utils.fp_or_nick_to_relay(cont, 'A'*40) assert relay is None Loading
sbws/lib/circuitbuilder.py +5 −18 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ from stem import CircuitExtensionFailed, InvalidRequest, ProtocolError, Timeout from stem import InvalidArguments import random import sbws.util.stem as stem_utils from .relaylist import RelayList from .relaylist import Relay, RelayList import logging log = logging.getLogger(__name__) Loading Loading @@ -125,9 +125,9 @@ class GapsCircuitBuilder(CircuitBuilder): if not fp: new_path.append(None) continue relay = stem_utils.fp_or_nick_to_relay(self.controller, fp) if not relay: log.debug('Failed to get descriptor for relay %s', fp) relay = Relay(fp, self.controller) if not relay.fingerprint: log.debug('Tor seems to no longer think %s is a relay', fp) return None new_path.append(relay) return new_path Loading @@ -147,20 +147,7 @@ class GapsCircuitBuilder(CircuitBuilder): continue chosen_fps.append(choice) black_fps.append(choice) relays = [] for fp in chosen_fps: relay = stem_utils.fp_or_nick_to_relay(self.controller, fp) if not relay: log.warning( 'We\'re selecting a handful of random relays and stem ' 'doesn\'t think one of the fingerprints we gave it goes ' 'to a relay. Maybe we got a new consensus since the last ' 'time we refreshed our list of relays. In any case, we ' 'could try to recover. But failing inside ' '_random_sample_relays is easier. Sorry.') return None relays.append(relay) return relays return [Relay(fp, self.controller) for fp in chosen_fps] def build_circuit(self, path): ''' <path> is a list of relays and Falsey values. Relays can be Loading
sbws/util/stem.py +0 −11 Original line number Diff line number Diff line Loading @@ -14,17 +14,6 @@ log = logging.getLogger(__name__) stream_building_lock = RLock() def fp_or_nick_to_relay(controller, fp_nick): ''' Takes a string that could be either a relay's fingerprint or nickname. Return the relay's descriptor if found. Otherwise return None. Note that if a nickname is given and multiple relays have that nickname, only one of them will be returned. ''' assert isinstance(fp_nick, str) assert is_controller_okay(controller) return controller.get_network_status(fp_nick, default=None) def attach_stream_to_circuit_listener(controller, circ_id): ''' Returns a function that should be given to add_event_listener(). It looks for newly created streams and attaches them to the given circ_id ''' Loading
tests/integration/util/test_stem.py +0 −32 Original line number Diff line number Diff line import sbws.util.stem as stem_utils from stem.descriptor.router_status_entry import RouterStatusEntryV3 def test_launch_and_okay(persistent_launch_tor): cont = persistent_launch_tor assert stem_utils.is_controller_okay(cont) assert stem_utils.is_bootstrapped(cont) def test_get_relay_from_fp(persistent_launch_tor): cont = persistent_launch_tor # AA45C13025C037F056E734169891878ED0880231 is auth1 relay = stem_utils.fp_or_nick_to_relay( cont, 'AA45C13025C037F056E734169891878ED0880231') assert isinstance(relay, RouterStatusEntryV3) assert relay.fingerprint == 'AA45C13025C037F056E734169891878ED0880231' assert relay.nickname == 'auth1' def test_get_relay_from_nick(persistent_launch_tor): cont = persistent_launch_tor # AA45C13025C037F056E734169891878ED0880231 is auth1 relay = stem_utils.fp_or_nick_to_relay(cont, 'auth1') assert isinstance(relay, RouterStatusEntryV3) assert relay.fingerprint == 'AA45C13025C037F056E734169891878ED0880231' assert relay.nickname == 'auth1' def test_get_relay_from_bad_nick(persistent_launch_tor): cont = persistent_launch_tor relay = stem_utils.fp_or_nick_to_relay(cont, 'notarelaynick') assert relay is None def test_get_relay_from_bad_fp(persistent_launch_tor): cont = persistent_launch_tor relay = stem_utils.fp_or_nick_to_relay(cont, 'A'*40) assert relay is None