from unittest import mock from freezegun import freeze_time from src import logic tasks = [ { 'source_url': 'https://1', 'destination_url': 's3://1', }, { 'source_url': 'https://2', 'destination_url': 's3://2', } ] @freeze_time('2023-11-11') @mock.patch.object(logic, 'subprocess') @mock.patch.object(logic, 'time') def test_parallel_download_curl_to_s3(time_mock, subprocess_mock): time_mock.perf_counter.return_value.__sub__.return_value = 11.1234 result = logic.parallel_download_curl_to_s3( tasks=tasks, n_threads=10, ) assert result == { 'duration': '11.12', 'n_tasks': 2, 'n_threads': 10, 'processing_started_at': '2023-11-11T00:00:00', 'return_code': subprocess_mock.run.return_value.returncode } assert subprocess_mock.run.call_args_list == [ mock.call( args=['/usr/bin/xargs', '--delimiter', '\\n', '--max-procs=10', '-i', 'bash', '-c', '{}', ';'], input=bytearray(b'./curl-to-s3.sh "https://1" "s3://1"\n./curl-to-s3.sh "https://2" "s3://2"')) # noqa:E501 ] def test_generate_bash_commands(): result = logic.generate_bash_commands(tasks=tasks) assert result == [ './curl-to-s3.sh "https://1" "s3://1"', './curl-to-s3.sh "https://2" "s3://2"' ]