86 lines
2.2 KiB
Python
86 lines
2.2 KiB
Python
"""Mosaic download outcomes for scans.csv (RunStats / MosaicAttempt)."""
|
|
|
|
from pathlib import Path
|
|
from unittest.mock import MagicMock
|
|
|
|
from spruce.download_result import (
|
|
DownloadResult,
|
|
PERMANENT_MISSING,
|
|
TRANSIENT,
|
|
UNKNOWN,
|
|
)
|
|
from spruce.orchestrator import _download_mosaic
|
|
|
|
_MACHINE = {"label": "M", "option_value": "v", "machine_id": "1"}
|
|
_CONFIG: dict = {
|
|
"write_exif": False,
|
|
"timeout": 10,
|
|
"request_delay": 0.0,
|
|
"machine_metadata": {},
|
|
}
|
|
|
|
|
|
def test_download_mosaic_404_permanent_class():
|
|
sess = MagicMock()
|
|
url = "http://img/RootView_Database/9/mosaic.jpg"
|
|
sess.mosaic_url.return_value = url
|
|
sess.download_file.return_value = DownloadResult(0, 404, "404", PERMANENT_MISSING)
|
|
|
|
progress = MagicMock()
|
|
progress.is_done.return_value = False
|
|
mpath = Path("/tmp/mosaic_404.jpg")
|
|
|
|
out = _download_mosaic(
|
|
sess, {}, 9, mpath, progress, _MACHINE, _CONFIG, dry_run=False
|
|
)
|
|
assert out.csv_status == "failed"
|
|
assert out.error_class == PERMANENT_MISSING
|
|
assert out.error_code == "404"
|
|
progress.mark_done.assert_not_called()
|
|
|
|
|
|
def test_download_mosaic_503_transient_class():
|
|
sess = MagicMock()
|
|
sess.mosaic_url.return_value = "http://x/m.jpg"
|
|
sess.download_file.return_value = DownloadResult(0, 503, "err", TRANSIENT)
|
|
|
|
progress = MagicMock()
|
|
progress.is_done.return_value = False
|
|
|
|
out = _download_mosaic(
|
|
sess,
|
|
{},
|
|
1,
|
|
Path("/tmp/m.jpg"),
|
|
progress,
|
|
_MACHINE,
|
|
_CONFIG,
|
|
dry_run=False,
|
|
)
|
|
assert out.error_class == TRANSIENT
|
|
assert out.error_code == "503"
|
|
|
|
|
|
def test_download_mosaic_empty_body_unknown():
|
|
sess = MagicMock()
|
|
sess.mosaic_url.return_value = "http://x/m.jpg"
|
|
sess.download_file.return_value = DownloadResult(
|
|
0, 200, "0 bytes in response body", UNKNOWN
|
|
)
|
|
|
|
progress = MagicMock()
|
|
progress.is_done.return_value = False
|
|
|
|
out = _download_mosaic(
|
|
sess,
|
|
{},
|
|
1,
|
|
Path("/tmp/m.jpg"),
|
|
progress,
|
|
_MACHINE,
|
|
_CONFIG,
|
|
dry_run=False,
|
|
)
|
|
assert out.error_class == UNKNOWN
|
|
assert "bytes" in out.error or out.error
|