Fixes #1395 - Adds new `POST /orgs/<orgid>/jobs/retryFailed` API endpoint to retry all failed background jobs for a specific org. - Also adds `POST /orgs/all/jobs/retryFailed` for superadmin to retry all failed background jobs for all orgs
109 lines
2.9 KiB
Python
109 lines
2.9 KiB
Python
"""background jobs tests, named to run after everything else has finished"""
|
|
|
|
import requests
|
|
|
|
import pytest
|
|
|
|
from .conftest import API_PREFIX
|
|
|
|
|
|
job_id = None
|
|
|
|
|
|
def test_background_jobs_list(admin_auth_headers, default_org_id):
|
|
r = requests.get(
|
|
f"{API_PREFIX}/orgs/{default_org_id}/jobs/", headers=admin_auth_headers
|
|
)
|
|
assert r.status_code == 200
|
|
data = r.json()
|
|
items = data["items"]
|
|
|
|
assert items
|
|
assert len(items) == data["total"]
|
|
|
|
for item in items:
|
|
assert item["id"]
|
|
assert item["type"]
|
|
assert item["oid"]
|
|
assert item["success"] in (True, False, None)
|
|
assert item["started"]
|
|
finished = item["finished"]
|
|
assert finished or finished is None
|
|
|
|
global job_id
|
|
job_id = [item for item in items if item["finished"] and item["success"]][0]["id"]
|
|
assert job_id
|
|
|
|
|
|
@pytest.mark.parametrize("job_type", [("create-replica"), ("delete-replica")])
|
|
def test_background_jobs_list_filter_by_type(
|
|
admin_auth_headers, default_org_id, job_type
|
|
):
|
|
r = requests.get(
|
|
f"{API_PREFIX}/orgs/{default_org_id}/jobs/?jobType={job_type}",
|
|
headers=admin_auth_headers,
|
|
)
|
|
assert r.status_code == 200
|
|
data = r.json()
|
|
items = data["items"]
|
|
|
|
assert items
|
|
assert len(items) == data["total"]
|
|
|
|
for item in items:
|
|
assert item["type"] == job_type
|
|
|
|
|
|
def test_background_jobs_list_filter_by_success(admin_auth_headers, default_org_id):
|
|
r = requests.get(
|
|
f"{API_PREFIX}/orgs/{default_org_id}/jobs/?success=True",
|
|
headers=admin_auth_headers,
|
|
)
|
|
assert r.status_code == 200
|
|
data = r.json()
|
|
items = data["items"]
|
|
|
|
assert items
|
|
assert len(items) == data["total"]
|
|
|
|
for item in items:
|
|
assert item["success"]
|
|
|
|
|
|
def test_background_jobs_no_failures(admin_auth_headers, default_org_id):
|
|
r = requests.get(
|
|
f"{API_PREFIX}/orgs/{default_org_id}/jobs/?success=False",
|
|
headers=admin_auth_headers,
|
|
)
|
|
assert r.status_code == 200
|
|
data = r.json()
|
|
assert data["items"] == []
|
|
assert data["total"] == 0
|
|
|
|
|
|
def test_get_background_job(admin_auth_headers, default_org_id):
|
|
r = requests.get(
|
|
f"{API_PREFIX}/orgs/{default_org_id}/jobs/{job_id}", headers=admin_auth_headers
|
|
)
|
|
assert r.status_code == 200
|
|
data = r.json()
|
|
|
|
assert data["id"]
|
|
assert data["type"] in ("create-replica", "delete-replica")
|
|
assert data["oid"] == default_org_id
|
|
assert data["success"]
|
|
assert data["started"]
|
|
assert data["finished"]
|
|
assert data["file_path"]
|
|
assert data["object_type"]
|
|
assert data["object_id"]
|
|
assert data["replica_storage"]
|
|
|
|
|
|
def test_retry_all_failed_bg_jobs_not_superuser(crawler_auth_headers):
|
|
r = requests.post(
|
|
f"{API_PREFIX}/orgs/all/jobs/retryFailed", headers=crawler_auth_headers
|
|
)
|
|
assert r.status_code == 403
|
|
assert r.json()["detail"] == "Not Allowed"
|