Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F7123210
D6697.id24389.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Subscribers
None
D6697.id24389.diff
View Options
diff --git a/swh/provenance/tests/test_conflict_resolution.py b/swh/provenance/tests/test_conflict_resolution.py
new file mode 100644
--- /dev/null
+++ b/swh/provenance/tests/test_conflict_resolution.py
@@ -0,0 +1,158 @@
+# Copyright (C) 2021 The Software Heritage developers
+# See the AUTHORS file at the top-level directory of this distribution
+# License: GNU General Public License version 3, or any later version
+# See top-level LICENSE file for more information
+
+from datetime import datetime
+from typing import List, Optional, Tuple, Union
+
+from swh.model.hashutil import hash_to_bytes
+from swh.model.model import Sha1Git
+from swh.provenance.api.server import resolve_dates, resolve_relation, resolve_revision
+from swh.provenance.interface import RelationData, RevisionData
+
+
+def test_resolve_dates() -> None:
+ items: List[Union[Tuple[Sha1Git, Optional[datetime]], Tuple[Sha1Git]]] = [
+ (hash_to_bytes("20329687bb9c1231a7e05afe86160343ad49b494"),),
+ (
+ hash_to_bytes("20329687bb9c1231a7e05afe86160343ad49b494"),
+ datetime.fromtimestamp(1000000000),
+ ),
+ (hash_to_bytes("20329687bb9c1231a7e05afe86160343ad49b494"), None),
+ ]
+ assert resolve_dates(items) == {
+ hash_to_bytes(
+ "20329687bb9c1231a7e05afe86160343ad49b494"
+ ): datetime.fromtimestamp(1000000000)
+ }
+
+
+def test_resolve_dates_keep_min() -> None:
+ items: List[Union[Tuple[Sha1Git, Optional[datetime]], Tuple[Sha1Git]]] = [
+ (
+ hash_to_bytes("20329687bb9c1231a7e05afe86160343ad49b494"),
+ datetime.fromtimestamp(1000000001),
+ ),
+ (
+ hash_to_bytes("20329687bb9c1231a7e05afe86160343ad49b494"),
+ datetime.fromtimestamp(1000000000),
+ ),
+ ]
+ assert resolve_dates(items) == {
+ hash_to_bytes(
+ "20329687bb9c1231a7e05afe86160343ad49b494"
+ ): datetime.fromtimestamp(1000000000)
+ }
+
+
+def test_resolve_revision_without_date() -> None:
+ items: List[Union[Tuple[Sha1Git, RevisionData], Tuple[Sha1Git]]] = [
+ (hash_to_bytes("c0d8929936631ecbcf9147be6b8aa13b13b014e4"),),
+ (
+ hash_to_bytes("c0d8929936631ecbcf9147be6b8aa13b13b014e4"),
+ RevisionData(
+ date=None,
+ origin=hash_to_bytes("3acef14580ea7fd42840ee905c5ce2b0ef9e8175"),
+ ),
+ ),
+ ]
+ assert resolve_revision(items) == {
+ hash_to_bytes("c0d8929936631ecbcf9147be6b8aa13b13b014e4"): RevisionData(
+ date=None,
+ origin=hash_to_bytes("3acef14580ea7fd42840ee905c5ce2b0ef9e8175"),
+ )
+ }
+
+
+def test_resolve_revision_without_origin() -> None:
+ items: List[Union[Tuple[Sha1Git, RevisionData], Tuple[Sha1Git]]] = [
+ (hash_to_bytes("c0d8929936631ecbcf9147be6b8aa13b13b014e4"),),
+ (
+ hash_to_bytes("c0d8929936631ecbcf9147be6b8aa13b13b014e4"),
+ RevisionData(date=datetime.fromtimestamp(1000000000), origin=None),
+ ),
+ ]
+ assert resolve_revision(items) == {
+ hash_to_bytes("c0d8929936631ecbcf9147be6b8aa13b13b014e4"): RevisionData(
+ date=datetime.fromtimestamp(1000000000),
+ origin=None,
+ )
+ }
+
+
+def test_resolve_revision_merge() -> None:
+ items: List[Union[Tuple[Sha1Git, RevisionData], Tuple[Sha1Git]]] = [
+ (
+ hash_to_bytes("c0d8929936631ecbcf9147be6b8aa13b13b014e4"),
+ RevisionData(date=datetime.fromtimestamp(1000000000), origin=None),
+ ),
+ (
+ hash_to_bytes("c0d8929936631ecbcf9147be6b8aa13b13b014e4"),
+ RevisionData(
+ date=None,
+ origin=hash_to_bytes("3acef14580ea7fd42840ee905c5ce2b0ef9e8175"),
+ ),
+ ),
+ ]
+ assert resolve_revision(items) == {
+ hash_to_bytes("c0d8929936631ecbcf9147be6b8aa13b13b014e4"): RevisionData(
+ date=datetime.fromtimestamp(1000000000),
+ origin=hash_to_bytes("3acef14580ea7fd42840ee905c5ce2b0ef9e8175"),
+ )
+ }
+
+
+def test_resolve_revision_keep_min_date() -> None:
+ items: List[Union[Tuple[Sha1Git, RevisionData], Tuple[Sha1Git]]] = [
+ (
+ hash_to_bytes("c0d8929936631ecbcf9147be6b8aa13b13b014e4"),
+ RevisionData(
+ date=datetime.fromtimestamp(1000000000),
+ origin=hash_to_bytes("3acef14580ea7fd42840ee905c5ce2b0ef9e8174"),
+ ),
+ ),
+ (
+ hash_to_bytes("c0d8929936631ecbcf9147be6b8aa13b13b014e4"),
+ RevisionData(
+ date=datetime.fromtimestamp(1000000001),
+ origin=hash_to_bytes("3acef14580ea7fd42840ee905c5ce2b0ef9e8175"),
+ ),
+ ),
+ ]
+ assert resolve_revision(items) == {
+ hash_to_bytes("c0d8929936631ecbcf9147be6b8aa13b13b014e4"): RevisionData(
+ date=datetime.fromtimestamp(1000000000),
+ origin=hash_to_bytes("3acef14580ea7fd42840ee905c5ce2b0ef9e8175"),
+ )
+ }
+
+
+def test_resolve_relation() -> None:
+ items: List[Tuple[Sha1Git, Sha1Git, bytes]] = [
+ (
+ hash_to_bytes("c0d8929936631ecbcf9147be6b8aa13b13b014e4"),
+ hash_to_bytes("3acef14580ea7fd42840ee905c5ce2b0ef9e8174"),
+ b"/path/1",
+ ),
+ (
+ hash_to_bytes("c0d8929936631ecbcf9147be6b8aa13b13b014e4"),
+ hash_to_bytes("3acef14580ea7fd42840ee905c5ce2b0ef9e8174"),
+ b"/path/2",
+ ),
+ (
+ hash_to_bytes("c0d8929936631ecbcf9147be6b8aa13b13b014e4"),
+ hash_to_bytes("3acef14580ea7fd42840ee905c5ce2b0ef9e8174"),
+ b"/path/1",
+ ),
+ ]
+ assert resolve_relation(items) == {
+ hash_to_bytes("c0d8929936631ecbcf9147be6b8aa13b13b014e4"): {
+ RelationData(
+ hash_to_bytes("3acef14580ea7fd42840ee905c5ce2b0ef9e8174"), b"/path/1"
+ ),
+ RelationData(
+ hash_to_bytes("3acef14580ea7fd42840ee905c5ce2b0ef9e8174"), b"/path/2"
+ ),
+ }
+ }
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Dec 18, 3:05 AM (2 d, 3 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3224954
Attached To
D6697: Add tests for conflict resolution functions
Event Timeline
Log In to Comment