Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/api/views/test_origin_save.py
Show First 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | def test_invalid_origin_url(api_client): | ||||
) | ) | ||||
check_api_get_responses(api_client, url, status_code=400) | check_api_get_responses(api_client, url, status_code=400) | ||||
def check_created_save_request_status( | def check_created_save_request_status( | ||||
api_client, | api_client, | ||||
mocker, | mocker, | ||||
origin_url, | origin_url, | ||||
scheduler_task_status, | |||||
expected_request_status, | expected_request_status, | ||||
scheduler_task_status=None, | |||||
scheduler_task_run_status=None, | |||||
expected_task_status=None, | expected_task_status=None, | ||||
visit_date=None, | visit_date=None, | ||||
): | ): | ||||
mock_scheduler = mocker.patch("swh.web.common.origin_save.scheduler") | mock_scheduler = mocker.patch("swh.web.common.origin_save.scheduler") | ||||
if not scheduler_task_status: | if scheduler_task_status is None: | ||||
mock_scheduler.get_tasks.return_value = [] | mock_scheduler.get_tasks.return_value = [] | ||||
else: | else: | ||||
mock_scheduler.get_tasks.return_value = [ | mock_scheduler.get_tasks.return_value = [ | ||||
{ | { | ||||
"priority": "high", | "priority": "high", | ||||
"policy": "oneshot", | "policy": "oneshot", | ||||
"type": "load-git", | "type": "load-git", | ||||
"arguments": {"kwargs": {"repo_url": origin_url}, "args": []}, | "arguments": {"kwargs": {"repo_url": origin_url}, "args": []}, | ||||
"status": scheduler_task_status, | "status": scheduler_task_status, | ||||
"id": 1, | "id": 1, | ||||
} | } | ||||
] | ] | ||||
if scheduler_task_run_status is None: | |||||
mock_scheduler.get_task_runs.return_value = [] | |||||
else: | |||||
mock_scheduler.get_task_runs.return_value = [ | |||||
{ | |||||
"backend_id": "f00c712c-e820-41ce-a07c-9bf8df914205", | |||||
"ended": datetime.now(tz=timezone.utc) + timedelta(minutes=5), | |||||
"id": 1, | |||||
"metadata": {}, | |||||
"scheduled": datetime.now(tz=timezone.utc), | |||||
"started": None, | |||||
"status": scheduler_task_run_status, | |||||
"task": 1, | |||||
} | |||||
] | |||||
mock_scheduler.create_tasks.return_value = [ | mock_scheduler.create_tasks.return_value = [ | ||||
{ | { | ||||
"priority": "high", | "priority": "high", | ||||
"policy": "oneshot", | "policy": "oneshot", | ||||
"type": "load-git", | "type": "load-git", | ||||
"arguments": {"kwargs": {"repo_url": origin_url}, "args": []}, | "arguments": {"kwargs": {"repo_url": origin_url}, "args": []}, | ||||
"status": "next_run_not_scheduled", | "status": "next_run_not_scheduled", | ||||
"id": 1, | "id": 1, | ||||
Show All 19 Lines | |||||
def check_save_request_status( | def check_save_request_status( | ||||
api_client, | api_client, | ||||
mocker, | mocker, | ||||
origin_url, | origin_url, | ||||
expected_request_status, | expected_request_status, | ||||
expected_task_status, | expected_task_status, | ||||
scheduler_task_status="next_run_not_scheduled", | scheduler_task_status="next_run_not_scheduled", | ||||
scheduler_task_run_status=None, | |||||
visit_date=None, | visit_date=None, | ||||
): | ): | ||||
mock_scheduler = mocker.patch("swh.web.common.origin_save.scheduler") | mock_scheduler = mocker.patch("swh.web.common.origin_save.scheduler") | ||||
mock_scheduler.get_tasks.return_value = [ | mock_scheduler.get_tasks.return_value = [ | ||||
{ | { | ||||
"priority": "high", | "priority": "high", | ||||
"policy": "oneshot", | "policy": "oneshot", | ||||
"type": "load-git", | "type": "load-git", | ||||
"arguments": {"kwargs": {"repo_url": origin_url}, "args": []}, | "arguments": {"kwargs": {"repo_url": origin_url}, "args": []}, | ||||
"status": scheduler_task_status, | "status": scheduler_task_status, | ||||
"id": 1, | "id": 1, | ||||
} | } | ||||
] | ] | ||||
if scheduler_task_run_status is None: | |||||
mock_scheduler.get_task_runs.return_value = [] | |||||
else: | |||||
mock_scheduler.get_task_runs.return_value = [ | |||||
{ | |||||
"backend_id": "f00c712c-e820-41ce-a07c-9bf8df914205", | |||||
"ended": datetime.now(tz=timezone.utc) + timedelta(minutes=5), | |||||
"id": 1, | |||||
"metadata": {}, | |||||
"scheduled": datetime.now(tz=timezone.utc), | |||||
"started": None, | |||||
"status": scheduler_task_run_status, | |||||
"task": 1, | |||||
} | |||||
] | |||||
url = reverse( | url = reverse( | ||||
"api-1-save-origin", url_args={"visit_type": "git", "origin_url": origin_url} | "api-1-save-origin", url_args={"visit_type": "git", "origin_url": origin_url} | ||||
) | ) | ||||
mock_visit_date = mocker.patch( | mock_visit_date = mocker.patch( | ||||
("swh.web.common.origin_save." "_get_visit_info_for_save_request") | ("swh.web.common.origin_save." "_get_visit_info_for_save_request") | ||||
) | ) | ||||
mock_visit_date.return_value = (visit_date, None) | mock_visit_date.return_value = (visit_date, None) | ||||
Show All 9 Lines | ): | ||||
response = check_api_get_responses(api_client, url, status_code=200) | response = check_api_get_responses(api_client, url, status_code=200) | ||||
save_request_data = response.data[0] | save_request_data = response.data[0] | ||||
assert save_request_data["save_task_status"] == expected_task_status | assert save_request_data["save_task_status"] == expected_task_status | ||||
def test_save_request_rejected(api_client, mocker): | def test_save_request_rejected(api_client, mocker): | ||||
origin_url = "https://github.com/user/illegal_repo" | origin_url = "https://github.com/user/illegal_repo" | ||||
check_created_save_request_status( | check_created_save_request_status( | ||||
api_client, mocker, origin_url, None, SAVE_REQUEST_REJECTED | api_client, mocker, origin_url, expected_request_status=SAVE_REQUEST_REJECTED, | ||||
) | ) | ||||
check_save_request_status( | check_save_request_status( | ||||
api_client, mocker, origin_url, SAVE_REQUEST_REJECTED, SAVE_TASK_NOT_CREATED | api_client, | ||||
mocker, | |||||
origin_url, | |||||
expected_request_status=SAVE_REQUEST_REJECTED, | |||||
expected_task_status=SAVE_TASK_NOT_CREATED, | |||||
) | ) | ||||
def test_save_request_pending(api_client, mocker): | def test_save_request_pending(api_client, mocker): | ||||
origin_url = "https://unkwownforge.com/user/repo" | origin_url = "https://unkwownforge.com/user/repo" | ||||
check_created_save_request_status( | check_created_save_request_status( | ||||
api_client, | api_client, | ||||
mocker, | mocker, | ||||
origin_url, | origin_url, | ||||
None, | expected_request_status=SAVE_REQUEST_PENDING, | ||||
SAVE_REQUEST_PENDING, | expected_task_status=SAVE_TASK_NOT_CREATED, | ||||
SAVE_TASK_NOT_CREATED, | |||||
) | ) | ||||
check_save_request_status( | check_save_request_status( | ||||
api_client, mocker, origin_url, SAVE_REQUEST_PENDING, SAVE_TASK_NOT_CREATED | api_client, | ||||
mocker, | |||||
origin_url, | |||||
expected_request_status=SAVE_REQUEST_PENDING, | |||||
expected_task_status=SAVE_TASK_NOT_CREATED, | |||||
) | ) | ||||
def test_save_request_succeed(api_client, mocker): | def test_save_request_succeed(api_client, mocker): | ||||
origin_url = "https://github.com/Kitware/CMake" | origin_url = "https://github.com/Kitware/CMake" | ||||
check_created_save_request_status( | check_created_save_request_status( | ||||
api_client, | api_client, | ||||
mocker, | mocker, | ||||
origin_url, | origin_url, | ||||
None, | expected_request_status=SAVE_REQUEST_ACCEPTED, | ||||
SAVE_REQUEST_ACCEPTED, | expected_task_status=SAVE_TASK_NOT_YET_SCHEDULED, | ||||
SAVE_TASK_NOT_YET_SCHEDULED, | |||||
) | ) | ||||
check_save_request_status( | check_save_request_status( | ||||
api_client, | api_client, | ||||
mocker, | mocker, | ||||
origin_url, | origin_url, | ||||
SAVE_REQUEST_ACCEPTED, | expected_request_status=SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_SCHEDULED, | expected_task_status=SAVE_TASK_SCHEDULED, | ||||
scheduler_task_status="next_run_scheduled", | scheduler_task_status="next_run_scheduled", | ||||
scheduler_task_run_status="scheduled", | |||||
) | ) | ||||
check_save_request_status( | check_save_request_status( | ||||
api_client, | api_client, | ||||
mocker, | mocker, | ||||
origin_url, | origin_url, | ||||
SAVE_REQUEST_ACCEPTED, | expected_request_status=SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_SUCCEEDED, | expected_task_status=SAVE_TASK_SUCCEEDED, | ||||
scheduler_task_status="completed", | scheduler_task_status="completed", | ||||
scheduler_task_run_status="eventful", | |||||
visit_date=None, | visit_date=None, | ||||
) | ) | ||||
visit_date = datetime.now(tz=timezone.utc) + timedelta(hours=1) | visit_date = datetime.now(tz=timezone.utc) + timedelta(hours=1) | ||||
check_save_request_status( | check_save_request_status( | ||||
api_client, | api_client, | ||||
mocker, | mocker, | ||||
origin_url, | origin_url, | ||||
SAVE_REQUEST_ACCEPTED, | expected_request_status=SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_SUCCEEDED, | expected_task_status=SAVE_TASK_SUCCEEDED, | ||||
scheduler_task_status="completed", | scheduler_task_status="completed", | ||||
scheduler_task_run_status="eventful", | |||||
visit_date=visit_date, | visit_date=visit_date, | ||||
) | ) | ||||
def test_save_request_failed(api_client, mocker): | def test_save_request_failed(api_client, mocker): | ||||
origin_url = "https://gitlab.com/inkscape/inkscape" | origin_url = "https://gitlab.com/inkscape/inkscape" | ||||
check_created_save_request_status( | check_created_save_request_status( | ||||
api_client, | api_client, | ||||
mocker, | mocker, | ||||
origin_url, | origin_url, | ||||
None, | expected_request_status=SAVE_REQUEST_ACCEPTED, | ||||
SAVE_REQUEST_ACCEPTED, | expected_task_status=SAVE_TASK_NOT_YET_SCHEDULED, | ||||
SAVE_TASK_NOT_YET_SCHEDULED, | |||||
) | ) | ||||
check_save_request_status( | check_save_request_status( | ||||
api_client, | api_client, | ||||
mocker, | mocker, | ||||
origin_url, | origin_url, | ||||
SAVE_REQUEST_ACCEPTED, | expected_request_status=SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_SCHEDULED, | expected_task_status=SAVE_TASK_SCHEDULED, | ||||
scheduler_task_status="next_run_scheduled", | scheduler_task_status="next_run_scheduled", | ||||
scheduler_task_run_status="scheduled", | |||||
) | ) | ||||
check_save_request_status( | check_save_request_status( | ||||
api_client, | api_client, | ||||
mocker, | mocker, | ||||
origin_url, | origin_url, | ||||
SAVE_REQUEST_ACCEPTED, | expected_request_status=SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_FAILED, | expected_task_status=SAVE_TASK_FAILED, | ||||
scheduler_task_status="disabled", | scheduler_task_status="disabled", | ||||
scheduler_task_run_status="failed", | |||||
) | ) | ||||
def test_create_save_request_only_when_needed(api_client, mocker): | def test_create_save_request_only_when_needed(api_client, mocker): | ||||
origin_url = "https://github.com/webpack/webpack" | origin_url = "https://github.com/webpack/webpack" | ||||
SaveOriginRequest.objects.create( | SaveOriginRequest.objects.create( | ||||
visit_type="git", | visit_type="git", | ||||
origin_url=origin_url, | origin_url=origin_url, | ||||
status=SAVE_REQUEST_ACCEPTED, | status=SAVE_REQUEST_ACCEPTED, | ||||
loading_task_id=56, | loading_task_id=56, | ||||
) | ) | ||||
check_created_save_request_status( | check_created_save_request_status( | ||||
api_client, | api_client, | ||||
mocker, | mocker, | ||||
origin_url, | origin_url, | ||||
"next_run_not_scheduled", | scheduler_task_status="next_run_not_scheduled", | ||||
SAVE_REQUEST_ACCEPTED, | expected_request_status=SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_NOT_YET_SCHEDULED, | expected_task_status=SAVE_TASK_NOT_YET_SCHEDULED, | ||||
) | ) | ||||
sors = list( | sors = list( | ||||
SaveOriginRequest.objects.filter(visit_type="git", origin_url=origin_url) | SaveOriginRequest.objects.filter(visit_type="git", origin_url=origin_url) | ||||
) | ) | ||||
assert len(sors) == 1 | assert len(sors) == 1 | ||||
check_created_save_request_status( | check_created_save_request_status( | ||||
api_client, | api_client, | ||||
mocker, | mocker, | ||||
origin_url, | origin_url, | ||||
"next_run_scheduled", | scheduler_task_status="next_run_scheduled", | ||||
SAVE_REQUEST_ACCEPTED, | scheduler_task_run_status="scheduled", | ||||
SAVE_TASK_SCHEDULED, | expected_request_status=SAVE_REQUEST_ACCEPTED, | ||||
expected_task_status=SAVE_TASK_SCHEDULED, | |||||
) | ) | ||||
sors = list( | sors = list( | ||||
SaveOriginRequest.objects.filter(visit_type="git", origin_url=origin_url) | SaveOriginRequest.objects.filter(visit_type="git", origin_url=origin_url) | ||||
) | ) | ||||
assert len(sors) == 1 | assert len(sors) == 1 | ||||
visit_date = datetime.now(tz=timezone.utc) + timedelta(hours=1) | visit_date = datetime.now(tz=timezone.utc) + timedelta(hours=1) | ||||
check_created_save_request_status( | check_created_save_request_status( | ||||
api_client, | api_client, | ||||
mocker, | mocker, | ||||
origin_url, | origin_url, | ||||
"completed", | scheduler_task_status="completed", | ||||
SAVE_REQUEST_ACCEPTED, | expected_request_status=SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_NOT_YET_SCHEDULED, | expected_task_status=SAVE_TASK_NOT_YET_SCHEDULED, | ||||
visit_date=visit_date, | visit_date=visit_date, | ||||
) | ) | ||||
sors = list( | sors = list( | ||||
SaveOriginRequest.objects.filter(visit_type="git", origin_url=origin_url) | SaveOriginRequest.objects.filter(visit_type="git", origin_url=origin_url) | ||||
) | ) | ||||
# check_api_post_responses sends two POST requests to check YAML and JSON response | # check_api_post_responses sends two POST requests to check YAML and JSON response | ||||
assert len(sors) == 3 | assert len(sors) == 3 | ||||
check_created_save_request_status( | check_created_save_request_status( | ||||
api_client, | api_client, | ||||
mocker, | mocker, | ||||
origin_url, | origin_url, | ||||
"disabled", | scheduler_task_status="disabled", | ||||
SAVE_REQUEST_ACCEPTED, | expected_request_status=SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_NOT_YET_SCHEDULED, | expected_task_status=SAVE_TASK_NOT_YET_SCHEDULED, | ||||
) | ) | ||||
sors = list( | sors = list( | ||||
SaveOriginRequest.objects.filter(visit_type="git", origin_url=origin_url) | SaveOriginRequest.objects.filter(visit_type="git", origin_url=origin_url) | ||||
) | ) | ||||
assert len(sors) == 5 | assert len(sors) == 5 | ||||
def test_get_save_requests_unknown_origin(api_client): | def test_get_save_requests_unknown_origin(api_client): | ||||
Show All 13 Lines |