def test_repo_add_success(qapp, qtbot, mocker, borg_json_output): # Add new repo window main = qapp.main_window main.repoTab.repoSelector.setCurrentIndex(1) add_repo_window = main.repoTab._window test_repo_url = f'vorta-test-repo.{uuid.uuid4()}.com:repo' # Random repo URL to avoid macOS keychain qtbot.keyClicks(add_repo_window.repoURL, test_repo_url) qtbot.keyClicks(add_repo_window.passwordLineEdit, LONG_PASSWORD) qtbot.keyClicks(add_repo_window.confirmLineEdit, LONG_PASSWORD) stdout, stderr = borg_json_output('info') popen_result = mocker.MagicMock(stdout=stdout, stderr=stderr, returncode=0) mocker.patch.object(vorta.borg.borg_thread, 'Popen', return_value=popen_result) qtbot.mouseClick(add_repo_window.saveButton, QtCore.Qt.LeftButton) with qtbot.waitSignal(add_repo_window.thread.result, timeout=3000) as _: pass assert EventLogModel.select().count() == 2 assert RepoModel.get(id=2).url == test_repo_url keyring = VortaKeyring.get_keyring() assert keyring.get_password("vorta-repo", RepoModel.get(id=2).url) == LONG_PASSWORD assert main.repoTab.repoSelector.currentText() == test_repo_url
def test_repo_add_success(qapp, qtbot, mocker, borg_json_output): LONG_PASSWORD = '******' # Add new repo window main = qapp.main_window main.repoTab.repo_added.disconnect() add_repo_window = AddRepoWindow(main) test_repo_url = f'vorta-test-repo.{uuid.uuid4()}.com:repo' # Random repo URL to avoid macOS keychain qtbot.keyClicks(add_repo_window.repoURL, test_repo_url) qtbot.keyClicks(add_repo_window.passwordLineEdit, LONG_PASSWORD) stdout, stderr = borg_json_output('info') popen_result = mocker.MagicMock(stdout=stdout, stderr=stderr, returncode=0) mocker.patch.object(vorta.borg.borg_thread, 'Popen', return_value=popen_result) qtbot.mouseClick(add_repo_window.saveButton, QtCore.Qt.LeftButton) with qtbot.waitSignal(add_repo_window.thread.result, timeout=3000) as blocker: pass main.repoTab.process_new_repo(blocker.args[0]) assert EventLogModel.select().count() == 1 assert RepoModel.get(id=2).url == test_repo_url from vorta.keyring.abc import get_keyring keyring = get_keyring() assert keyring.get_password("vorta-repo", RepoModel.get(id=2).url) == LONG_PASSWORD
def test_repo_add(app, qtbot, mocker, borg_json_output): # Add new repo window main = app.main_window add_repo_window = AddRepoWindow(main.repoTab) qtbot.keyClicks(add_repo_window.repoURL, 'aaa') qtbot.mouseClick(add_repo_window.saveButton, QtCore.Qt.LeftButton) assert add_repo_window.errorText.text().startswith('Please enter a valid') qtbot.keyClicks(add_repo_window.repoURL, 'bbb.com:repo') qtbot.mouseClick(add_repo_window.saveButton, QtCore.Qt.LeftButton) assert add_repo_window.errorText.text() == 'Please use a longer password.' qtbot.keyClicks(add_repo_window.passwordLineEdit, 'long-password-long') stdout, stderr = borg_json_output('info') popen_result = mocker.MagicMock(stdout=stdout, stderr=stderr, returncode=0) mocker.patch.object(vorta.borg.borg_thread, 'Popen', return_value=popen_result) qtbot.mouseClick(add_repo_window.saveButton, QtCore.Qt.LeftButton) with qtbot.waitSignal(add_repo_window.thread.result, timeout=1000) as blocker: pass main.repoTab.process_new_repo(blocker.args[0]) # assert EventLogModel.select().count() == 2 assert RepoModel.get(id=1).url == 'aaabbb.com:repo'
def process_result(self, result): if result['returncode'] == 0: remote_archives = result['data'].get('archives', []) # get info stored during BorgThread.prepare() # repo_id = self.params['repo_id'] repo_id = result['params']['repo_id'] # Update remote archives. for remote_archive in remote_archives: archive = ArchiveModel.get_or_none( snapshot_id=remote_archive['id'], repo=repo_id) archive.name = remote_archive['name'] # incase name changed # archive.time = parser.parse(remote_archive['time']) archive.duration = remote_archive['duration'] archive.size = remote_archive['stats']['deduplicated_size'] archive.save() if 'cache' in result['data']: stats = result['data']['cache']['stats'] repo = RepoModel.get(id=result['params']['repo_id']) repo.total_size = stats['total_size'] repo.unique_csize = stats['unique_csize'] repo.unique_size = stats['unique_size'] repo.total_unique_chunks = stats['total_unique_chunks'] repo.save()
def process_result(self, result): if result['returncode'] in [0, 1] and 'archive' in result['data']: new_archive, created = ArchiveModel.get_or_create( snapshot_id=result['data']['archive']['id'], defaults={ 'name': result['data']['archive']['name'], 'time': parser.parse(result['data']['archive']['start']), 'repo': result['params']['repo_id'], 'duration': result['data']['archive']['duration'], 'size': result['data']['archive']['stats']['deduplicated_size'] }) new_archive.save() if 'cache' in result['data'] and created: stats = result['data']['cache']['stats'] repo = RepoModel.get(id=result['params']['repo_id']) repo.total_size = stats['total_size'] repo.unique_csize = stats['unique_csize'] repo.unique_size = stats['unique_size'] repo.total_unique_chunks = stats['total_unique_chunks'] repo.save() if result['returncode'] == 1: self.app.backup_progress_event.emit( self. tr('Backup finished with warnings. See logs for details.')) else: self.app.backup_progress_event.emit( self.tr('Backup finished.'))
def process_result(self, result): if result['returncode'] == 0: repo_url, old_name = result['cmd'][-2].split('::') new_name = result['cmd'][-1] repo = RepoModel.get(url=repo_url) renamed_archive = ArchiveModel.get(name=old_name, repo=repo) renamed_archive.name = new_name renamed_archive.save()
def process_new_repo(self, result): if result['returncode'] == 0: new_repo = RepoModel.get(url=result['params']['repo_url']) profile = self.profile() profile.repo = new_repo.id profile.save() self.set_repos() self.repoSelector.setCurrentIndex(self.repoSelector.count() - 1) self.repo_added.emit() self.init_repo_stats()
def test_create(qapp, borg_json_output, mocker, qtbot): main = qapp.main_window stdout, stderr = borg_json_output('create') popen_result = mocker.MagicMock(stdout=stdout, stderr=stderr, returncode=0) mocker.patch.object(vorta.borg.borg_thread, 'Popen', return_value=popen_result) qtbot.mouseClick(main.createStartBtn, QtCore.Qt.LeftButton) qtbot.waitUntil(lambda: main.progressText.text().startswith('Backup finished.'), timeout=3000) qtbot.waitUntil(lambda: main.createStartBtn.isEnabled(), timeout=3000) assert EventLogModel.select().count() == 1 assert ArchiveModel.select().count() == 3 assert RepoModel.get(id=1).unique_size == 15520474 assert main.createStartBtn.isEnabled() assert main.archiveTab.archiveTable.rowCount() == 3 assert main.scheduleTab.logTableWidget.rowCount() == 1
def repo_unlink_action(self): profile = self.profile() self.init_repo_stats() msg = QMessageBox() msg.setStandardButtons(QMessageBox.Ok) msg.setParent(self, QtCore.Qt.Sheet) selected_repo_id = self.repoSelector.currentData() selected_repo_index = self.repoSelector.currentIndex() if selected_repo_index > 2: repo = RepoModel.get(id=selected_repo_id) ArchiveModel.delete().where(ArchiveModel.repo_id == repo.id).execute() profile.repo = None profile.save() repo.delete_instance(recursive=True) # This also deletes archives. self.repoSelector.setCurrentIndex(0) self.repoSelector.removeItem(selected_repo_index) msg.setText(self.tr('Repository was Unlinked')) msg.setInformativeText(self.tr('You can always connect it again later.')) msg.exec_() self.repo_changed.emit() self.init_repo_stats()