Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/common/test_origin_save.py
Show All 40 Lines | |||||
@pytest.mark.django_db | @pytest.mark.django_db | ||||
def test_get_save_origin_archived_task_info(mocker): | def test_get_save_origin_archived_task_info(mocker): | ||||
_get_save_origin_task_info_test(mocker, task_archived=True) | _get_save_origin_task_info_test(mocker, task_archived=True) | ||||
@pytest.mark.django_db | @pytest.mark.django_db | ||||
def test_get_save_origin_task_info_with_es(mocker): | def test_get_save_origin_task_full_info_with_es(mocker): | ||||
_get_save_origin_task_info_test(mocker, es_available=True) | _get_save_origin_task_info_test(mocker, es_available=True) | ||||
@pytest.mark.django_db | @pytest.mark.django_db | ||||
def test_get_save_origin_task_info_with_es(mocker): | |||||
_get_save_origin_task_info_test(mocker, es_available=True, full_info=False) | |||||
@pytest.mark.django_db | |||||
def test_get_save_origin_task_info_without_es(mocker): | def test_get_save_origin_task_info_without_es(mocker): | ||||
_get_save_origin_task_info_test(mocker, es_available=False) | _get_save_origin_task_info_test(mocker, es_available=False) | ||||
def _mock_scheduler(mocker, task_status="succeed", task_archived=False): | def _mock_scheduler(mocker, task_status="succeed", task_archived=False): | ||||
mock_scheduler = mocker.patch("swh.web.common.origin_save.scheduler") | mock_scheduler = mocker.patch("swh.web.common.origin_save.scheduler") | ||||
task = ( | task = ( | ||||
{ | { | ||||
"arguments": {"args": [], "kwargs": {"repo_url": _origin_url},}, | "arguments": {"args": [], "kwargs": {"repo_url": _origin_url},}, | ||||
"current_interval": timedelta(days=64), | "current_interval": timedelta(days=64), | ||||
"id": _task_id, | "id": _task_id, | ||||
"next_run": datetime.now(tz=timezone.utc) + timedelta(days=64), | "next_run": datetime.now(tz=timezone.utc) + timedelta(days=64), | ||||
"policy": "oneshot", | "policy": "oneshot", | ||||
"priority": "high", | "priority": "high", | ||||
"retries_left": 0, | "retries_left": 0, | ||||
"status": "disabled", | "status": "disabled", | ||||
"type": "load-git", | "type": "load-git", | ||||
} | } | ||||
if not task_archived | if not task_archived | ||||
else None | else None | ||||
) | ) | ||||
mock_scheduler.get_tasks.return_value = [task] | mock_scheduler.get_tasks.return_value = [dict(task) if task else None] | ||||
task_run = { | task_run = { | ||||
"backend_id": "f00c712c-e820-41ce-a07c-9bf8df914205", | "backend_id": "f00c712c-e820-41ce-a07c-9bf8df914205", | ||||
"ended": datetime.now(tz=timezone.utc) + timedelta(minutes=5), | "ended": datetime.now(tz=timezone.utc) + timedelta(minutes=5), | ||||
"id": 654270631, | "id": 654270631, | ||||
"metadata": {}, | "metadata": {}, | ||||
"scheduled": datetime.now(tz=timezone.utc), | "scheduled": datetime.now(tz=timezone.utc), | ||||
"started": None, | "started": None, | ||||
"status": task_status, | "status": task_status, | ||||
"task": _task_id, | "task": _task_id, | ||||
} | } | ||||
mock_scheduler.get_task_runs.return_value = [task_run] | mock_scheduler.get_task_runs.return_value = [dict(task_run)] | ||||
return task, task_run | return task, task_run | ||||
def _get_save_origin_task_info_test(mocker, task_archived=False, es_available=True): | def _get_save_origin_task_info_test( | ||||
mocker, task_archived=False, es_available=True, full_info=True | |||||
): | |||||
swh_web_config = get_config() | swh_web_config = get_config() | ||||
if es_available: | if es_available: | ||||
swh_web_config.update({"es_workers_index_url": _es_workers_index_url}) | swh_web_config.update({"es_workers_index_url": _es_workers_index_url}) | ||||
else: | else: | ||||
swh_web_config.update({"es_workers_index_url": ""}) | swh_web_config.update({"es_workers_index_url": ""}) | ||||
sor = SaveOriginRequest.objects.create( | sor = SaveOriginRequest.objects.create( | ||||
request_date=datetime.now(tz=timezone.utc), | request_date=datetime.now(tz=timezone.utc), | ||||
visit_type=_visit_type, | visit_type=_visit_type, | ||||
origin_url="https://gitlab.com/inkscape/inkscape", | origin_url="https://gitlab.com/inkscape/inkscape", | ||||
status="accepted", | status="accepted", | ||||
visit_date=datetime.now(tz=timezone.utc) + timedelta(hours=1), | visit_date=datetime.now(tz=timezone.utc) + timedelta(hours=1), | ||||
loading_task_id=_task_id, | loading_task_id=_task_id, | ||||
) | ) | ||||
task, task_run = _mock_scheduler(mocker, task_archived=task_archived) | task, task_run = _mock_scheduler(mocker, task_archived=task_archived) | ||||
es_response = requests.post("%s/_search" % _es_workers_index_url).json() | es_response = requests.post("%s/_search" % _es_workers_index_url).json() | ||||
task_exec_data = es_response["hits"]["hits"][-1]["_source"] | task_exec_data = es_response["hits"]["hits"][-1]["_source"] | ||||
sor_task_info = get_save_origin_task_info(sor.id) | sor_task_info = get_save_origin_task_info(sor.id, full_info=full_info) | ||||
expected_result = ( | expected_result = ( | ||||
{ | { | ||||
"type": task["type"], | "type": task["type"], | ||||
"arguments": task["arguments"], | "arguments": task["arguments"], | ||||
"id": task["id"], | "id": task["id"], | ||||
"backend_id": task_run["backend_id"], | "backend_id": task_run["backend_id"], | ||||
"scheduled": task_run["scheduled"], | "scheduled": task_run["scheduled"], | ||||
"started": task_run["started"], | |||||
"ended": task_run["ended"], | "ended": task_run["ended"], | ||||
"status": task_run["status"], | "status": task_run["status"], | ||||
} | } | ||||
if not task_archived | if not task_archived | ||||
else {} | else {} | ||||
) | ) | ||||
if es_available and not task_archived: | if es_available and not task_archived: | ||||
expected_result.update( | expected_result.update( | ||||
{ | { | ||||
"message": task_exec_data["message"], | "message": task_exec_data["message"], | ||||
"name": task_exec_data["swh_task_name"], | "name": task_exec_data["swh_task_name"], | ||||
"worker": task_exec_data["hostname"], | "worker": task_exec_data["hostname"], | ||||
} | } | ||||
) | ) | ||||
if not full_info: | |||||
expected_result.pop("id", None) | |||||
expected_result.pop("backend_id", None) | |||||
expected_result.pop("worker", None) | |||||
if "message" in expected_result: | |||||
message = "" | |||||
message_lines = expected_result["message"].split("\n") | |||||
for line in message_lines: | |||||
if line.startswith("Traceback"): | |||||
break | |||||
message += f"{line}\n" | |||||
message += message_lines[-1] | |||||
expected_result["message"] = message | |||||
assert sor_task_info == expected_result | assert sor_task_info == expected_result | ||||
@pytest.mark.django_db | @pytest.mark.django_db | ||||
def test_get_save_origin_requests_find_visit_date(mocker): | def test_get_save_origin_requests_find_visit_date(mocker): | ||||
# create a save request | # create a save request | ||||
SaveOriginRequest.objects.create( | SaveOriginRequest.objects.create( | ||||
request_date=datetime.now(tz=timezone.utc), | request_date=datetime.now(tz=timezone.utc), | ||||
▲ Show 20 Lines • Show All 58 Lines • Show Last 20 Lines |