Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/svn/tests/test_loader.py
# Copyright (C) 2016-2020 The Software Heritage developers | # Copyright (C) 2016-2020 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 copy | import copy | ||||
import os | import os | ||||
from typing import Optional | |||||
from swh.loader.core.tests import BaseLoaderTest | from swh.loader.core.tests import BaseLoaderTest | ||||
from swh.loader.svn.loader import ( | from swh.loader.svn.loader import ( | ||||
DEFAULT_BRANCH, | DEFAULT_BRANCH, | ||||
SvnLoader, | SvnLoader, | ||||
SvnLoaderFromRemoteDump, | SvnLoaderFromRemoteDump, | ||||
build_swh_snapshot, | build_swh_snapshot, | ||||
) | ) | ||||
from swh.model import hashutil | from swh.model import hashutil | ||||
from swh.model.model import Origin, Snapshot | from swh.model.model import Origin, OriginVisitStatus, Snapshot | ||||
def assert_last_visit_ok( | |||||
storage, url: str, status: str, type: Optional[str] = None | |||||
) -> OriginVisitStatus: | |||||
"""Ensure a given visit/visit-status is expectedly with type and status. | |||||
This returns the last visit_status for that given origin | |||||
Args: | |||||
url: Origin url | |||||
status: expected status | |||||
type: expected_type | |||||
Raises: | |||||
AssertionError in case visit or visit status is not found | |||||
Returns: | |||||
the visit status for further check during the remaining part of the test. | |||||
""" | |||||
visit = storage.origin_visit_get_latest(url) | |||||
assert visit is not None, f"Visit should exist for origin {url}" | |||||
if type: | |||||
assert visit["type"] == type | |||||
visit_id = visit["visit"] | |||||
visit_status = storage.origin_visit_status_get_latest(url, visit_id) | |||||
assert ( | |||||
visit_status is not None | |||||
), f"Visit status should exist for origin {url}, visit {visit_id}" | |||||
assert visit_status.status == status | |||||
return visit_status | |||||
ardumont: This is already defined in loader-core now... [1]
Unsure if we want to avoid duplication here... | |||||
def test_build_swh_snapshot(): | def test_build_swh_snapshot(): | ||||
rev_id = hashutil.hash_to_bytes("3f51abf3b3d466571be0855dfa67e094f9ceff1b") | rev_id = hashutil.hash_to_bytes("3f51abf3b3d466571be0855dfa67e094f9ceff1b") | ||||
snap = build_swh_snapshot(rev_id) | snap = build_swh_snapshot(rev_id) | ||||
assert isinstance(snap, Snapshot) | assert isinstance(snap, Snapshot) | ||||
▲ Show 20 Lines • Show All 174 Lines • ▼ Show 20 Lines | def test_load(self): | ||||
"a3a577948fdbda9d1061913b77a1588695eadb41": "7dc52cc04c3b8bd7c085900d60c159f7b846f866", # noqa | "a3a577948fdbda9d1061913b77a1588695eadb41": "7dc52cc04c3b8bd7c085900d60c159f7b846f866", # noqa | ||||
last_revision: "0deab3023ac59398ae467fc4bff5583008af1ee2", # noqa | last_revision: "0deab3023ac59398ae467fc4bff5583008af1ee2", # noqa | ||||
} | } | ||||
self.assertRevisionsContain(expected_revisions) | self.assertRevisionsContain(expected_revisions) | ||||
self.assertCountSnapshots(1) | self.assertCountSnapshots(1) | ||||
self.assertEqual(self.loader.visit_status(), "full") | self.assertEqual(self.loader.visit_status(), "full") | ||||
visit = self.storage.origin_visit_get_latest(self.repo_url) | visit_status = assert_last_visit_ok( | ||||
self.assertEqual(visit["snapshot"], GOURMET_SNAPSHOT) | self.storage, self.repo_url, status="full", type="svn" | ||||
self.assertEqual(visit["status"], "full") | ) | ||||
self.assertEqual(visit_status.snapshot, GOURMET_SNAPSHOT) | |||||
_LAST_SNP_REV = { | _LAST_SNP_REV = { | ||||
"snapshot": Snapshot.from_dict({"id": GOURMET_FLAG_SNAPSHOT, "branches": {}}), | "snapshot": Snapshot.from_dict({"id": GOURMET_FLAG_SNAPSHOT, "branches": {}}), | ||||
"revision": { | "revision": { | ||||
"id": hashutil.hash_to_bytes("4876cb10aec6f708f7466dddf547567b65f6c39c"), | "id": hashutil.hash_to_bytes("4876cb10aec6f708f7466dddf547567b65f6c39c"), | ||||
"parents": ( | "parents": ( | ||||
hashutil.hash_to_bytes("a3a577948fdbda9d1061913b77a1588695eadb41"), | hashutil.hash_to_bytes("a3a577948fdbda9d1061913b77a1588695eadb41"), | ||||
Show All 29 Lines | def test_load(self): | ||||
# then | # then | ||||
self.assertCountContents(0) | self.assertCountContents(0) | ||||
self.assertCountDirectories(0) | self.assertCountDirectories(0) | ||||
self.assertCountRevisions(0) | self.assertCountRevisions(0) | ||||
self.assertCountReleases(0) | self.assertCountReleases(0) | ||||
self.assertCountSnapshots(1) | self.assertCountSnapshots(1) | ||||
self.assertEqual(self.loader.visit_status(), "full") | self.assertEqual(self.loader.visit_status(), "full") | ||||
visit = self.storage.origin_visit_get_latest(self.repo_url) | |||||
self.assertEqual(visit["snapshot"], GOURMET_FLAG_SNAPSHOT) | visit_status = assert_last_visit_ok( | ||||
self.assertEqual(visit["status"], "full") | self.storage, self.repo_url, status="full", type="svn" | ||||
) | |||||
self.assertEqual(visit_status.snapshot, GOURMET_FLAG_SNAPSHOT) | |||||
class SvnLoaderTest3(BaseSvnLoaderTest): | class SvnLoaderTest3(BaseSvnLoaderTest): | ||||
"""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. This results in a hash divergence which is | commit log. This results in a hash divergence which is | ||||
detected at startup. | detected at startup. | ||||
In effect, that stops the loading and do nothing. | In effect, that stops the loading and do nothing. | ||||
Show All 24 Lines | def test_load(self): | ||||
# so 2 news + 1 old | # so 2 news + 1 old | ||||
self.assertCountContents(0) | self.assertCountContents(0) | ||||
self.assertCountDirectories(0) | self.assertCountDirectories(0) | ||||
self.assertCountRevisions(0) | self.assertCountRevisions(0) | ||||
self.assertCountReleases(0) | self.assertCountReleases(0) | ||||
self.assertCountSnapshots(0) | self.assertCountSnapshots(0) | ||||
self.assertEqual(self.loader.visit_status(), "partial") | self.assertEqual(self.loader.visit_status(), "partial") | ||||
visit = self.storage.origin_visit_get_latest(self.repo_url) | visit_status = assert_last_visit_ok( | ||||
self.assertEqual(visit["snapshot"], None) | self.storage, self.repo_url, status="partial", type="svn" | ||||
self.assertEqual(visit["status"], "partial") | ) | ||||
self.assertEqual(visit_status.snapshot, None) | |||||
class SvnLoaderTest4(BaseSvnLoaderTest): | class SvnLoaderTest4(BaseSvnLoaderTest): | ||||
"""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 All 29 Lines | def test_process_repository(self): | ||||
last_revision: "fd24a76c87a3207428e06612b49860fc78e9f6dc", # noqa | last_revision: "fd24a76c87a3207428e06612b49860fc78e9f6dc", # noqa | ||||
} | } | ||||
self.assertRevisionsContain(expected_revisions) | self.assertRevisionsContain(expected_revisions) | ||||
self.assertCountSnapshots(1) | self.assertCountSnapshots(1) | ||||
self.assertEqual(self.loader.visit_status(), "full") | self.assertEqual(self.loader.visit_status(), "full") | ||||
visit = self.storage.origin_visit_get_latest(self.repo_url) | visit_status = assert_last_visit_ok( | ||||
self.assertEqual(visit["snapshot"], GOURMET_UPDATES_SNAPSHOT) | self.storage, self.repo_url, status="full", type="svn" | ||||
self.assertEqual(visit["status"], "full") | ) | ||||
self.assertEqual(visit_status.snapshot, GOURMET_UPDATES_SNAPSHOT) | |||||
class SvnLoaderTest5(BaseSvnLoaderTest): | class SvnLoaderTest5(BaseSvnLoaderTest): | ||||
"""Context: | """Context: | ||||
- Repository already injected with successful data | - Repository already injected with successful data | ||||
- New visit from scratch done with successful load | - New visit from scratch done with successful load | ||||
Show All 35 Lines | def test_load(self): | ||||
"171dc35522bfd17dda4e90a542a0377fb2fc707a": "fd24a76c87a3207428e06612b49860fc78e9f6dc", # noqa | "171dc35522bfd17dda4e90a542a0377fb2fc707a": "fd24a76c87a3207428e06612b49860fc78e9f6dc", # noqa | ||||
} | } | ||||
self.assertRevisionsContain(expected_revisions) | self.assertRevisionsContain(expected_revisions) | ||||
self.assertCountSnapshots(1) | self.assertCountSnapshots(1) | ||||
self.assertEqual(self.loader.visit_status(), "full") | self.assertEqual(self.loader.visit_status(), "full") | ||||
visit = self.storage.origin_visit_get_latest(self.repo_url) | visit_status = assert_last_visit_ok( | ||||
self.assertEqual(visit["snapshot"], GOURMET_UPDATES_SNAPSHOT) | self.storage, self.repo_url, status="full", type="svn" | ||||
self.assertEqual(visit["status"], "full") | ) | ||||
self.assertEqual(visit_status.snapshot, GOURMET_UPDATES_SNAPSHOT) | |||||
class SvnLoaderTest6(BaseSvnLoaderTest): | class SvnLoaderTest6(BaseSvnLoaderTest): | ||||
"""Context: | """Context: | ||||
- repository already visited with load successful | - repository already visited with load successful | ||||
- Changes on existing repository | - Changes on existing repository | ||||
- New Visit done with successful new data | - New Visit done with successful new data | ||||
▲ Show 20 Lines • Show All 52 Lines • ▼ Show 20 Lines | def test_load(self): | ||||
"902f29b4323a9b9de3af6d28e72dd581e76d9397": "c4e12483f0a13e6851459295a4ae735eb4e4b5c4", # noqa | "902f29b4323a9b9de3af6d28e72dd581e76d9397": "c4e12483f0a13e6851459295a4ae735eb4e4b5c4", # noqa | ||||
last_revision: "fd24a76c87a3207428e06612b49860fc78e9f6dc", # noqa | last_revision: "fd24a76c87a3207428e06612b49860fc78e9f6dc", # noqa | ||||
} | } | ||||
self.assertRevisionsContain(expected_revisions) | self.assertRevisionsContain(expected_revisions) | ||||
self.assertCountSnapshots(1) | self.assertCountSnapshots(1) | ||||
self.assertEqual(self.loader.visit_status(), "full") | self.assertEqual(self.loader.visit_status(), "full") | ||||
visit = self.storage.origin_visit_get_latest(self.repo_url) | visit_status = assert_last_visit_ok( | ||||
self.assertEqual(visit["snapshot"], GOURMET_UPDATES_SNAPSHOT) | self.storage, self.repo_url, status="full", type="svn" | ||||
self.assertEqual(visit["status"], "full") | ) | ||||
self.assertEqual(visit_status.snapshot, GOURMET_UPDATES_SNAPSHOT) | |||||
class SvnLoaderTest7(BaseSvnLoaderTest): | class SvnLoaderTest7(BaseSvnLoaderTest): | ||||
"""Context: | """Context: | ||||
- repository already visited with load successful | - repository already visited with load successful | ||||
- Changes on existing repository | - Changes on existing repository | ||||
- New Visit done with successful new data | - New Visit done with successful new data | ||||
▲ Show 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | def test_load(self): | ||||
"902f29b4323a9b9de3af6d28e72dd581e76d9397": "c4e12483f0a13e6851459295a4ae735eb4e4b5c4", # noqa | "902f29b4323a9b9de3af6d28e72dd581e76d9397": "c4e12483f0a13e6851459295a4ae735eb4e4b5c4", # noqa | ||||
last_revision: "fd24a76c87a3207428e06612b49860fc78e9f6dc", # noqa | last_revision: "fd24a76c87a3207428e06612b49860fc78e9f6dc", # noqa | ||||
} | } | ||||
self.assertRevisionsContain(expected_revisions) | self.assertRevisionsContain(expected_revisions) | ||||
self.assertCountSnapshots(1) | self.assertCountSnapshots(1) | ||||
self.assertEqual(self.loader.visit_status(), "full") | self.assertEqual(self.loader.visit_status(), "full") | ||||
visit = self.storage.origin_visit_get_latest(self.repo_url) | visit_status = assert_last_visit_ok( | ||||
self.assertEqual(visit["snapshot"], GOURMET_UPDATES_SNAPSHOT) | self.storage, self.repo_url, status="full", type="svn" | ||||
self.assertEqual(visit["status"], "full") | ) | ||||
self.assertEqual(visit_status.snapshot, GOURMET_UPDATES_SNAPSHOT) | |||||
class SvnLoaderTest8(BaseSvnLoaderTest): | class SvnLoaderTest8(BaseSvnLoaderTest): | ||||
"""Context: | """Context: | ||||
- Previous visit on existing repository done | - Previous visit on existing repository done | ||||
- Starting the loading from the last unfinished visit | - Starting the loading from the last unfinished visit | ||||
- New objects are created (1 new snapshot) | - New objects are created (1 new snapshot) | ||||
▲ Show 20 Lines • Show All 68 Lines • ▼ Show 20 Lines | def test_load(self): | ||||
"902f29b4323a9b9de3af6d28e72dd581e76d9397": "c4e12483f0a13e6851459295a4ae735eb4e4b5c4", # noqa | "902f29b4323a9b9de3af6d28e72dd581e76d9397": "c4e12483f0a13e6851459295a4ae735eb4e4b5c4", # noqa | ||||
last_revision: "fd24a76c87a3207428e06612b49860fc78e9f6dc", # noqa | last_revision: "fd24a76c87a3207428e06612b49860fc78e9f6dc", # noqa | ||||
} | } | ||||
self.assertRevisionsContain(expected_revisions) | self.assertRevisionsContain(expected_revisions) | ||||
self.assertCountSnapshots(1) | self.assertCountSnapshots(1) | ||||
self.assertEqual(self.loader.visit_status(), "full") | self.assertEqual(self.loader.visit_status(), "full") | ||||
visit = self.storage.origin_visit_get_latest(self.repo_url) | visit_status = assert_last_visit_ok( | ||||
self.assertEqual(visit["snapshot"], GOURMET_UPDATES_SNAPSHOT) | self.storage, self.repo_url, status="full", type="svn" | ||||
self.assertEqual(visit["status"], "full") | ) | ||||
self.assertEqual(visit_status.snapshot, GOURMET_UPDATES_SNAPSHOT) | |||||
class SvnLoaderTest9(BaseSvnLoaderTest): | class SvnLoaderTest9(BaseSvnLoaderTest): | ||||
"""Check that a svn repo containing a versioned file with CRLF line | """Check that a svn repo containing a versioned file with CRLF line | ||||
endings with svn:eol-style property set to 'native' (this is a | endings with svn:eol-style property set to 'native' (this is a | ||||
violation of svn specification as the file should have been | violation of svn specification as the file should have been | ||||
stored with LF line endings) can be loaded anyway. | stored with LF line endings) can be loaded anyway. | ||||
Show All 14 Lines | def test_process_repository(self): | ||||
expected_revisions = { | expected_revisions = { | ||||
"7da4975c363101b819756d33459f30a866d01b1b": "f63637223ee0f7d4951ffd2d4d9547a4882c5d8b" # noqa | "7da4975c363101b819756d33459f30a866d01b1b": "f63637223ee0f7d4951ffd2d4d9547a4882c5d8b" # noqa | ||||
} | } | ||||
self.assertRevisionsContain(expected_revisions) | self.assertRevisionsContain(expected_revisions) | ||||
self.assertCountSnapshots(1) | self.assertCountSnapshots(1) | ||||
self.assertEqual(self.loader.visit_status(), "full") | self.assertEqual(self.loader.visit_status(), "full") | ||||
visit = self.storage.origin_visit_get_latest(self.repo_url) | visit_status = assert_last_visit_ok( | ||||
self.assertEqual(visit["snapshot"], MEDIAWIKI_SNAPSHOT) | self.storage, self.repo_url, status="full", type="svn" | ||||
self.assertEqual(visit["status"], "full") | ) | ||||
self.assertEqual(visit_status.snapshot, MEDIAWIKI_SNAPSHOT) | |||||
class SvnLoaderTest10(BaseSvnLoaderTest): # noqa | class SvnLoaderTest10(BaseSvnLoaderTest): # noqa | ||||
"""Check that a svn repo containing a versioned file with mixed | """Check that a svn repo containing a versioned file with mixed | ||||
CRLF/LF line endings with svn:eol-style property set to 'native' | CRLF/LF line endings with svn:eol-style property set to 'native' | ||||
(this is a violation of svn specification as mixed line endings | (this is a violation of svn specification as mixed line endings | ||||
for textual content should not be stored when the svn:eol-style | for textual content should not be stored when the svn:eol-style | ||||
property is set) can be loaded anyway. | property is set) can be loaded anyway. | ||||
Show All 15 Lines | def test_load(self): | ||||
expected_revisions = { | expected_revisions = { | ||||
"9c6962eeb9164a636c374be700672355e34a98a7": "16aa6b6271f3456d4643999d234cf39fe3d0cc5a" # noqa | "9c6962eeb9164a636c374be700672355e34a98a7": "16aa6b6271f3456d4643999d234cf39fe3d0cc5a" # noqa | ||||
} | } | ||||
self.assertRevisionsContain(expected_revisions) | self.assertRevisionsContain(expected_revisions) | ||||
self.assertCountSnapshots(1) | self.assertCountSnapshots(1) | ||||
self.assertEqual(self.loader.visit_status(), "full") | self.assertEqual(self.loader.visit_status(), "full") | ||||
visit = self.storage.origin_visit_get_latest(self.repo_url) | visit_status = assert_last_visit_ok( | ||||
self.assertEqual(visit["snapshot"], PYANG_SNAPSHOT) | self.storage, self.repo_url, status="full", type="svn" | ||||
self.assertEqual(visit["status"], "full") | ) | ||||
self.assertEqual(visit_status.snapshot, PYANG_SNAPSHOT) | |||||
class SvnLoaderTest11(BaseSvnLoaderTest): | class SvnLoaderTest11(BaseSvnLoaderTest): | ||||
"""Context: | """Context: | ||||
- Repository with svn:external (which is not deal with for now) | - Repository with svn:external (which is not deal with for now) | ||||
- Visit is partial with as much data loaded as possible | - Visit is partial with as much data loaded as possible | ||||
▲ Show 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | def test_load(self): | ||||
last_revision: "0de6e75d2b79ec90d00a3a7611aa3861b2e4aa5e", # noqa | last_revision: "0de6e75d2b79ec90d00a3a7611aa3861b2e4aa5e", # noqa | ||||
} | } | ||||
# The last revision being the one used later to start back from | # The last revision being the one used later to start back from | ||||
self.assertRevisionsContain(expected_revisions) | self.assertRevisionsContain(expected_revisions) | ||||
self.assertCountSnapshots(1) | self.assertCountSnapshots(1) | ||||
self.assertEqual(self.loader.visit_status(), "partial") | self.assertEqual(self.loader.visit_status(), "partial") | ||||
visit = self.storage.origin_visit_get_latest(self.repo_url) | visit_status = assert_last_visit_ok( | ||||
self.assertEqual(visit["snapshot"], GOURMET_EXTERNALS_SNAPSHOT) | self.storage, self.repo_url, status="partial", type="svn" | ||||
self.assertEqual(visit["status"], "partial") | ) | ||||
self.assertEqual(visit_status.snapshot, GOURMET_EXTERNALS_SNAPSHOT) | |||||
class SvnLoaderTest12(BaseSvnLoaderTest): | class SvnLoaderTest12(BaseSvnLoaderTest): | ||||
"""Edge cases: | """Edge cases: | ||||
- first create a file and commit it. | - first create a file and commit it. | ||||
Remove it, then add folder holding the same name, commit. | Remove it, then add folder holding the same name, commit. | ||||
- do the same scenario with symbolic link (instead of file) | - do the same scenario with symbolic link (instead of file) | ||||
▲ Show 20 Lines • Show All 41 Lines • ▼ Show 20 Lines | def test_load(self): | ||||
"69a53d972e2f863acbbbda546d9da96287af6a88": "13896cb96ec004140ce5be8852fee8c29830d9c7", # noqa | "69a53d972e2f863acbbbda546d9da96287af6a88": "13896cb96ec004140ce5be8852fee8c29830d9c7", # noqa | ||||
last_revision: "6b1e0243768ff9ac060064b2eeade77e764ffc82", # noqa | last_revision: "6b1e0243768ff9ac060064b2eeade77e764ffc82", # noqa | ||||
} | } | ||||
self.assertRevisionsContain(expected_revisions) | self.assertRevisionsContain(expected_revisions) | ||||
self.assertCountSnapshots(1) | self.assertCountSnapshots(1) | ||||
self.assertEqual(self.loader.visit_status(), "full") | self.assertEqual(self.loader.visit_status(), "full") | ||||
visit = self.storage.origin_visit_get_latest(self.repo_url) | visit_status = assert_last_visit_ok( | ||||
self.assertEqual(visit["snapshot"], GOURMET_EDGE_CASES_SNAPSHOT) | self.storage, self.repo_url, status="full", type="svn" | ||||
self.assertEqual(visit["status"], "full") | ) | ||||
self.assertEqual(visit_status.snapshot, GOURMET_EDGE_CASES_SNAPSHOT) | |||||
class SvnLoaderTest13(BaseSvnLoaderTest): | class SvnLoaderTest13(BaseSvnLoaderTest): | ||||
"""Edge cases: | """Edge cases: | ||||
- wrong symbolic link | - wrong symbolic link | ||||
- wrong symbolic link with empty space names | - wrong symbolic link with empty space names | ||||
""" | """ | ||||
Show All 38 Lines | def test_load(self): | ||||
"4ab5fc264732cd474d2e695c5ac66e4933bdad74": "9a1f5e3961db89422250ce6c1441476f40d65205", # noqa | "4ab5fc264732cd474d2e695c5ac66e4933bdad74": "9a1f5e3961db89422250ce6c1441476f40d65205", # noqa | ||||
last_revision: "d853d9628f6f0008d324fed27dadad00ce48bc62", # noqa | last_revision: "d853d9628f6f0008d324fed27dadad00ce48bc62", # noqa | ||||
} | } | ||||
self.assertRevisionsContain(expected_revisions) | self.assertRevisionsContain(expected_revisions) | ||||
self.assertCountSnapshots(1) | self.assertCountSnapshots(1) | ||||
self.assertEqual(self.loader.visit_status(), "full") | self.assertEqual(self.loader.visit_status(), "full") | ||||
visit = self.storage.origin_visit_get_latest(self.repo_url) | visit_status = assert_last_visit_ok( | ||||
self.assertEqual(visit["snapshot"], GOURMET_WRONG_LINKS_SNAPSHOT) | self.storage, self.repo_url, status="full", type="svn" | ||||
self.assertEqual(visit["status"], "full") | ) | ||||
self.assertEqual(visit_status.snapshot, GOURMET_WRONG_LINKS_SNAPSHOT) | |||||
class SvnLoaderTestFromRemoteDump(SvnLoaderTest, SvnLoaderFromRemoteDump): | class SvnLoaderTestFromRemoteDump(SvnLoaderTest, SvnLoaderFromRemoteDump): | ||||
pass | pass | ||||
class SvnLoaderFromRemoteDumpTest(BaseSvnLoaderTest): | class SvnLoaderFromRemoteDumpTest(BaseSvnLoaderTest): | ||||
""" | """ | ||||
Show All 19 Lines | def test_load(self): | ||||
base_loader = SvnLoaderTest(self.svn_mirror_url) | base_loader = SvnLoaderTest(self.svn_mirror_url) | ||||
base_loader.load() | base_loader.load() | ||||
dump_storage_stat = dump_loader.storage.stat_counters() | dump_storage_stat = dump_loader.storage.stat_counters() | ||||
base_storage_stat = base_loader.storage.stat_counters() | base_storage_stat = base_loader.storage.stat_counters() | ||||
self.assertEqual(dump_storage_stat, base_storage_stat) | self.assertEqual(dump_storage_stat, base_storage_stat) | ||||
visit = dump_loader.storage.origin_visit_get_latest(self.repo_url) | visit_status = assert_last_visit_ok( | ||||
self.assertEqual(visit["snapshot"], GOURMET_SNAPSHOT) | self.storage, self.repo_url, status="full", type="svn" | ||||
) | |||||
self.assertEqual(visit_status.snapshot, GOURMET_SNAPSHOT) | |||||
visit = base_loader.storage.origin_visit_get_latest(self.repo_url) | visit_status2 = assert_last_visit_ok( | ||||
self.assertEqual(visit["snapshot"], GOURMET_SNAPSHOT) | base_loader.storage, self.repo_url, status="full", type="svn" | ||||
) | |||||
self.assertEqual(visit_status2.snapshot, GOURMET_SNAPSHOT) | |||||
class SvnLoaderTest14(BaseSvnLoaderTest): | class SvnLoaderTest14(BaseSvnLoaderTest): | ||||
"""Edge cases: The repository held some user defined svn-properties | """Edge cases: The repository held some user defined svn-properties | ||||
with special encodings, this prevented the repository from | with special encodings, this prevented the repository from | ||||
being loaded even though we do not ingest those information. | being loaded even though we do not ingest those information. | ||||
""" | """ | ||||
Show All 29 Lines | def test_load(self): | ||||
expected_branches = { | expected_branches = { | ||||
"HEAD": {"target": last_revision, "target_type": "revision"} | "HEAD": {"target": last_revision, "target_type": "revision"} | ||||
} | } | ||||
self.assertSnapshotEqual(expected_snapshot_id, expected_branches) | self.assertSnapshotEqual(expected_snapshot_id, expected_branches) | ||||
self.assertEqual(self.loader.visit_status(), "full") | self.assertEqual(self.loader.visit_status(), "full") | ||||
visit = self.storage.origin_visit_get_latest(self.repo_url) | visit_status = assert_last_visit_ok( | ||||
self.storage, self.repo_url, status="full", type="svn" | |||||
) | |||||
self.assertEqual( | self.assertEqual( | ||||
visit["snapshot"], hashutil.hash_to_bytes(expected_snapshot_id) | visit_status.snapshot, hashutil.hash_to_bytes(expected_snapshot_id) | ||||
) | ) | ||||
self.assertEqual(visit["status"], "full") |
This is already defined in loader-core now... [1]
Unsure if we want to avoid duplication here...
[1] D3305