def test_calculate_total_steps_6_need_to_join_grid_and_1_folder(fake_gateway): sr = SetupRunner([fake_gateway]) settings = { "introducer": "pb://introducer.other", "magic-folders": {"FolderOne": {"code": "URI+URI"}}, } assert sr.calculate_total_steps(settings) == 6
def test_decode_icon_b64decode(tmpdir): sr = SetupRunner([]) data = b'dGVzdDEyMzQ1' # b64encode(b'test12345') dest = str(tmpdir.join('icon.png')) sr.decode_icon(data, dest) with open(dest) as f: assert f.read() == 'test12345'
def test_decode_icon_emit_got_icon_signal(qtbot, tmpdir): sr = SetupRunner([]) data = b'dGVzdDEyMzQ1' # b64encode(b'test12345') dest = str(tmpdir.join('icon.png')) with qtbot.wait_signal(sr.got_icon) as blocker: sr.decode_icon(data, dest) assert blocker.args == [dest]
def test_fetch_icon(monkeypatch, tmpdir): sr = SetupRunner([]) dest = str(tmpdir.join("icon.png")) monkeypatch.setattr("treq.get", fake_get) monkeypatch.setattr("treq.content", lambda _: b"0") yield sr.fetch_icon("http://example.org/icon.png", dest) with open(dest) as f: assert f.read() == "0"
def test_fetch_icon_emit_got_icon_signal(monkeypatch, qtbot, tmpdir): sr = SetupRunner([]) dest = str(tmpdir.join('icon.png')) monkeypatch.setattr('treq.get', fake_get) monkeypatch.setattr('treq.content', lambda _: b'0') with qtbot.wait_signal(sr.got_icon) as blocker: yield sr.fetch_icon('http://example.org/icon.png', dest) assert blocker.args == [dest]
def test_fetch_icon(monkeypatch, tmpdir): sr = SetupRunner([]) dest = str(tmpdir.join('icon.png')) monkeypatch.setattr('treq.get', fake_get) monkeypatch.setattr('treq.content', lambda _: b'0') yield sr.fetch_icon('http://example.org/icon.png', dest) with open(dest) as f: assert f.read() == '0'
def test_join_folders_emit_joined_folders_signal(monkeypatch, qtbot, tmpdir): monkeypatch.setattr('gridsync.tahoe.Tahoe.link', lambda a, b, c, d: None) sr = SetupRunner([]) sr.gateway = Tahoe(str(tmpdir.mkdir('TestGrid'))) sr.gateway.rootcap = 'URI:rootcap' folders_data = {'TestFolder': {'code': 'URI:1+URI:2'}} with qtbot.wait_signal(sr.joined_folders) as blocker: yield sr.join_folders(folders_data) assert blocker.args == [['TestFolder']]
def test_ensure_recovery_write_settings(tmpdir): nodedir = str(tmpdir.mkdir("TestGrid")) os.makedirs(os.path.join(nodedir, "private")) sr = SetupRunner([]) sr.gateway = Tahoe(nodedir) settings = {"nickname": "TestGrid", "rootcap": "URI:test"} yield sr.ensure_recovery(settings) with open(os.path.join(nodedir, "private", "settings.json")) as f: assert json.loads(f.read()) == settings
def test_join_folders_emit_joined_folders_signal(monkeypatch, qtbot, tmpdir): monkeypatch.setattr("gridsync.tahoe.Tahoe.link", lambda a, b, c, d: None) sr = SetupRunner([]) sr.gateway = Tahoe(str(tmpdir.mkdir("TestGrid"))) sr.gateway.rootcap = "URI:rootcap" folders_data = {"TestFolder": {"code": "URI:1+URI:2"}} with qtbot.wait_signal(sr.joined_folders) as blocker: yield sr.join_folders(folders_data) assert blocker.args == [["TestFolder"]]
def test_ensure_recovery_write_settings(tmpdir): nodedir = str(tmpdir.mkdir('TestGrid')) os.makedirs(os.path.join(nodedir, 'private')) sr = SetupRunner([]) sr.gateway = Tahoe(nodedir) settings = {'nickname': 'TestGrid', 'rootcap': 'URI:test'} yield sr.ensure_recovery(settings) with open(os.path.join(nodedir, 'private', 'settings.json')) as f: assert json.loads(f.read()) == settings
def got_message(self, message): self.update_progress("Reading invitation...") # 3 message = validate_settings(message, self.gateways, self) self.setup_runner = SetupRunner(self.gateways, self.use_tor) if not message.get('magic-folders'): self.setup_runner.grid_already_joined.connect( self.on_grid_already_joined) self.setup_runner.update_progress.connect(self.update_progress) self.setup_runner.joined_folders.connect(self.set_joined_folders) self.setup_runner.done.connect(self.on_done) self.setup_runner.run(message)
def test_join_grid_emit_update_progress_signal(monkeypatch, qtbot, tmpdir): monkeypatch.setattr('gridsync.setup.select_executable', lambda: (None, None)) monkeypatch.setattr('gridsync.setup.config_dir', str(tmpdir.mkdir('config_dir'))) monkeypatch.setattr('gridsync.setup.Tahoe', MagicMock()) sr = SetupRunner([]) settings = {'nickname': 'TestGrid'} with qtbot.wait_signal(sr.update_progress) as blocker: yield sr.join_grid(settings) assert blocker.args == ["Connecting to TestGrid..."]
def test_calculate_total_steps_6_need_to_join_grid_and_1_folder(fake_gateway): sr = SetupRunner([fake_gateway]) settings = { 'introducer': 'pb://introducer.other', 'magic-folders': { 'FolderOne': { 'code': 'URI+URI' } } } assert sr.calculate_total_steps(settings) == 6
def verify_settings(self, settings, from_wormhole=True): settings = validate_settings(settings, self.known_gateways, self, from_wormhole) self.setup_runner = SetupRunner(self.known_gateways) steps = self.setup_runner.calculate_total_steps(settings) + 2 self.page_2.progressbar.setMaximum(steps) self.setup_runner.grid_already_joined.connect(self.on_already_joined) self.setup_runner.update_progress.connect(self.update_progress) self.setup_runner.got_icon.connect(self.load_service_icon) self.setup_runner.done.connect(self.on_done) d = self.setup_runner.run(settings) d.addErrback(self.handle_failure)
def test_run_call_scan_rootcap_after_join_folders(monkeypatch): fake_gateway = Mock() fake_gateway.monitor.scan_rootcap = Mock() monkeypatch.setattr( "gridsync.setup.SetupRunner.get_gateway", lambda x, y, z: fake_gateway ) monkeypatch.setattr("gridsync.setup.SetupRunner.join_grid", Mock()) monkeypatch.setattr("gridsync.setup.SetupRunner.ensure_recovery", Mock()) monkeypatch.setattr("gridsync.setup.SetupRunner.join_folders", Mock()) sr = SetupRunner([]) yield sr.run({"nickname": "TestGrid", "magic-folders": {"TestFolder": {}}}) assert fake_gateway.monitor.scan_rootcap.call_count == 1
def test_join_grid_emit_got_icon_signal_nickname_least_authority_s4( monkeypatch, qtbot, tmpdir): monkeypatch.setattr('gridsync.setup.select_executable', lambda: (None, None)) monkeypatch.setattr('gridsync.setup.config_dir', str(tmpdir.mkdir('config_dir'))) monkeypatch.setattr('gridsync.setup.Tahoe', MagicMock()) sr = SetupRunner([]) settings = {'nickname': 'Least Authority S4'} with qtbot.wait_signal(sr.got_icon) as blocker: yield sr.join_grid(settings) assert blocker.args == [resource('leastauthority.com.icon')]
def test_join_grid_emit_got_icon_signal_icon_base64(monkeypatch, qtbot, tmpdir): tmp_config_dir = str(tmpdir.mkdir('config_dir')) monkeypatch.setattr('gridsync.setup.select_executable', lambda: (None, None)) monkeypatch.setattr('gridsync.setup.config_dir', tmp_config_dir) monkeypatch.setattr('gridsync.setup.Tahoe', MagicMock()) sr = SetupRunner([]) settings = {'nickname': 'TestGrid', 'icon_base64': 'dGVzdDEyMzQ1'} with qtbot.wait_signal(sr.got_icon) as blocker: yield sr.join_grid(settings) assert blocker.args == [os.path.join(tmp_config_dir, '.icon.tmp')]
def test_ensure_recovery_create_rootcap(monkeypatch, tmpdir): nodedir = str(tmpdir.mkdir('TestGrid')) os.makedirs(os.path.join(nodedir, 'private')) monkeypatch.setattr('gridsync.tahoe.Tahoe.create_rootcap', lambda _: 'URI') monkeypatch.setattr('gridsync.tahoe.Tahoe.upload', lambda x, y: 'URI:2') def fake_link(_, dircap, name, childcap): assert (dircap, name, childcap) == ('URI', 'settings.json', 'URI:2') monkeypatch.setattr('gridsync.tahoe.Tahoe.link', fake_link) sr = SetupRunner([]) sr.gateway = Tahoe(nodedir) sr.gateway.rootcap = 'URI' settings = {'nickname': 'TestGrid'} yield sr.ensure_recovery(settings)
def test_run_join_grid_use_tor(monkeypatch): monkeypatch.setattr('gridsync.tor.get_tor', lambda _: 'FakeTorObject') monkeypatch.setattr('gridsync.setup.SetupRunner.get_gateway', lambda x, y, z: None) monkeypatch.setattr('gridsync.setup.SetupRunner.join_grid', lambda x, y: None) monkeypatch.setattr('gridsync.setup.SetupRunner.ensure_recovery', lambda x, y: None) monkeypatch.setattr('gridsync.setup.SetupRunner.join_folders', lambda x, y: None) sr = SetupRunner([], use_tor=True) settings = {'nickname': 'TestGrid', 'magic-folders': {'TestFolder': {}}} yield sr.run(settings) assert settings['hide-ip']
def test_join_grid_emit_got_icon_signal_icon_base64( monkeypatch, qtbot, tmpdir ): tmp_config_dir = str(tmpdir.mkdir("config_dir")) monkeypatch.setattr( "gridsync.setup.select_executable", lambda: (None, None) ) monkeypatch.setattr("gridsync.setup.config_dir", tmp_config_dir) monkeypatch.setattr("gridsync.setup.Tahoe", MagicMock()) sr = SetupRunner([]) settings = {"nickname": "TestGrid", "icon_base64": "dGVzdDEyMzQ1"} with qtbot.wait_signal(sr.got_icon) as blocker: yield sr.join_grid(settings) assert blocker.args == [os.path.join(tmp_config_dir, ".icon.tmp")]
def test_run_emit_done_signal(monkeypatch, qtbot): monkeypatch.setattr('gridsync.setup.SetupRunner.get_gateway', lambda x, y, z: 'GatewayObj') monkeypatch.setattr('gridsync.setup.SetupRunner.join_grid', lambda x, y: None) monkeypatch.setattr('gridsync.setup.SetupRunner.ensure_recovery', lambda x, y: None) monkeypatch.setattr('gridsync.setup.SetupRunner.join_folders', lambda x, y: None) sr = SetupRunner([]) settings = {'nickname': 'TestGrid', 'magic-folders': {'TestFolder': {}}} with qtbot.wait_signal(sr.done) as blocker: yield sr.run(settings) assert blocker.args == ['GatewayObj']
def test_join_grid_no_emit_icon_signal_exception(monkeypatch, qtbot, tmpdir): monkeypatch.setattr('gridsync.setup.select_executable', lambda: (None, None)) monkeypatch.setattr('gridsync.setup.config_dir', str(tmpdir.mkdir('config_dir'))) monkeypatch.setattr('gridsync.setup.Tahoe', MagicMock()) monkeypatch.setattr('treq.get', fake_get) monkeypatch.setattr('treq.content', lambda _: b'0') monkeypatch.setattr('gridsync.setup.SetupRunner.fetch_icon', MagicMock(side_effect=Exception())) sr = SetupRunner([]) settings = {'nickname': 'TestGrid', 'icon_url': 'https://gridsync.io/icon'} with qtbot.assert_not_emitted(sr.got_icon): yield sr.join_grid(settings)
def test_join_grid_emit_got_icon_signal_icon_url(monkeypatch, qtbot, tmpdir): tmp_config_dir = str(tmpdir.mkdir('config_dir')) os.makedirs(os.path.join(tmp_config_dir, 'TestGrid')) monkeypatch.setattr('gridsync.setup.select_executable', lambda: (None, None)) monkeypatch.setattr('gridsync.setup.config_dir', tmp_config_dir) monkeypatch.setattr('gridsync.setup.Tahoe', MagicMock()) monkeypatch.setattr('treq.get', fake_get) monkeypatch.setattr('treq.content', lambda _: b'0') sr = SetupRunner([]) settings = {'nickname': 'TestGrid', 'icon_url': 'https://gridsync.io/icon'} with qtbot.wait_signal(sr.got_icon) as blocker: yield sr.join_grid(settings) assert blocker.args == [os.path.join(tmp_config_dir, '.icon.tmp')]
def test_run_join_grid(monkeypatch): monkeypatch.setattr('gridsync.setup.SetupRunner.get_gateway', lambda x, y, z: None) def fake_join_grid(*_): assert True monkeypatch.setattr('gridsync.setup.SetupRunner.join_grid', fake_join_grid) monkeypatch.setattr('gridsync.setup.SetupRunner.ensure_recovery', lambda x, y: None) monkeypatch.setattr('gridsync.setup.SetupRunner.join_folders', lambda x, y: None) sr = SetupRunner([]) settings = {'nickname': 'TestGrid', 'magic-folders': {'TestFolder': {}}} yield sr.run(settings)
def test_join_grid_emit_update_progress_signal_via_tor( monkeypatch, qtbot, tmpdir ): monkeypatch.setattr( "gridsync.setup.select_executable", lambda: (None, None) ) monkeypatch.setattr( "gridsync.setup.config_dir", str(tmpdir.mkdir("config_dir")) ) monkeypatch.setattr("gridsync.setup.Tahoe", MagicMock()) sr = SetupRunner([], use_tor=True) settings = {"nickname": "TestGrid"} with qtbot.wait_signal(sr.update_progress) as blocker: yield sr.join_grid(settings) assert blocker.args == ["Connecting to TestGrid via Tor..."]
def test_join_grid_emit_got_icon_signal_icon_url(monkeypatch, qtbot, tmpdir): tmp_config_dir = str(tmpdir.mkdir("config_dir")) os.makedirs(os.path.join(tmp_config_dir, "TestGrid")) monkeypatch.setattr( "gridsync.setup.select_executable", lambda: (None, None) ) monkeypatch.setattr("gridsync.setup.config_dir", tmp_config_dir) monkeypatch.setattr("gridsync.setup.Tahoe", MagicMock()) monkeypatch.setattr("treq.get", fake_get) monkeypatch.setattr("treq.content", lambda _: b"0") sr = SetupRunner([]) settings = {"nickname": "TestGrid", "icon_url": "https://gridsync.io/icon"} with qtbot.wait_signal(sr.got_icon) as blocker: yield sr.join_grid(settings) assert blocker.args == [os.path.join(tmp_config_dir, ".icon.tmp")]
def test_join_grid_storage_servers(monkeypatch, tmpdir): monkeypatch.setattr('gridsync.setup.select_executable', lambda: (None, None)) monkeypatch.setattr('gridsync.setup.config_dir', str(tmpdir.mkdir('config_dir'))) monkeypatch.setattr('gridsync.setup.Tahoe', MagicMock()) def fake_add_storage_servers(*_): assert True monkeypatch.setattr('gridsync.tahoe.Tahoe.add_storage_servers', fake_add_storage_servers) sr = SetupRunner([]) settings = {'nickname': 'TestGrid', 'storage': {'test': 'test'}} yield sr.join_grid(settings)
def test_ensure_recovery_create_rootcap(monkeypatch, tmpdir): nodedir = str(tmpdir.mkdir("TestGrid")) os.makedirs(os.path.join(nodedir, "private")) monkeypatch.setattr("gridsync.tahoe.Tahoe.create_rootcap", lambda _: "URI") monkeypatch.setattr("gridsync.tahoe.Tahoe.upload", lambda x, y: "URI:2") def fake_link(_, dircap, name, childcap): assert (dircap, name, childcap) == ("URI", "settings.json", "URI:2") monkeypatch.setattr("gridsync.tahoe.Tahoe.link", fake_link) sr = SetupRunner([]) sr.gateway = Tahoe(nodedir) sr.gateway.rootcap = "URI" settings = {"nickname": "TestGrid"} yield sr.ensure_recovery(settings)
class InviteReceiver(QObject): # Wormhole got_welcome = Signal(dict) # got_code = Signal(str) got_introduction = Signal() got_message = Signal(dict) closed = Signal() # SetupRunner grid_already_joined = Signal(str) update_progress = Signal(str) got_icon = Signal(str) client_started = Signal(object) joined_folders = Signal(list) done = Signal(object) def __init__(self, known_gateways=None, use_tor=False): super(InviteReceiver, self).__init__() self.known_gateways = known_gateways self.use_tor = use_tor self.setup_runner = SetupRunner(known_gateways, use_tor) self.setup_runner.grid_already_joined.connect( self.grid_already_joined.emit ) self.setup_runner.update_progress.connect(self.update_progress.emit) self.setup_runner.got_icon.connect(self.got_icon.emit) self.setup_runner.client_started.connect(self.client_started.emit) self.setup_runner.joined_folders.connect(self.joined_folders.emit) self.setup_runner.done.connect(self.done.emit) self.wormhole = Wormhole(use_tor) self.wormhole.got_welcome.connect(self.got_welcome.emit) self.wormhole.got_introduction.connect(self.got_introduction.emit) self.wormhole.got_message.connect(self.got_message.emit) self.wormhole.closed.connect(self.closed.emit) def cancel(self): self.wormhole.close() @inlineCallbacks def _run_setup(self, settings, from_wormhole): settings = validate_settings( settings, self.known_gateways, None, from_wormhole ) yield self.setup_runner.run(settings) @inlineCallbacks def receive(self, code, settings=None): # TODO: Calculate/emit total steps if settings: yield self._run_setup(settings, from_wormhole=False) elif code.split("-")[0] == "0": settings = load_settings_from_cheatcode(code[2:]) if settings: yield self._run_setup(settings, from_wormhole=False) else: settings = yield self.wormhole.receive(code) yield self._run_setup(settings, from_wormhole=True)
def test_run_emit_grid_already_joined_signal(monkeypatch, qtbot): monkeypatch.setattr( "gridsync.setup.SetupRunner.get_gateway", lambda x, y, z: Mock() ) monkeypatch.setattr( "gridsync.setup.SetupRunner.join_grid", lambda x, y: None ) monkeypatch.setattr( "gridsync.setup.SetupRunner.ensure_recovery", lambda x, y: None ) monkeypatch.setattr( "gridsync.setup.SetupRunner.join_folders", lambda x, y: None ) sr = SetupRunner([]) settings = {"nickname": "TestGrid"} with qtbot.wait_signal(sr.grid_already_joined) as blocker: yield sr.run(settings) assert blocker.args == ["TestGrid"]