Example #1
0
def test_ReplyDownloadJob_happiest_path(mocker, homedir, session,
                                        session_maker):
    """
    Test when a reply successfully downloads and decrypts. Use the `homedir` fixture to get a GPG
    keyring.
    """
    reply = factory.Reply(source=factory.Source(),
                          is_downloaded=False,
                          is_decrypted=None,
                          content=None)
    session.add(reply)
    session.commit()
    gpg = GpgHelper(homedir, session_maker, is_qubes=False)
    job = ReplyDownloadJob(reply.uuid, homedir, gpg)
    mocker.patch.object(job.gpg, 'decrypt_submission_or_reply')
    api_client = mocker.MagicMock()
    api_client.default_request_timeout = mocker.MagicMock()
    data_dir = os.path.join(homedir, 'data')
    api_client.download_reply = mocker.MagicMock(return_value=('', data_dir))

    job.call_api(api_client, session)

    assert reply.content is not None
    assert reply.is_downloaded is True
    assert reply.is_decrypted is True
Example #2
0
def test_ReplyDownloadJob_no_download_or_decrypt(mocker, homedir, session,
                                                 session_maker):
    """
    Test that an already-downloaded reply successfully decrypts.
    """
    reply_is_decrypted_false = factory.Reply(source=factory.Source(),
                                             is_downloaded=True,
                                             is_decrypted=False,
                                             content=None)
    reply_is_decrypted_none = factory.Reply(source=factory.Source(),
                                            is_downloaded=True,
                                            is_decrypted=None,
                                            content=None)
    session.add(reply_is_decrypted_false)
    session.add(reply_is_decrypted_none)
    session.commit()
    gpg = GpgHelper(homedir, session_maker, is_qubes=False)
    job_1 = ReplyDownloadJob(reply_is_decrypted_false.uuid, homedir, gpg)
    job_2 = ReplyDownloadJob(reply_is_decrypted_none.uuid, homedir, gpg)
    mocker.patch.object(job_1.gpg, 'decrypt_submission_or_reply')
    mocker.patch.object(job_2.gpg, 'decrypt_submission_or_reply')
    api_client = mocker.MagicMock()
    api_client.default_request_timeout = mocker.MagicMock()
    path = os.path.join(homedir, 'data')
    api_client.download_submission = mocker.MagicMock(return_value=('', path))

    job_1.call_api(api_client, session)
    job_2.call_api(api_client, session)

    assert reply_is_decrypted_false.content is not None
    assert reply_is_decrypted_false.is_downloaded is True
    assert reply_is_decrypted_false.is_decrypted is True
    assert reply_is_decrypted_none.content is not None
    assert reply_is_decrypted_none.is_downloaded is True
    assert reply_is_decrypted_none.is_decrypted is True
Example #3
0
    def _submit_download_job(self, object_type: Union[Type[db.Reply],
                                                      Type[db.Message],
                                                      Type[db.File]],
                             uuid: str) -> None:

        if object_type == db.Reply:
            job = ReplyDownloadJob(
                uuid, self.data_dir, self.gpg
            )  # type: Union[ReplyDownloadJob, MessageDownloadJob, FileDownloadJob]
            job.success_signal.connect(self.on_reply_download_success,
                                       type=Qt.QueuedConnection)
            job.failure_signal.connect(self.on_reply_download_failure,
                                       type=Qt.QueuedConnection)
        elif object_type == db.Message:
            job = MessageDownloadJob(uuid, self.data_dir, self.gpg)
            job.success_signal.connect(self.on_message_download_success,
                                       type=Qt.QueuedConnection)
            job.failure_signal.connect(self.on_message_download_failure,
                                       type=Qt.QueuedConnection)
        elif object_type == db.File:
            job = FileDownloadJob(uuid, self.data_dir, self.gpg)
            job.success_signal.connect(self.on_file_download_success,
                                       type=Qt.QueuedConnection)
            job.failure_signal.connect(self.on_file_download_failure,
                                       type=Qt.QueuedConnection)

        self.api_job_queue.enqueue(job)
Example #4
0
def test_ReplyDownloadJob_message_already_decrypted(mocker, homedir, session,
                                                    session_maker):
    """
    Test that call_api just returns uuid if already decrypted.
    """
    reply = factory.Reply(source=factory.Source(),
                          is_downloaded=True,
                          is_decrypted=True)
    session.add(reply)
    session.commit()
    gpg = GpgHelper(homedir, session_maker, is_qubes=False)
    job = ReplyDownloadJob(reply.uuid, homedir, gpg)
    decrypt_fn = mocker.patch.object(job.gpg, 'decrypt_submission_or_reply')
    api_client = mocker.MagicMock()
    download_fn = mocker.patch.object(api_client, 'download_reply')

    return_uuid = job.call_api(api_client, session)

    assert reply.uuid == return_uuid
    decrypt_fn.assert_not_called()
    download_fn.assert_not_called()