def setUp(self): reactor = Mock() proto = Mock() directlyProvides(proto, ITorControlProtocol) self.cfg = TorConfig() self.cfg.HidServAuth = ["existing.onion some_token"] self.tor = Tor(reactor, proto, _tor_config=self.cfg)
def test_quit_no_protocol(self): tor = Tor(Mock(), Mock()) tor._protocol = None tor._process_protocol = None with self.assertRaises(RuntimeError) as ctx: yield tor.quit() self.assertTrue('no protocol instance' in str(ctx.exception))
def setUp(self): reactor = Mock() proto = Mock() proto.get_conf = Mock( return_value=defer.succeed({"SocksPort": "9050"})) self.cfg = Mock() self.tor = Tor(reactor, proto, _tor_config=self.cfg)
def test_dns_resolve_ptr(self, fake_socks): answer = object() proto = Mock() proto.get_conf = Mock( return_value=defer.succeed({"SocksPort": "9050"})) tor = Tor(Mock(), proto) fake_socks.resolve_ptr = Mock(return_value=defer.succeed(answer)) ans = yield tor.dns_resolve_ptr("4.3.2.1") self.assertEqual(ans, answer)
def test_dns_resolve(self, fake_socks): answer = object() cfg = Mock() proto = Mock() proto.get_conf = Mock( return_value=defer.succeed({"SocksPort": "9050"})) tor = Tor(Mock(), proto, _tor_config=cfg) fake_socks.resolve = Mock(return_value=defer.succeed(answer)) ans = yield tor.dns_resolve("meejah.ca") self.assertEqual(ans, answer)
def test_web_agent_error(self): reactor = Mock() cfg = Mock() proto = Mock() directlyProvides(proto, ITorControlProtocol) tor = Tor(reactor, proto, _tor_config=cfg) with self.assertRaises(ValueError) as ctx: agent = tor.web_agent(pool=self.pool, socks_endpoint=object()) yield agent.request('GET', b'meejah.ca') self.assertTrue("'socks_endpoint' should be" in str(ctx.exception))
def test_web_agent_deferred(self): socks_d = defer.succeed("9151") reactor = Mock() cfg = Mock() proto = Mock() directlyProvides(proto, ITorControlProtocol) tor = Tor(reactor, proto, _tor_config=cfg) agent = tor.web_agent(pool=self.pool, socks_endpoint=socks_d) resp = yield agent.request('GET', b'meejah.ca') self.assertEqual(self.expected_response, resp)
def test_web_agent_endpoint(self): socks = Mock() directlyProvides(socks, IStreamClientEndpoint) reactor = Mock() cfg = Mock() proto = Mock() directlyProvides(proto, ITorControlProtocol) tor = Tor(reactor, proto, _tor_config=cfg) agent = tor.web_agent(pool=self.pool, socks_endpoint=socks) resp = yield agent.request('GET', b'meejah.ca') self.assertEqual(self.expected_response, resp)
def test_dns_resolve_existing_socks(self, fake_socks): answer = object() proto = Mock() proto.get_conf = Mock( return_value=defer.succeed({"SocksPort": "9050"})) tor = Tor(Mock(), proto) fake_socks.resolve = Mock(return_value=defer.succeed(answer)) ans0 = yield tor.dns_resolve("meejah.ca") # do it again to exercise the _default_socks_port() case when # we already got the default fake_socks.resolve = Mock(return_value=defer.succeed(answer)) ans1 = yield tor.dns_resolve("meejah.ca") self.assertEqual(ans0, answer) self.assertEqual(ans1, answer)
def test_dns_resolve_no_configured_socks(self, fake_socks): answer = object() proto = Mock() proto.get_conf = Mock( return_value=defer.succeed({"SocksPort": "9050"})) cfg = Mock() tor = Tor(Mock(), proto, _tor_config=cfg) def boom(*args, **kw): raise RuntimeError("no socks") cfg.socks_endpoint = Mock(side_effect=boom) fake_socks.resolve = Mock(return_value=defer.succeed(answer)) ans = yield tor.dns_resolve("meejah.ca") self.assertEqual(ans, answer)
class DormantTests(unittest.TestCase): def setUp(self): reactor = Mock() self.proto = Mock() self.cfg = Mock() self.tor = Tor(reactor, self.proto, _tor_config=self.cfg) self.tor.dns_resolve = Mock() @defer.inlineCallbacks def test_ready(self): self.proto.get_info = Mock( return_value={ "dormant": "0", "status/enough-dir-info": "1", "status/circuit-established": "1", }) ready = yield self.tor.is_ready() self.assertTrue(ready, "should be ready") @defer.inlineCallbacks def test_become_ready_already(self): self.proto.get_info = Mock( return_value={ "dormant": "0", "status/enough-dir-info": "1", "status/circuit-established": "1", }) yield self.tor.become_ready() self.assertTrue(self.tor.dns_resolve.mock_calls == []) @defer.inlineCallbacks def test_become_ready_asleep(self): self.proto.get_info = Mock( return_value={ "dormant": "1", "status/enough-dir-info": "1", "status/circuit-established": "1", }) yield self.tor.become_ready() self.assertEqual(1, len(self.tor.dns_resolve.mock_calls))
class TorAttributeTestsNoConfig(unittest.TestCase): def setUp(self): reactor = Mock() proto = Mock() directlyProvides(proto, ITorControlProtocol) self.tor = Tor(reactor, proto) @defer.inlineCallbacks def test_get_config(self): with patch('txtorcon.controller.TorConfig') as torcfg: gold = object() torcfg.from_protocol = Mock(return_value=defer.succeed(gold)) cfg = yield self.tor.get_config() self.assertEqual(gold, cfg)
class TorStreamTests(unittest.TestCase): def setUp(self): reactor = Mock() proto = Mock() proto.get_conf = Mock( return_value=defer.succeed({"SocksPort": "9050"})) self.cfg = Mock() self.tor = Tor(reactor, proto, _tor_config=self.cfg) def test_sanity(self): self.assertTrue(_is_non_public_numeric_address(u'10.0.0.0')) self.assertTrue(_is_non_public_numeric_address(u'::1')) def test_v6(self): import ipaddress ipaddress.ip_address(u'2603:3023:807:3d00:21e:52ff:fe71:a4ce') def test_stream_private_ip(self): with self.assertRaises(Exception) as ctx: self.tor.stream_via('10.0.0.1', '1234') self.assertTrue("isn't going to work over Tor", str(ctx.exception)) def test_stream_v6(self): with self.assertRaises(Exception) as ctx: self.tor.stream_via(u'::1', '1234') self.assertTrue("isn't going to work over Tor", str(ctx.exception)) def test_public_v6(self): # should not be an error self.tor.stream_via(u'2603:3023:807:3d00:21e:52ff:fe71:a4ce', '4321') def test_public_v4(self): # should not be an error self.tor.stream_via(u'8.8.8.8', '4321') def test_stream_host(self): self.tor.stream_via(b'meejah.ca', '1234')
def test_web_agent_defaults(self): reactor = Mock() # XXX is there a faster way to do this? better reactor fake? fake_host = Mock() fake_host.port = 1234 fake_port = Mock() fake_port.getHost = Mock(return_value=fake_host) reactor.listenTCP = Mock(return_value=fake_port) cfg = Mock() cfg.create_socks_endpoint = Mock(return_value=defer.succeed("9050")) proto = Mock() proto.get_conf = Mock(return_value=defer.succeed({})) directlyProvides(proto, ITorControlProtocol) tor = Tor(reactor, proto, _tor_config=cfg) try: agent = tor.web_agent(pool=self.pool) except ImportError as e: if 'IAgentEndpointFactory' in str(e): print("Skipping; appears we don't have web support") return resp = yield agent.request('GET', b'meejah.ca') self.assertEqual(self.expected_response, resp)
class ClientOnionServiceAuthenticationTests3(unittest.TestCase): def setUp(self): reactor = Mock() proto = Mock() directlyProvides(proto, ITorControlProtocol) self.cfg = TorConfig() self.cfg.HidServAuth = ["existing.onion some_token"] self.tor = Tor(reactor, proto, _tor_config=self.cfg) def test_context(self): return ensureDeferred(self._context_test()) async def _context_test(self): async with self.tor.onion_authentication("some.onion", "token"): self.assertIn("some.onion token", self.cfg.HidServAuth) self.assertNotIn("some.onion token", self.cfg.HidServAuth) self.assertIn("existing.onion some_token", self.cfg.HidServAuth)
def setUp(self): reactor = Mock() self.proto = Mock() self.cfg = Mock() self.tor = Tor(reactor, self.proto, _tor_config=self.cfg) self.tor.dns_resolve = Mock()
def setUp(self): reactor = Mock() proto = Mock() directlyProvides(proto, ITorControlProtocol) self.tor = Tor(reactor, proto)
def test_quit(self): tor = Tor(Mock(), Mock()) tor._protocol = Mock() tor._process_protocol = Mock() yield tor.quit()
def test_create_state(self): tor = Tor(Mock(), Mock()) with patch('txtorcon.controller.TorState') as ts: ts.post_boostrap = defer.succeed('boom') yield tor.create_state()
def test_str(self): tor = Tor(Mock(), Mock()) str(tor)
def bam(*args, **kw): self.config.bootstrap() return defer.succeed(Tor(Mock(), self.protocol, _tor_config=self.config))
def bam(*args, **kw): self.config.bootstrap() return defer.succeed(Tor(Mock(), self.config))