diff --git a/swh/storage/tests/storage_data.py b/swh/storage/tests/storage_data.py --- a/swh/storage/tests/storage_data.py +++ b/swh/storage/tests/storage_data.py @@ -317,6 +317,29 @@ ) git_revisions: Tuple[Revision, ...] = (revision, revision2, revision3, revision4) + old_revision = Revision( + message=None, + author=Person(fullname=b"", name=None, email=None), + committer=Person(fullname=b"", name=None, email=None), + date=TimestampWithTimezone( + timestamp=Timestamp(seconds=-1855958962, microseconds=0), + offset=0, + negative_utc=False, + ), + committer_date=TimestampWithTimezone( + timestamp=Timestamp(seconds=0, microseconds=0), + offset=0, + negative_utc=False, + ), + type=RevisionType.GIT, + directory=hash_to_bytes("0000000000000000000000000000000000000000"), + synthetic=False, + metadata=None, + parents=(b"\x00" * 20,), + id=hash_to_bytes("1cfdff56457e2f1a86f53d8310e2e2bd92ad066c"), + extra_headers=(), + ) + hg_revision = Revision( id=hash_to_bytes("951c9503541e7beaf002d7aebf2abd1629084c68"), message=b"hello", diff --git a/swh/storage/tests/storage_tests.py b/swh/storage/tests/storage_tests.py --- a/swh/storage/tests/storage_tests.py +++ b/swh/storage/tests/storage_tests.py @@ -1017,6 +1017,23 @@ ("revision", revision2), ] + def test_revision_add_old(self, swh_storage, sample_data): + revision = sample_data.old_revision + init_missing = swh_storage.revision_missing([revision.id]) + assert list(init_missing) == [revision.id] + + actual_result = swh_storage.revision_add([revision]) + assert actual_result == {"revision:add": 1} + + end_missing = swh_storage.revision_missing([revision.id]) + assert list(end_missing) == [] + + assert list(swh_storage.journal_writer.journal.objects) == [ + ("revision", revision) + ] + + assert swh_storage.revision_get([revision.id])[0] == revision + def test_revision_add_name_clash(self, swh_storage, sample_data): revision, revision2 = sample_data.revisions[:2] diff --git a/swh/storage/tests/test_postgresql.py b/swh/storage/tests/test_postgresql.py --- a/swh/storage/tests/test_postgresql.py +++ b/swh/storage/tests/test_postgresql.py @@ -31,6 +31,13 @@ def test_directory_get_entries_pagination(self): pass + @pytest.mark.xfail( + raises=AssertionError, + reason="PostgreSQL loses precision on very old timestamps.", + ) + def test_revision_add_old(self, swh_storage, sample_data): + super().test_revision_add_old(swh_storage, sample_data) + @pytest.mark.db class TestLocalStorage: