Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/svn/tests/test_loader.py
Show First 20 Lines • Show All 248 Lines • ▼ Show 20 Lines | def test_loader_svn_2_visits_no_change(swh_storage, datadir, tmp_path): | ||||
) | ) | ||||
def test_loader_tampered_repository(swh_storage, datadir, tmp_path): | def test_loader_tampered_repository(swh_storage, datadir, tmp_path): | ||||
"""In this scenario, the dump has been tampered with to modify the | """In this scenario, the dump has been tampered with to modify the | ||||
commit log [1]. This results in a hash divergence which is | commit log [1]. This results in a hash divergence which is | ||||
detected at startup after a new run for the same origin. | detected at startup after a new run for the same origin. | ||||
In effect, that stops the loading and do nothing. | In effect, this will perform a complete reloading of the repository. | ||||
[1] Tampering with revision 6 log message following: | [1] Tampering with revision 6 log message following: | ||||
``` | ``` | ||||
tar xvf pkg-gourmet.tgz # initial repository ingested | tar xvf pkg-gourmet.tgz # initial repository ingested | ||||
cd pkg-gourmet/ | cd pkg-gourmet/ | ||||
echo "Tampering with commit log message for fun and profit" > log.txt | echo "Tampering with commit log message for fun and profit" > log.txt | ||||
svnadmin setlog . -r 6 log.txt --bypass-hooks | svnadmin setlog . -r 6 log.txt --bypass-hooks | ||||
tar cvf pkg-gourmet-tampered-rev6-log.tgz pkg-gourmet/ | tar cvf pkg-gourmet-tampered-rev6-log.tgz pkg-gourmet/ | ||||
``` | ``` | ||||
""" | """ | ||||
archive_name = "pkg-gourmet" | archive_name = "pkg-gourmet" | ||||
archive_path = os.path.join(datadir, f"{archive_name}.tgz") | archive_path = os.path.join(datadir, f"{archive_name}.tgz") | ||||
repo_url = prepare_repository_from_archive(archive_path, archive_name, tmp_path) | repo_url = prepare_repository_from_archive(archive_path, archive_name, tmp_path) | ||||
loader = SvnLoader(swh_storage, repo_url) | loader = SvnLoader(swh_storage, repo_url) | ||||
assert loader.load() == {"status": "eventful"} | assert loader.load() == {"status": "eventful"} | ||||
check_snapshot(GOURMET_SNAPSHOT, loader.storage) | check_snapshot(GOURMET_SNAPSHOT, loader.storage) | ||||
assert_last_visit_matches( | |||||
loader.storage, | |||||
repo_url, | |||||
status="full", | |||||
type="svn", | |||||
snapshot=GOURMET_SNAPSHOT.id, | |||||
) | |||||
archive_path2 = os.path.join(datadir, "pkg-gourmet-tampered-rev6-log.tgz") | archive_path2 = os.path.join(datadir, "pkg-gourmet-tampered-rev6-log.tgz") | ||||
repo_tampered_url = prepare_repository_from_archive( | repo_tampered_url = prepare_repository_from_archive( | ||||
archive_path2, archive_name, tmp_path | archive_path2, archive_name, tmp_path | ||||
) | ) | ||||
loader2 = SvnLoader(swh_storage, repo_tampered_url, origin_url=repo_url) | loader2 = SvnLoader(swh_storage, repo_tampered_url, origin_url=repo_url) | ||||
assert loader2.load() == {"status": "failed"} | assert loader2.load() == {"status": "eventful"} | ||||
assert_last_visit_matches( | assert_last_visit_matches( | ||||
loader2.storage, repo_url, status="failed", type="svn", snapshot=None, | loader2.storage, | ||||
repo_url, | |||||
status="full", | |||||
type="svn", | |||||
snapshot=hash_to_bytes("c499eebc1e201024d47d24053ac0080049305897"), | |||||
) | ) | ||||
stats = get_stats(loader.storage) | stats = get_stats(loader.storage) | ||||
assert stats["origin"] == 1 | assert stats["origin"] == 1 | ||||
assert stats["origin_visit"] == 2 | assert stats["origin_visit"] == 2 | ||||
assert stats["snapshot"] == 1 | assert stats["snapshot"] == 2 | ||||
def test_loader_svn_visit_with_changes(swh_storage, datadir, tmp_path): | def test_loader_svn_visit_with_changes(swh_storage, datadir, tmp_path): | ||||
"""In this scenario, the repository has been updated with new changes. | """In this scenario, the repository has been updated with new changes. | ||||
The loading visit should result in new objects stored and 1 new | The loading visit should result in new objects stored and 1 new | ||||
snapshot. | snapshot. | ||||
""" | """ | ||||
▲ Show 20 Lines • Show All 824 Lines • Show Last 20 Lines |