Skip to content

Commit

Permalink
update tests after queue refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
Allie Crevier committed Feb 8, 2020
1 parent 070aa8e commit e86b13e
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 28 deletions.
23 changes: 10 additions & 13 deletions tests/test_logic.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,10 +195,10 @@ def test_Controller_on_authenticate_success(homedir, config, mocker, session_mak
"""
user = factory.User()
mock_gui = mocker.MagicMock()
mock_api_job_queue = mocker.patch("securedrop_client.logic.ApiJobQueue")
co = Controller('http://localhost', mock_gui, session_maker, homedir)
# co.api_sync = mocker.MagicMock()
co.api_sync.start = mocker.MagicMock()
co.api_job_queue.start = mocker.MagicMock()
co.update_sources = mocker.MagicMock()
co.session.add(user)
co.session.commit()
Expand All @@ -208,15 +208,12 @@ def test_Controller_on_authenticate_success(homedir, config, mocker, session_mak
co.api.journalist_first_name = user.firstname
co.api.journalist_last_name = user.lastname
co.resume_queues = mocker.MagicMock()
login = mocker.patch.object(co.api_job_queue, 'login')

co.on_authenticate_success(True)

co.api_sync.start.assert_called_once_with(co.api)
co.api_job_queue.start.assert_called_once_with(co.api)
assert co.is_authenticated
assert mock_api_job_queue.called
login.assert_called_with(co.api)
co.resume_queues.assert_called_once_with()


def test_Controller_completed_api_call_without_current_object(
Expand Down Expand Up @@ -512,7 +509,6 @@ def test_Controller_on_update_star_success(homedir, config, mocker, session_make
result = True
co.call_reset = mocker.MagicMock()
co.on_update_star_success(result)
assert mock_gui.clear_error_status.called


def test_Controller_on_update_star_failed(homedir, config, mocker, session_maker):
Expand Down Expand Up @@ -547,7 +543,7 @@ def test_Controller_logout_with_pending_replies(mocker, session_maker, homedir,
'''
co = Controller('http://localhost', mocker.MagicMock(), session_maker, homedir)
co.api_job_queue = mocker.MagicMock()
co.api_job_queue.logout = mocker.MagicMock()
co.api_job_queue.stop = mocker.MagicMock()
co.call_api = mocker.MagicMock()
co.reply_failed = mocker.MagicMock()

Expand All @@ -567,6 +563,7 @@ def test_Controller_logout_with_pending_replies(mocker, session_maker, homedir,
assert draft.send_status == failed_status

co.reply_failed.emit.assert_called_once_with(pending_draft_reply.uuid)
co.api_job_queue.stop.assert_called_once_with()


def test_Controller_logout_with_no_api(homedir, config, mocker, session_maker):
Expand All @@ -578,15 +575,15 @@ def test_Controller_logout_with_no_api(homedir, config, mocker, session_maker):
co = Controller('http://localhost', mock_gui, session_maker, homedir)
co.api = None
co.api_job_queue = mocker.MagicMock()
co.api_job_queue.logout = mocker.MagicMock()
co.api_job_queue.stop = mocker.MagicMock()
co.call_api = mocker.MagicMock()
fail_draft_replies = mocker.patch(
'securedrop_client.storage.mark_all_pending_drafts_as_failed')

co.logout()

co.call_api.assert_not_called()
co.api_job_queue.logout.assert_called_once_with()
co.api_job_queue.stop.assert_called_once_with()
co.gui.logout.assert_called_once_with()
fail_draft_replies.called_once_with(co.session)

Expand All @@ -602,7 +599,7 @@ def test_Controller_logout_success(homedir, config, mocker, session_maker):
co = Controller('http://localhost', mock_gui, session_maker, homedir)
co.api = mocker.MagicMock()
co.api_job_queue = mocker.MagicMock()
co.api_job_queue.logout = mocker.MagicMock()
co.api_job_queue.stop = mocker.MagicMock()
co.call_api = mocker.MagicMock()
info_logger = mocker.patch('securedrop_client.logic.logging.info')
fail_draft_replies = mocker.patch(
Expand All @@ -615,7 +612,7 @@ def test_Controller_logout_success(homedir, config, mocker, session_maker):
co.on_logout_failure)
co.on_logout_success(True)
assert co.api is None
co.api_job_queue.logout.assert_called_once_with()
co.api_job_queue.stop.assert_called_once_with()
co.gui.logout.assert_called_once_with()
msg = 'Client logout successful'
info_logger.assert_called_once_with(msg)
Expand All @@ -633,7 +630,7 @@ def test_Controller_logout_failure(homedir, config, mocker, session_maker):
co = Controller('http://localhost', mock_gui, session_maker, homedir)
co.api = mocker.MagicMock()
co.api_job_queue = mocker.MagicMock()
co.api_job_queue.logout = mocker.MagicMock()
co.api_job_queue.stop = mocker.MagicMock()
co.call_api = mocker.MagicMock()
info_logger = mocker.patch('securedrop_client.logic.logging.info')
fail_draft_replies = mocker.patch(
Expand All @@ -648,7 +645,7 @@ def test_Controller_logout_failure(homedir, config, mocker, session_maker):
co.on_logout_failure)
co.on_logout_failure(Exception())
assert co.api is None
co.api_job_queue.logout.assert_called_once_with()
co.api_job_queue.stop.assert_called_once_with()
co.gui.logout.assert_called_once_with()
msg = 'Client logout failure'
info_logger.assert_called_once_with(msg)
Expand Down
65 changes: 50 additions & 15 deletions tests/test_queue.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ def test_RunnableQueue_does_not_run_jobs_when_not_authed(mocker):
assert queue.api_client is None


def test_ApiJobQueue_enqueue(mocker):
def test_ApiJobQueue_enqueue_when_queues_are_running(mocker):
mock_client = mocker.MagicMock()
mock_session_maker = mocker.MagicMock()

Expand All @@ -231,7 +231,9 @@ def test_ApiJobQueue_enqueue(mocker):
mock_main_queue_add_job = mocker.patch.object(mock_main_queue, 'add_job')
job_queue.main_queue.api_client = 'has a value'
job_queue.download_file_queue.api_client = 'has a value'
mock_start_queues = mocker.patch.object(job_queue, 'start_queues')

job_queue.main_thread.isRunning = mocker.MagicMock(return_value=True)
job_queue.download_file_thread.isRunning = mocker.MagicMock(return_value=True)

dl_job = FileDownloadJob('mock', 'mock', 'mock')
job_queue.enqueue(dl_job)
Expand Down Expand Up @@ -259,16 +261,51 @@ def test_ApiJobQueue_enqueue(mocker):

mock_main_queue_add_job.assert_called_once_with(dummy_job)
assert not mock_download_file_add_job.called
assert mock_start_queues.called


def test_ApiJobQueue_pause_queues(mocker):
def test_ApiJobQueue_enqueue_when_queues_are_not_running(mocker):
mock_client = mocker.MagicMock()
mock_session_maker = mocker.MagicMock()

job_queue = ApiJobQueue(mock_client, mock_session_maker)
job_priority = 2
dummy_job = factory.dummy_job_factory(mocker, 'mock')()
job_queue.JOB_PRIORITIES = {FileDownloadJob: job_priority, type(dummy_job): job_priority}

mock_download_file_queue = mocker.patch.object(job_queue, 'download_file_queue')
mock_main_queue = mocker.patch.object(job_queue, 'main_queue')
mock_download_file_add_job = mocker.patch.object(mock_download_file_queue, 'add_job')
mock_main_queue_add_job = mocker.patch.object(mock_main_queue, 'add_job')
job_queue.main_queue.api_client = 'has a value'
job_queue.download_file_queue.api_client = 'has a value'

job_queue.stop() # queues are already not running, but just in case the code changes one day

dl_job = FileDownloadJob('mock', 'mock', 'mock')
job_queue.enqueue(dl_job)

mock_download_file_add_job.assert_not_called()
mock_main_queue_add_job.assert_not_called()


def test_ApiJobQueue_on_main_queue_paused(mocker):
job_queue = ApiJobQueue(mocker.MagicMock(), mocker.MagicMock())
mocker.patch.object(job_queue, 'paused')
pause_job = PauseQueueJob()
mocker.patch('securedrop_client.queue.PauseQueueJob', return_value=pause_job)

job_queue.on_main_queue_paused()

job_queue.paused.emit.assert_called_once_with()


def test_ApiJobQueue_on_file_download_queue_paused(mocker):
job_queue = ApiJobQueue(mocker.MagicMock(), mocker.MagicMock())
mocker.patch.object(job_queue, 'paused')
pause_job = PauseQueueJob()
mocker.patch('securedrop_client.queue.PauseQueueJob', return_value=pause_job)

job_queue.on_queue_paused()
job_queue.on_file_download_queue_paused()

job_queue.paused.emit.assert_called_once_with()

Expand Down Expand Up @@ -316,18 +353,16 @@ def test_ApiJobQueue_enqueue_no_auth(mocker):
mock_main_queue_add_job = mocker.patch.object(mock_main_queue, 'add_job')
job_queue.main_queue.api_client = None
job_queue.download_file_queue.api_client = None
mock_start_queues = mocker.patch.object(job_queue, 'start_queues')

dummy_job = factory.dummy_job_factory(mocker, 'mock')()
job_queue.JOB_PRIORITIES = {type(dummy_job): 1}
job_queue.enqueue(dummy_job)

assert mock_download_file_add_job.call_count == 0
assert mock_main_queue_add_job.call_count == 0
assert mock_start_queues.call_count == 0


def test_ApiJobQueue_login_if_queues_not_running(mocker):
def test_ApiJobQueue_start_if_queues_not_running(mocker):
'''
Ensure token is passed to the queues and that they are started.
'''
Expand All @@ -344,7 +379,7 @@ def test_ApiJobQueue_login_if_queues_not_running(mocker):
job_queue.main_thread.isRunning = mocker.MagicMock(return_value=False)
job_queue.download_file_thread.isRunning = mocker.MagicMock(return_value=False)

job_queue.login(mock_api)
job_queue.start(mock_api)

assert mock_main_queue.api_client == mock_api
assert mock_download_file_queue.api_client == mock_api
Expand All @@ -353,7 +388,7 @@ def test_ApiJobQueue_login_if_queues_not_running(mocker):
mock_download_file_thread.start.assert_called_once_with()


def test_ApiJobQueue_login_if_queues_running(mocker):
def test_ApiJobQueue_start_if_queues_running(mocker):
'''
Ensure token is passed to the queues that are already started.
'''
Expand All @@ -370,7 +405,7 @@ def test_ApiJobQueue_login_if_queues_running(mocker):
job_queue.main_thread.isRunning = mocker.MagicMock(return_value=True)
job_queue.download_file_thread.isRunning = mocker.MagicMock(return_value=True)

job_queue.login(mock_api)
job_queue.start(mock_api)

assert mock_main_queue.api_client == mock_api
assert mock_download_file_queue.api_client == mock_api
Expand All @@ -379,21 +414,21 @@ def test_ApiJobQueue_login_if_queues_running(mocker):
assert not mock_download_file_thread.start.called


def test_ApiJobQueue_logout_stops_queue_threads(mocker):
def test_ApiJobQueue_stop_stops_queue_threads(mocker):
job_queue = ApiJobQueue(mocker.MagicMock(), mocker.MagicMock())

job_queue.logout()
job_queue.stop()

assert not job_queue.main_thread.isRunning()
assert not job_queue.download_file_thread.isRunning()


def test_ApiJobQueue_logout_results_in_queue_threads_not_running(mocker):
def test_ApiJobQueue_stop_results_in_queue_threads_not_running(mocker):
job_queue = ApiJobQueue(mocker.MagicMock(), mocker.MagicMock())
job_queue.main_thread = mocker.MagicMock()
job_queue.download_file_thread = mocker.MagicMock()

job_queue.logout()
job_queue.stop()

job_queue.main_thread.quit.assert_called_once_with()
job_queue.download_file_thread.quit.assert_called_once_with()

0 comments on commit e86b13e

Please sign in to comment.