from mock import patch, Mock from app import storage from data import model from workers.buildlogsarchiver.buildlogsarchiver import ArchiveBuildLogsWorker from test.fixtures import * def test_logarchiving(app): worker = ArchiveBuildLogsWorker() logs_mock = Mock() logs_mock.get_log_entries = Mock(return_value=(1, [{'some': 'entry'}])) # Add a build that is ready for archiving. repo = model.repository.get_repository('devtable', 'simple') access_token = model.token.create_access_token(repo, 'admin') build = model.build.create_repository_build(repo, access_token, {}, None, 'foo') build.phase = 'error' build.save() with patch('workers.buildlogsarchiver.buildlogsarchiver.build_logs', logs_mock): worker._archive_redis_buildlogs() # Ensure the get method was called. logs_mock.get_log_entries.assert_called_once() logs_mock.expire_status.assert_called_once() logs_mock.delete_log_entries.assert_called_once() # Ensure the build was marked as archived. assert model.build.get_repository_build(build.uuid).logs_archived # Ensure a file was written to storage. assert storage.exists(['local_us'], 'logarchive/%s' % build.uuid)