def test_set_ports(self): protocol = FakeControlProtocol([]) config = TorConfig(protocol) hsdir = self.mktemp() os.mkdir(hsdir) with open(join(hsdir, 'hs_ed25519_secret_key'), 'wb') as f: f.write(b'\x01\x02\x03\x04') with open(join(hsdir, 'hostname'), 'w') as f: f.write('{}.onion'.format(_test_onion_id)) hs_d = FilesystemOnionService.create( Mock(), config, hsdir=hsdir, ports=["80 127.0.0.1:4321"], version=3, ) # arrange HS_DESC callbacks so we get the hs instance back cb = protocol.events['HS_DESC'] cb('UPLOAD {} UNKNOWN hsdir0'.format(_test_onion_id)) cb('UPLOADED {} UNKNOWN hsdir0'.format(_test_onion_id)) hs = yield hs_d hs.ports = ["443 127.0.0.1:443"] self.assertEqual(1, len(hs.ports))
def test_tor_version_v3_progress(self): protocol = FakeControlProtocol([]) config = TorConfig(protocol) hsdir = self.mktemp() os.mkdir(hsdir) with open(join(hsdir, "hostname"), "w") as f: f.write('{}.onion'.format(_test_onion_id)) def my_progress(a, b, c): pass eph_d = FilesystemOnionService.create( Mock(), config, hsdir, ports=["80 127.0.0.1:80"], progress=my_progress, version=3, ) # arrange HS_DESC callbacks so we get the hs instance back cb = protocol.events['HS_DESC'] cb('UPLOAD {} UNKNOWN hsdir0'.format(_test_onion_id)) cb('UPLOADED {} UNKNOWN hsdir0'.format(_test_onion_id)) yield eph_d
def test_tor_version_v3_progress_await_all(self): protocol = FakeControlProtocol([]) config = TorConfig(protocol) hsdir = self.mktemp() os.mkdir(hsdir) with open(join(hsdir, "hostname"), "w") as f: f.write('{}.onion'.format(_test_onion_id)) class Bad(Exception): pass def my_progress(a, b, c): raise Bad("it's bad") eph_d = FilesystemOnionService.create( Mock(), config, hsdir, ports=["80 127.0.0.1:80"], progress=my_progress, version=3, await_all_uploads=True, ) # arrange HS_DESC callbacks so we get the hs instance back cb = protocol.events['HS_DESC'] cb('UPLOAD {} UNKNOWN hsdir0'.format(_test_onion_id)) cb('UPLOADED {} UNKNOWN hsdir0'.format(_test_onion_id)) yield eph_d errs = self.flushLoggedErrors(Bad) self.assertEqual(3, len(errs)) # because there's a "100%" one too
def test_set_dir(self): protocol = FakeControlProtocol([]) config = TorConfig(protocol) hsdir0 = self.mktemp() os.mkdir(hsdir0) hsdir1 = self.mktemp() os.mkdir(hsdir1) with open(join(hsdir0, "hostname"), "w") as f: f.write('{}.onion'.format(_test_onion_id)) hs_d = FilesystemOnionService.create( Mock(), config, hsdir=hsdir0, ports=["80 127.0.0.1:4321"], version=3, ) # arrange HS_DESC callbacks so we get the hs instance back cb = protocol.events['HS_DESC'] cb('UPLOAD {} UNKNOWN hsdir0'.format(_test_onion_id)) cb('UPLOADED {} UNKNOWN hsdir0'.format(_test_onion_id)) hs = yield hs_d hs.dir = hsdir1 self.assertEqual(hs.dir, hsdir1)
def test_filesystem_wrong_ports(self): protocol = FakeControlProtocol([]) config = TorConfig(protocol) with self.assertRaises(ValueError) as ctx: yield FilesystemOnionService.create( Mock(), config, "/dev/null", ports="80 127.0.0.1:80", ) self.assertIn("'ports' must be a list of strings", str(ctx.exception))
def test_filesystem_wrong_ports(self): protocol = FakeControlProtocol([]) config = TorConfig(protocol) with self.assertRaises(ValueError) as ctx: yield FilesystemOnionService.create( Mock(), config, "/dev/null", ports="80 127.0.0.1:80", ) self.assertIn( "'ports' must be a list of strings", str(ctx.exception) )
def test_old_tor_version(self): protocol = FakeControlProtocol([]) protocol.version = "0.1.2.3" config = TorConfig(protocol) hsdir = self.mktemp() def my_progress(a, b, c): pass eph_d = FilesystemOnionService.create( Mock(), config, hsdir, ports=["80 127.0.0.1:80"], progress=my_progress, ) yield eph_d
def test_unknown_version(self): protocol = FakeControlProtocol([]) protocol.version = "0.1.1.1" config = TorConfig(protocol) hsdir = self.mktemp() os.mkdir(hsdir) hs = yield FilesystemOnionService.create( Mock(), config, hsdir=hsdir, ports=["80 127.0.0.1:4321"], version=99, ) with self.assertRaises(RuntimeError) as ctx: hs.private_key self.assertIn("Don't know how to load", str(ctx.exception))
def test_dir_ioerror(self): protocol = FakeControlProtocol([]) config = TorConfig(protocol) hsdir = self.mktemp() os.mkdir(hsdir) with open(join(hsdir, "hostname"), "w") as f: f.write("{}.onion".format(_test_onion_id)) hs_d = FilesystemOnionService.create( Mock(), config, hsdir=hsdir, ports=["80 127.0.0.1:4321"], ) # arrange HS_DESC callbacks so we get the hs instance back cb = protocol.events['HS_DESC'] cb('UPLOAD {} UNKNOWN hsdir0'.format(_test_onion_id)) cb('UPLOADED {} UNKNOWN hsdir0'.format(_test_onion_id)) hs = yield hs_d self.assertIs(None, hs.private_key)