Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/package/crates/tests/test_crates.py
# Copyright (C) 2022 The Software Heritage developers | # Copyright (C) 2022 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
import pytest | |||||
from swh.loader.package.crates.loader import CratesLoader | from swh.loader.package.crates.loader import CratesLoader | ||||
from swh.loader.tests import assert_last_visit_matches, check_snapshot, get_stats | from swh.loader.tests import assert_last_visit_matches, check_snapshot, get_stats | ||||
from swh.model.hashutil import hash_to_bytes | from swh.model.hashutil import hash_to_bytes | ||||
from swh.model.model import ( | from swh.model.model import ( | ||||
ObjectType, | ObjectType, | ||||
Person, | Person, | ||||
Release, | Release, | ||||
Snapshot, | Snapshot, | ||||
SnapshotBranch, | SnapshotBranch, | ||||
TargetType, | TargetType, | ||||
TimestampWithTimezone, | TimestampWithTimezone, | ||||
) | ) | ||||
CRATES_EXTRA = [ | CRATES_EXTRA = [ | ||||
{ | { | ||||
"name": "hg-core", | "url": "https://crates.io/api/v1/crates/hg-core", | ||||
"version": "0.0.1", | "artifacts": [ | ||||
{ | |||||
"checksums": { | |||||
"sha256": "48a45b46c2a8c38348adb1205b13c3c5eb0174e0c0fec52cc88e9fb1de14c54d", # noqa: B950 | |||||
}, | |||||
"filename": "hg-core-0.0.1.crate", | |||||
"url": "https://static.crates.io/crates/hg-core/hg-core-0.0.1.crate", | "url": "https://static.crates.io/crates/hg-core/hg-core-0.0.1.crate", | ||||
"checksum": "7fe168efadebadb9da6a329fdc027036e233b662285730cad27220e11e53c384", | "version": "0.0.1", | ||||
}, | |||||
], | |||||
}, | }, | ||||
{ | { | ||||
"name": "micro-timer", | "url": "https://crates.io/api/v1/crates/micro-timer", | ||||
"version": "0.4.0", | "artifacts": [ | ||||
{ | |||||
"checksums": { | |||||
"sha256": "69ad8fd116f8af0298ae4e83e587b1600af12709022471e25581c3aeb1da77ce", # noqa: B950 | |||||
}, | |||||
"filename": "micro-timer-0.1.0.crate", | |||||
"url": "https://static.crates.io/crates/micro-timer/micro-timer-0.1.0.crate", | |||||
"version": "0.1.0", | |||||
}, | |||||
{ | |||||
"checksums": { | |||||
"sha256": "7b3f65fe0e109daad8d47e1938c9b5f9353efacd86bbe7ff013f84ae7ca758bf", # noqa: B950 | |||||
}, | |||||
"filename": "micro-timer-0.1.1.crate", | |||||
"url": "https://static.crates.io/crates/micro-timer/micro-timer-0.1.1.crate", | |||||
"version": "0.1.1", | |||||
}, | |||||
{ | |||||
"checksums": { | |||||
"sha256": "16439fea388f712c1df7737ceb8f784d407844624b4796faf1e1bf8bbaa97445", # noqa: B950 | |||||
}, | |||||
"filename": "micro-timer-0.1.2.crate", | |||||
"url": "https://static.crates.io/crates/micro-timer/micro-timer-0.1.2.crate", | |||||
"version": "0.1.2", | |||||
}, | |||||
{ | |||||
"checksums": { | |||||
"sha256": "336b4c0f071d16674747faa4643d742cc096fec2bf8cf01bb1a98d984bedcaf1", # noqa: B950 | |||||
}, | |||||
"filename": "micro-timer-0.2.0.crate", | |||||
"url": "https://static.crates.io/crates/micro-timer/micro-timer-0.2.0.crate", | |||||
"version": "0.2.0", | |||||
}, | |||||
{ | |||||
"checksums": { | |||||
"sha256": "987429cd6162a80ed5ff44fc790f5090b1c6d617ac73a2e272965ed91201d79b", # noqa: B950 | |||||
}, | |||||
"filename": "micro-timer-0.2.1.crate", | |||||
"url": "https://static.crates.io/crates/micro-timer/micro-timer-0.2.1.crate", | |||||
"version": "0.2.1", | |||||
}, | |||||
{ | |||||
"checksums": { | |||||
"sha256": "25b31d6cb9112984323d05d7a353f272ae5d7a307074f9ab9b25c00121b8c947", # noqa: B950 | |||||
}, | |||||
"filename": "micro-timer-0.3.0.crate", | |||||
"url": "https://static.crates.io/crates/micro-timer/micro-timer-0.3.0.crate", | |||||
"version": "0.3.0", | |||||
}, | |||||
{ | |||||
"checksums": { | |||||
"sha256": "2620153e1d903d26b72b89f0e9c48d8c4756cba941c185461dddc234980c298c", # noqa: B950 | |||||
}, | |||||
"filename": "micro-timer-0.3.1.crate", | |||||
"url": "https://static.crates.io/crates/micro-timer/micro-timer-0.3.1.crate", | |||||
"version": "0.3.1", | |||||
}, | |||||
{ | |||||
"checksums": { | |||||
"sha256": "5de32cb59a062672560d6f0842c4aa7714727457b9fe2daf8987d995a176a405", # noqa: B950 | |||||
}, | |||||
"filename": "micro-timer-0.4.0.crate", | |||||
"url": "https://static.crates.io/crates/micro-timer/micro-timer-0.4.0.crate", | "url": "https://static.crates.io/crates/micro-timer/micro-timer-0.4.0.crate", | ||||
"checksum": "5de32cb59a062672560d6f0842c4aa7714727457b9fe2daf8987d995a176a405", | "version": "0.4.0", | ||||
}, | |||||
], | |||||
}, | }, | ||||
] | ] | ||||
def test_get_versions(requests_mock_datadir, swh_storage): | def test_get_versions(requests_mock_datadir, swh_storage): | ||||
loader = CratesLoader( | loader = CratesLoader( | ||||
swh_storage, | swh_storage, | ||||
url=CRATES_EXTRA[1]["url"], | url=CRATES_EXTRA[1]["url"], | ||||
package_name=CRATES_EXTRA[1]["name"], | artifacts=CRATES_EXTRA[1]["artifacts"], | ||||
version=CRATES_EXTRA[1]["version"], | |||||
) | ) | ||||
assert loader.get_versions() == [ | assert loader.get_versions() == [ | ||||
"0.1.0", | "0.1.0", | ||||
"0.1.1", | "0.1.1", | ||||
"0.1.2", | "0.1.2", | ||||
"0.2.0", | "0.2.0", | ||||
"0.2.1", | "0.2.1", | ||||
"0.3.0", | "0.3.0", | ||||
"0.3.1", | "0.3.1", | ||||
"0.4.0", | "0.4.0", | ||||
] | ] | ||||
def test_get_default_version(requests_mock_datadir, swh_storage): | def test_get_default_version(requests_mock_datadir, swh_storage): | ||||
loader = CratesLoader( | loader = CratesLoader( | ||||
swh_storage, | swh_storage, | ||||
url=CRATES_EXTRA[1]["url"], | url=CRATES_EXTRA[1]["url"], | ||||
package_name=CRATES_EXTRA[1]["name"], | artifacts=CRATES_EXTRA[1]["artifacts"], | ||||
version=CRATES_EXTRA[1]["version"], | |||||
) | ) | ||||
assert loader.get_default_version() == "0.4.0" | assert loader.get_default_version() == "0.4.0" | ||||
def test_crate_origin_not_found(swh_storage, requests_mock_datadir): | def test_crate_invalid_origin_archive_not_found(swh_storage, requests_mock_datadir): | ||||
url = "https://nowhere-to-run/nowhere-to-hide-0.0.1.crate" | url = "https://nowhere-to-run/nowhere-to-hide" | ||||
loader = CratesLoader( | loader = CratesLoader( | ||||
swh_storage, | swh_storage, | ||||
url, | url, | ||||
package_name="nowhere-to-hide", | artifacts=[ | ||||
version="0.0.1", | { | ||||
"filename": "nowhere-to-hide-0.0.1.crate", | |||||
"url": "https://nowhere-to-run/nowhere-to-hide-0.0.1.crate", | |||||
"version": "0.0.1", | |||||
}, | |||||
], | |||||
) | ) | ||||
with pytest.raises(Exception): | |||||
assert loader.load() == {"status": "failed"} | assert loader.load() == {"status": "failed"} | ||||
assert_last_visit_matches( | assert_last_visit_matches( | ||||
swh_storage, url, status="not_found", type="crates", snapshot=None | swh_storage, url, status="not_found", type="crates", snapshot=None | ||||
) | ) | ||||
def test_crate_invalid_origin_empty_artifacts(swh_storage, requests_mock_datadir): | |||||
url = "https://nowhere-to-run/nowhere-to-hide" | |||||
loader = CratesLoader( | |||||
swh_storage, | |||||
url, | |||||
artifacts=[ | |||||
{}, | |||||
], | |||||
) | |||||
assert loader.load() == {"status": "failed"} | |||||
assert_last_visit_matches( | |||||
swh_storage, url, status="failed", type="crates", snapshot=None | |||||
) | |||||
def test_crates_loader_load_one_version(datadir, requests_mock_datadir, swh_storage): | def test_crates_loader_load_one_version(datadir, requests_mock_datadir, swh_storage): | ||||
loader = CratesLoader( | loader = CratesLoader( | ||||
swh_storage, | swh_storage, | ||||
url=CRATES_EXTRA[0]["url"], | url=CRATES_EXTRA[0]["url"], | ||||
package_name=CRATES_EXTRA[0]["name"], | artifacts=CRATES_EXTRA[0]["artifacts"], | ||||
version=CRATES_EXTRA[0]["version"], | |||||
) | ) | ||||
actual_load_status = loader.load() | actual_load_status = loader.load() | ||||
assert actual_load_status["status"] == "eventful" | assert actual_load_status["status"] == "eventful" | ||||
assert actual_load_status["snapshot_id"] is not None | assert actual_load_status["snapshot_id"] is not None | ||||
expected_snapshot_id = "353cd6858c88ee8210432ea1098993c2e9966561" | expected_snapshot_id = "353cd6858c88ee8210432ea1098993c2e9966561" | ||||
expected_release_id = "d578833534017430f1b93eb741620899620c2505" | expected_release_id = "d578833534017430f1b93eb741620899620c2505" | ||||
Show All 39 Lines | assert swh_storage.release_get([hash_to_bytes(expected_release_id)])[0] == Release( | ||||
id=hash_to_bytes(expected_release_id), | id=hash_to_bytes(expected_release_id), | ||||
) | ) | ||||
def test_crates_loader_load_n_versions(datadir, requests_mock_datadir, swh_storage): | def test_crates_loader_load_n_versions(datadir, requests_mock_datadir, swh_storage): | ||||
url = CRATES_EXTRA[1]["url"] | url = CRATES_EXTRA[1]["url"] | ||||
loader = CratesLoader( | loader = CratesLoader( | ||||
swh_storage, | swh_storage, | ||||
url=url, | url=CRATES_EXTRA[1]["url"], | ||||
package_name=CRATES_EXTRA[1]["name"], | artifacts=CRATES_EXTRA[1]["artifacts"], | ||||
version=CRATES_EXTRA[1]["version"], | |||||
checksum=CRATES_EXTRA[1]["checksum"], | |||||
) | ) | ||||
actual_load_status = loader.load() | actual_load_status = loader.load() | ||||
assert actual_load_status["status"] == "eventful" | assert actual_load_status["status"] == "eventful" | ||||
assert actual_load_status["snapshot_id"] is not None | assert actual_load_status["snapshot_id"] is not None | ||||
expected_snapshot_id = "016cbbe3bb78424c35b898015a2d80d79359e2ad" | expected_snapshot_id = "016cbbe3bb78424c35b898015a2d80d79359e2ad" | ||||
assert expected_snapshot_id == actual_load_status["snapshot_id"] | assert expected_snapshot_id == actual_load_status["snapshot_id"] | ||||
expected_snapshot = Snapshot( | expected_snapshot = Snapshot( | ||||
▲ Show 20 Lines • Show All 62 Lines • Show Last 20 Lines |