Example #1
0
    def setUp(self):
        super().setUp()

        self.empty = {
            "id": _x("1a8893e6a86f444e8be8e7bda6cb34fb1735a00e"),
            "branches": {},
        }

        self.dangling_branch = {
            "id": _x("c84502e821eb21ed84e9fd3ec40973abc8b32353"),
            "branches": {
                b"HEAD": None,
            },
        }

        self.unresolved = {
            "id": _x("84b4548ea486e4b0a7933fa541ff1503a0afe1e0"),
            "branches": {
                b"foo": {
                    "target": b"bar",
                    "target_type": "alias",
                },
            },
        }

        self.all_types = snapshot_example
Example #2
0
    def test_microsecond_insensitive(self):
        """Checks the microseconds of the datetime.datetime does not affect the
        hashed manifest."""
        metadata = {
            **self.minimal,
            "discovery_date":
            datetime.datetime(
                2021,
                1,
                25,
                11,
                27,
                51,
                123456,
                tzinfo=datetime.timezone.utc,
            ),
        }

        self.assertEqual(
            git_objects.raw_extrinsic_metadata_git_object(
                RawExtrinsicMetadata.from_dict(self.minimal)),
            git_objects.raw_extrinsic_metadata_git_object(
                RawExtrinsicMetadata.from_dict(metadata)),
        )
        self.assertEqual(
            RawExtrinsicMetadata.from_dict(self.minimal).id,
            RawExtrinsicMetadata.from_dict(metadata).id,
        )
        self.assertEqual(
            RawExtrinsicMetadata.from_dict(metadata).id,
            _x("5c13f20ba336e44549baf3d7b9305b027ec9f43d"),
        )
Example #3
0
    def test_maximal(self):
        git_object = (
            b"raw_extrinsic_metadata 533\0"
            b"target swh:1:cnt:568aaf43d83b2c3df8067f3bedbb97d83260be6d\n"
            b"discovery_date 1611574071\n"
            b"authority forge https://forge.softwareheritage.org/\n"
            b"fetcher swh-phabricator-metadata-fetcher 0.0.1\n"
            b"format json\n"
            b"origin https://forge.softwareheritage.org/source/swh-model/\n"
            b"visit 42\n"
            b"snapshot swh:1:snp:0000000000000000000000000000000000000000\n"
            b"release swh:1:rel:0101010101010101010101010101010101010101\n"
            b"revision swh:1:rev:0202020202020202020202020202020202020202\n"
            b"path /abc/def\n"
            b"directory swh:1:dir:0303030303030303030303030303030303030303\n"
            b"\n"
            b'{"foo": "bar"}')

        self.assertEqual(
            git_objects.raw_extrinsic_metadata_git_object(
                RawExtrinsicMetadata.from_dict(self.maximal)),
            git_object,
        )
        self.assertEqual(
            RawExtrinsicMetadata.from_dict(self.maximal).id,
            hashlib.sha1(git_object).digest(),
        )
        self.assertEqual(
            RawExtrinsicMetadata.from_dict(self.maximal).id,
            _x("f96966e1093d15236a31fde07e47d5b1c9428049"),
        )
def test_QualifiedSWHID_eq():
    object_id = _x("94a9ed024d3859793618152ea559a168bbcbb5e2")

    assert QualifiedSWHID(
        object_type=ObjectType.DIRECTORY, object_id=object_id
    ) == QualifiedSWHID(object_type=ObjectType.DIRECTORY, object_id=object_id)

    assert QualifiedSWHID(
        object_type=ObjectType.DIRECTORY,
        object_id=object_id,
        **dummy_qualifiers,
    ) == QualifiedSWHID(
        object_type=ObjectType.DIRECTORY,
        object_id=object_id,
        **dummy_qualifiers,
    )

    assert QualifiedSWHID(
        object_type=ObjectType.DIRECTORY,
        object_id=object_id,
        **dummy_qualifiers,
    ) == QualifiedSWHID(
        object_type=ObjectType.DIRECTORY,
        object_id=object_id,
        **dummy_qualifiers,
    )
def test_ExtendedSWHID_hash():
    object_id = _x("94a9ed024d3859793618152ea559a168bbcbb5e2")

    assert hash(
        ExtendedSWHID(object_type=ExtendedObjectType.DIRECTORY, object_id=object_id)
    ) == hash(
        ExtendedSWHID(object_type=ExtendedObjectType.DIRECTORY, object_id=object_id)
    )

    assert hash(
        ExtendedSWHID(
            object_type=ExtendedObjectType.DIRECTORY,
            object_id=object_id,
        )
    ) == hash(
        ExtendedSWHID(
            object_type=ExtendedObjectType.DIRECTORY,
            object_id=object_id,
        )
    )

    # Different order of the dictionary, so the underlying order of the tuple in
    # ImmutableDict is different.
    assert hash(
        ExtendedSWHID(
            object_type=ExtendedObjectType.DIRECTORY,
            object_id=object_id,
        )
    ) == hash(
        ExtendedSWHID(
            object_type=ExtendedObjectType.DIRECTORY,
            object_id=object_id,
        )
    )
Example #6
0
    def test_timezone_insensitive(self):
        """Checks the timezone of the datetime.datetime does not affect the
        hashed git_object."""
        utc_plus_one = datetime.timezone(datetime.timedelta(hours=1))
        metadata = {
            **self.minimal,
            "discovery_date":
            datetime.datetime(
                2021,
                1,
                25,
                12,
                27,
                51,
                tzinfo=utc_plus_one,
            ),
        }

        self.assertEqual(
            git_objects.raw_extrinsic_metadata_git_object(
                RawExtrinsicMetadata.from_dict(self.minimal)),
            git_objects.raw_extrinsic_metadata_git_object(
                RawExtrinsicMetadata.from_dict(metadata)),
        )
        self.assertEqual(
            RawExtrinsicMetadata.from_dict(self.minimal).id,
            RawExtrinsicMetadata.from_dict(metadata).id,
        )
        self.assertEqual(
            RawExtrinsicMetadata.from_dict(metadata).id,
            _x("5c13f20ba336e44549baf3d7b9305b027ec9f43d"),
        )
Example #7
0
    def test_nonascii_path(self):
        metadata = {
            **self.minimal,
            "path": b"/ab\nc/d\xf0\x9f\xa4\xb7e\x00f",
        }
        git_object = (
            b"raw_extrinsic_metadata 231\0"
            b"target swh:1:cnt:568aaf43d83b2c3df8067f3bedbb97d83260be6d\n"
            b"discovery_date 1611574071\n"
            b"authority forge https://forge.softwareheritage.org/\n"
            b"fetcher swh-phabricator-metadata-fetcher 0.0.1\n"
            b"format json\n"
            b"path /ab\n"
            b" c/d\xf0\x9f\xa4\xb7e\x00f\n"
            b"\n"
            b'{"foo": "bar"}')

        self.assertEqual(
            git_objects.raw_extrinsic_metadata_git_object(
                RawExtrinsicMetadata.from_dict(metadata)),
            git_object,
        )
        self.assertEqual(
            RawExtrinsicMetadata.from_dict(metadata).id,
            hashlib.sha1(git_object).digest(),
        )
        self.assertEqual(
            RawExtrinsicMetadata.from_dict(metadata).id,
            _x("7cc83fd1912176510c083f5df43f01b09af4b333"),
        )
def test_QualifiedSWHID_init(object_type, qualifiers, expected):
    """Tests validation and converters of qualifiers"""
    if isinstance(expected, type):
        assert issubclass(expected, Exception)
        with pytest.raises(expected):
            QualifiedSWHID(object_type=object_type, object_id=_x(HASH), **qualifiers)
    else:
        assert isinstance(expected, str)
        swhid = QualifiedSWHID(
            object_type=object_type, object_id=_x(HASH), **qualifiers
        )

        # Check the build object has the right serialization
        assert expected == str(swhid)

        # Check the internal state of the object is the same as if parsed from a string
        assert QualifiedSWHID.from_string(expected) == swhid
def test_ExtendedSWHID_validation_error(ns, version, type, id):
    with pytest.raises(ValidationError):
        ExtendedSWHID(
            namespace=ns,
            scheme_version=version,
            object_type=type,
            object_id=_x(id),
        )
Example #10
0
def test_QualifiedSWHID_validation_error(ns, version, type, id, qualifiers):
    with pytest.raises(ValidationError):
        QualifiedSWHID(
            namespace=ns,
            scheme_version=version,
            object_type=type,
            object_id=_x(id),
            **qualifiers,
        )
Example #11
0
def test_QualifiedSWHID_serialize_origin():
    """Checks that semicolon in origins are escaped."""
    string = f"swh:1:cnt:{HASH};origin=https://example.org/foo%3Bbar%25baz"
    swhid = QualifiedSWHID(
        object_type=ObjectType.CONTENT,
        object_id=_x(HASH),
        origin="https://example.org/foo;bar%25baz",
    )
    assert str(swhid) == string
Example #12
0
def test_extid_identifier_bwcompat():
    extid_dict = {
        "extid_type": "test-type",
        "extid": b"extid",
        "target": "swh:1:dir:" + "00" * 20,
    }

    assert ExtID.from_dict(extid_dict).id == _x(
        "b9295e1931c31e40a7e3e1e967decd1c89426455")

    assert (ExtID.from_dict({
        **extid_dict, "extid_version": 0
    }).id == ExtID.from_dict(extid_dict).id)

    assert (ExtID.from_dict({
        **extid_dict, "extid_version": 1
    }).id != ExtID.from_dict(extid_dict).id)
Example #13
0
    def test_negative_epoch(self):
        metadata = {
            **self.minimal,
            "discovery_date":
            datetime.datetime(
                1969,
                12,
                31,
                23,
                59,
                59,
                1,
                tzinfo=datetime.timezone.utc,
            ),
        }

        git_object = (
            b"raw_extrinsic_metadata 202\0"
            b"target swh:1:cnt:568aaf43d83b2c3df8067f3bedbb97d83260be6d\n"
            b"discovery_date -1\n"
            b"authority forge https://forge.softwareheritage.org/\n"
            b"fetcher swh-phabricator-metadata-fetcher 0.0.1\n"
            b"format json\n"
            b"\n"
            b'{"foo": "bar"}')

        self.assertEqual(
            git_objects.raw_extrinsic_metadata_git_object(
                RawExtrinsicMetadata.from_dict(metadata)),
            git_object,
        )
        self.assertEqual(
            RawExtrinsicMetadata.from_dict(metadata).id,
            hashlib.sha1(git_object).digest(),
        )
        self.assertEqual(
            RawExtrinsicMetadata.from_dict(metadata).id,
            _x("be7154a8fd49d87f81547ea634d1e2152907d089"),
        )
Example #14
0
def test_ExtendedSWHID_eq():
    object_id = _x("94a9ed024d3859793618152ea559a168bbcbb5e2")

    assert ExtendedSWHID(
        object_type=ExtendedObjectType.DIRECTORY, object_id=object_id
    ) == ExtendedSWHID(object_type=ExtendedObjectType.DIRECTORY, object_id=object_id)

    assert ExtendedSWHID(
        object_type=ExtendedObjectType.DIRECTORY,
        object_id=object_id,
    ) == ExtendedSWHID(
        object_type=ExtendedObjectType.DIRECTORY,
        object_id=object_id,
    )

    assert ExtendedSWHID(
        object_type=ExtendedObjectType.DIRECTORY,
        object_id=object_id,
    ) == ExtendedSWHID(
        object_type=ExtendedObjectType.DIRECTORY,
        object_id=object_id,
    )
Example #15
0
def test_CoreSWHID_eq():
    object_id = _x("94a9ed024d3859793618152ea559a168bbcbb5e2")

    assert CoreSWHID(
        object_type=ObjectType.DIRECTORY, object_id=object_id
    ) == CoreSWHID(object_type=ObjectType.DIRECTORY, object_id=object_id)

    assert CoreSWHID(
        object_type=ObjectType.DIRECTORY,
        object_id=object_id,
    ) == CoreSWHID(
        object_type=ObjectType.DIRECTORY,
        object_id=object_id,
    )

    assert CoreSWHID(
        object_type=ObjectType.DIRECTORY,
        object_id=object_id,
    ) == CoreSWHID(
        object_type=ObjectType.DIRECTORY,
        object_id=object_id,
    )
Example #16
0
    def test_epoch(self):
        metadata = {
            **self.minimal,
            "discovery_date":
            datetime.datetime(
                1970,
                1,
                1,
                0,
                0,
                0,
                tzinfo=datetime.timezone.utc,
            ),
        }

        git_object = (
            b"raw_extrinsic_metadata 201\0"
            b"target swh:1:cnt:568aaf43d83b2c3df8067f3bedbb97d83260be6d\n"
            b"discovery_date 0\n"
            b"authority forge https://forge.softwareheritage.org/\n"
            b"fetcher swh-phabricator-metadata-fetcher 0.0.1\n"
            b"format json\n"
            b"\n"
            b'{"foo": "bar"}')

        self.assertEqual(
            git_objects.raw_extrinsic_metadata_git_object(
                RawExtrinsicMetadata.from_dict(metadata)),
            git_object,
        )
        self.assertEqual(
            RawExtrinsicMetadata.from_dict(metadata).id,
            hashlib.sha1(git_object).digest(),
        )
        self.assertEqual(
            RawExtrinsicMetadata.from_dict(metadata).id,
            _x("27a53df54ace35ebd910493cdc70b334d6b7cb88"),
        )
Example #17
0
def test_QualifiedSWHID_hash():
    object_id = _x("94a9ed024d3859793618152ea559a168bbcbb5e2")

    assert hash(
        QualifiedSWHID(object_type=ObjectType.DIRECTORY, object_id=object_id)
    ) == hash(QualifiedSWHID(object_type=ObjectType.DIRECTORY, object_id=object_id))

    assert hash(
        QualifiedSWHID(
            object_type=ObjectType.DIRECTORY,
            object_id=object_id,
            **dummy_qualifiers,
        )
    ) == hash(
        QualifiedSWHID(
            object_type=ObjectType.DIRECTORY,
            object_id=object_id,
            **dummy_qualifiers,
        )
    )

    # Different order of the dictionary, so the underlying order of the tuple in
    # ImmutableDict is different.
    assert hash(
        QualifiedSWHID(
            object_type=ObjectType.DIRECTORY,
            object_id=object_id,
            origin="https://example.com",
            lines=(42, None),
        )
    ) == hash(
        QualifiedSWHID(
            object_type=ObjectType.DIRECTORY,
            object_id=object_id,
            lines=(42, None),
            origin="https://example.com",
        )
    )
Example #18
0
    def test_negative_timestamp(self):
        metadata = {
            **self.minimal,
            "discovery_date":
            datetime.datetime(
                1960,
                1,
                25,
                11,
                27,
                51,
                tzinfo=datetime.timezone.utc,
            ),
        }

        git_object = (
            b"raw_extrinsic_metadata 210\0"
            b"target swh:1:cnt:568aaf43d83b2c3df8067f3bedbb97d83260be6d\n"
            b"discovery_date -313504329\n"
            b"authority forge https://forge.softwareheritage.org/\n"
            b"fetcher swh-phabricator-metadata-fetcher 0.0.1\n"
            b"format json\n"
            b"\n"
            b'{"foo": "bar"}')

        self.assertEqual(
            git_objects.raw_extrinsic_metadata_git_object(
                RawExtrinsicMetadata.from_dict(metadata)),
            git_object,
        )
        self.assertEqual(
            RawExtrinsicMetadata.from_dict(metadata).id,
            hashlib.sha1(git_object).digest(),
        )
        self.assertEqual(
            RawExtrinsicMetadata.from_dict(metadata).id,
            _x("895d0821a2991dd376ddc303424aceb7c68280f9"),
        )
Example #19
0
    def test_minimal(self):
        git_object = (
            b"raw_extrinsic_metadata 210\0"
            b"target swh:1:cnt:568aaf43d83b2c3df8067f3bedbb97d83260be6d\n"
            b"discovery_date 1611574071\n"
            b"authority forge https://forge.softwareheritage.org/\n"
            b"fetcher swh-phabricator-metadata-fetcher 0.0.1\n"
            b"format json\n"
            b"\n"
            b'{"foo": "bar"}')

        self.assertEqual(
            git_objects.raw_extrinsic_metadata_git_object(
                RawExtrinsicMetadata.from_dict(self.minimal)),
            git_object,
        )
        self.assertEqual(
            RawExtrinsicMetadata.from_dict(self.minimal).id,
            hashlib.sha1(git_object).digest(),
        )
        self.assertEqual(
            RawExtrinsicMetadata.from_dict(self.minimal).id,
            _x("5c13f20ba336e44549baf3d7b9305b027ec9f43d"),
        )
Example #20
0

class ContentIdentifier(unittest.TestCase):
    def setUp(self):
        self.content_id = hashutil.MultiHash.from_data(
            content_example["data"]).digest()

    def test_content_identifier(self):
        self.assertEqual(
            Content.from_data(content_example["data"]).hashes(),
            self.content_id)


directory_example = {
    "id":
    _x("d7ed3d2c31d608823be58b1cbe57605310615231"),
    "entries": [
        {
            "type": "file",
            "perms": 33188,
            "name": b"README",
            "target": _x("37ec8ea2110c0b7a32fbb0e872f6e7debbf95e21"),
        },
        {
            "type": "file",
            "perms": 33188,
            "name": b"Rakefile",
            "target": _x("3bb0e8592a41ae3185ee32266c860714980dbed7"),
        },
        {
            "type": "dir",
Example #21
0
 def test_content_identifier(self):
     self.assertEqual(
         Origin.from_dict(origin_example).id,
         _x("b63a575fe3faab7692c9f38fb09d4bb45651bb0f"),
     )
Example #22
0
 def test_dir_identifier_empty_directory(self):
     self.assertEqual(
         Directory.from_dict(remove_id(self.empty_directory)).id,
         _x(self.empty_directory["id"]),
     )
Example #23
0
    def setUp(self):
        gpgsig = b"""\
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.13 (Darwin)

iQIcBAABAgAGBQJVJcYsAAoJEBiY3kIkQRNJVAUQAJ8/XQIfMqqC5oYeEFfHOPYZ
L7qy46bXHVBa9Qd8zAJ2Dou3IbI2ZoF6/Et89K/UggOycMlt5FKV/9toWyuZv4Po
L682wonoxX99qvVTHo6+wtnmYO7+G0f82h+qHMErxjP+I6gzRNBvRr+SfY7VlGdK
wikMKOMWC5smrScSHITnOq1Ews5pe3N7qDYMzK0XVZmgDoaem4RSWMJs4My/qVLN
e0CqYWq2A22GX7sXl6pjneJYQvcAXUX+CAzp24QnPSb+Q22Guj91TcxLFcHCTDdn
qgqMsEyMiisoglwrCbO+D+1xq9mjN9tNFWP66SQ48mrrHYTBV5sz9eJyDfroJaLP
CWgbDTgq6GzRMehHT3hXfYS5NNatjnhkNISXR7pnVP/obIi/vpWh5ll6Gd8q26z+
a/O41UzOaLTeNI365MWT4/cnXohVLRG7iVJbAbCxoQmEgsYMRc/pBAzWJtLfcB2G
jdTswYL6+MUdL8sB9pZ82D+BP/YAdHe69CyTu1lk9RT2pYtI/kkfjHubXBCYEJSG
+VGllBbYG6idQJpyrOYNRJyrDi9yvDJ2W+S0iQrlZrxzGBVGTB/y65S8C+2WTBcE
lf1Qb5GDsQrZWgD+jtWTywOYHtCBwyCKSAXxSARMbNPeak9WPlcW/Jmu+fUcMe2x
dg1KdHOa34shrKDaOVzW
=od6m
-----END PGP SIGNATURE-----"""

        self.revision = revision_example

        self.revision_none_metadata = {
            "id":
            _x("bc0195aad0daa2ad5b0d76cce22b167bc3435590"),
            "directory":
            _x("85a74718d377195e1efd0843ba4f3260bad4fe07"),
            "parents": [_x("01e2d0627a9a6edb24c37db45db5ecb31e9de808")],
            "author": {
                "name": b"Linus Torvalds",
                "email": b"*****@*****.**",
            },
            "date":
            datetime.datetime(2015, 7, 12, 15, 10, 30, tzinfo=linus_tz),
            "committer": {
                "name": b"Linus Torvalds",
                "email": b"*****@*****.**",
            },
            "committer_date":
            datetime.datetime(2015, 7, 12, 15, 10, 30, tzinfo=linus_tz),
            "message":
            b"Linux 4.2-rc2\n",
            "type":
            "git",
            "synthetic":
            False,
            "metadata":
            None,
        }

        self.synthetic_revision = {
            "id": _x("b2a7e1260492e344fab3cbf91bc13c91e05426fd"),
            "author": {
                "name": b"Software Heritage",
                "email": b"*****@*****.**",
            },
            "date": {
                "timestamp": {
                    "seconds": 1437047495
                },
                "offset_bytes": b"+0000",
            },
            "type": "tar",
            "committer": {
                "name": b"Software Heritage",
                "email": b"*****@*****.**",
            },
            "committer_date": 1437047495,
            "synthetic": True,
            "parents": [],
            "message": b"synthetic revision message\n",
            "directory": _x("d11f00a6a0fea6055341d25584b5a96516c0d2b8"),
            "metadata": {
                "original_artifact": [{
                    "archive_type":
                    "tar",
                    "name":
                    "gcc-5.2.0.tar.bz2",
                    "sha1_git":
                    "39d281aff934d44b439730057e55b055e206a586",
                    "sha1":
                    "fe3f5390949d47054b613edc36c557eb1d51c18e",
                    "sha256":
                    "5f835b04b5f7dd4f4d2dc96190ec1621b8d89f"
                    "2dc6f638f9f8bc1b1014ba8cad",
                }]
            },
        }

        # cat commit.txt | git hash-object -t commit --stdin
        self.revision_with_extra_headers = {
            "id":
            _x("010d34f384fa99d047cdd5e2f41e56e5c2feee45"),
            "directory":
            _x("85a74718d377195e1efd0843ba4f3260bad4fe07"),
            "parents": [_x("01e2d0627a9a6edb24c37db45db5ecb31e9de808")],
            "author": {
                "name": b"Linus Torvalds",
                "email": b"*****@*****.**",
                "fullname": b"Linus Torvalds <*****@*****.**>",
            },
            "date":
            datetime.datetime(2015, 7, 12, 15, 10, 30, tzinfo=linus_tz),
            "committer": {
                "name": b"Linus Torvalds",
                "email": b"*****@*****.**",
                "fullname": b"Linus Torvalds <*****@*****.**>",
            },
            "committer_date":
            datetime.datetime(2015, 7, 12, 15, 10, 30, tzinfo=linus_tz),
            "message":
            b"Linux 4.2-rc2\n",
            "type":
            "git",
            "synthetic":
            False,
            "extra_headers": (
                (b"svn-repo-uuid", b"046f1af7-66c2-d61b-5410-ce57b7db7bff"),
                (b"svn-revision", b"10"),
            ),
        }

        self.revision_with_gpgsig = {
            "id":
            _x("44cc742a8ca17b9c279be4cc195a93a6ef7a320e"),
            "directory":
            _x("b134f9b7dc434f593c0bab696345548b37de0558"),
            "parents": [
                _x("689664ae944b4692724f13b709a4e4de28b54e57"),
                _x("c888305e1efbaa252d01b4e5e6b778f865a97514"),
            ],
            "author": {
                "name": b"Jiang Xin",
                "email": b"*****@*****.**",
                "fullname": b"Jiang Xin <*****@*****.**>",
            },
            "date": {
                "timestamp": 1428538899,
                "offset": 480,
            },
            "committer": {
                "name": b"Jiang Xin",
                "email": b"*****@*****.**",
            },
            "committer_date": {
                "timestamp": 1428538899,
                "offset": 480,
            },
            "extra_headers": ((b"gpgsig", gpgsig), ),
            "message":
            b"""Merge branch 'master' of git://github.com/alexhenrie/git-po

* 'master' of git://github.com/alexhenrie/git-po:
  l10n: ca.po: update translation
""",
            "type":
            "git",
            "synthetic":
            False,
        }

        self.revision_no_message = {
            "id":
            _x("4cfc623c9238fa92c832beed000ce2d003fd8333"),
            "directory":
            _x("b134f9b7dc434f593c0bab696345548b37de0558"),
            "parents": [
                _x("689664ae944b4692724f13b709a4e4de28b54e57"),
                _x("c888305e1efbaa252d01b4e5e6b778f865a97514"),
            ],
            "author": {
                "name": b"Jiang Xin",
                "email": b"*****@*****.**",
                "fullname": b"Jiang Xin <*****@*****.**>",
            },
            "date": {
                "timestamp": 1428538899,
                "offset": 480,
            },
            "committer": {
                "name": b"Jiang Xin",
                "email": b"*****@*****.**",
            },
            "committer_date": {
                "timestamp": 1428538899,
                "offset": 480,
            },
            "message":
            None,
            "type":
            "git",
            "synthetic":
            False,
        }

        self.revision_empty_message = {
            "id":
            _x("7442cd78bd3b4966921d6a7f7447417b7acb15eb"),
            "directory":
            _x("b134f9b7dc434f593c0bab696345548b37de0558"),
            "parents": [
                _x("689664ae944b4692724f13b709a4e4de28b54e57"),
                _x("c888305e1efbaa252d01b4e5e6b778f865a97514"),
            ],
            "author": {
                "name": b"Jiang Xin",
                "email": b"*****@*****.**",
                "fullname": b"Jiang Xin <*****@*****.**>",
            },
            "date": {
                "timestamp": 1428538899,
                "offset": 480,
            },
            "committer": {
                "name": b"Jiang Xin",
                "email": b"*****@*****.**",
            },
            "committer_date": {
                "timestamp": 1428538899,
                "offset": 480,
            },
            "message":
            b"",
            "type":
            "git",
            "synthetic":
            False,
        }

        self.revision_only_fullname = {
            "id":
            _x("010d34f384fa99d047cdd5e2f41e56e5c2feee45"),
            "directory":
            _x("85a74718d377195e1efd0843ba4f3260bad4fe07"),
            "parents": [_x("01e2d0627a9a6edb24c37db45db5ecb31e9de808")],
            "author": {
                "fullname": b"Linus Torvalds <*****@*****.**>",
            },
            "date":
            datetime.datetime(2015, 7, 12, 15, 10, 30, tzinfo=linus_tz),
            "committer": {
                "fullname": b"Linus Torvalds <*****@*****.**>",
            },
            "committer_date":
            datetime.datetime(2015, 7, 12, 15, 10, 30, tzinfo=linus_tz),
            "message":
            b"Linux 4.2-rc2\n",
            "type":
            "git",
            "synthetic":
            False,
            "extra_headers": (
                (b"svn-repo-uuid", b"046f1af7-66c2-d61b-5410-ce57b7db7bff"),
                (b"svn-revision", b"10"),
            ),
        }
Example #24
0
    def setUp(self):
        linus_tz = datetime.timezone(datetime.timedelta(minutes=-420))

        self.release = release_example

        self.release_no_author = {
            "id": _x("26791a8bcf0e6d33f43aef7682bdb555236d56de"),
            "target": _x("9ee1c939d1cb936b1f98e8d81aeffab57bae46ab"),
            "target_type": "revision",
            "name": b"v2.6.12",
            "message": b"""\
This is the final 2.6.12 release
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQBCsykyF3YsRnbiHLsRAvPNAJ482tCZwuxp/bJRz7Q98MHlN83TpACdHr37
o6X/3T+vm8K3bf3driRr34c=
=sBHn
-----END PGP SIGNATURE-----
""",
            "synthetic": False,
        }

        self.release_no_message = {
            "id": _x("b6f4f446715f7d9543ef54e41b62982f0db40045"),
            "target": _x("9ee1c939d1cb936b1f98e8d81aeffab57bae46ab"),
            "target_type": "revision",
            "name": b"v2.6.12",
            "author": {
                "name": b"Linus Torvalds",
                "email": b"*****@*****.**",
            },
            "date": datetime.datetime(2005, 10, 27, 17, 2, 33,
                                      tzinfo=linus_tz),
            "message": None,
            "synthetic": False,
        }

        self.release_empty_message = {
            "id": _x("71a0aea72444d396575dc25ac37fec87ee3c6492"),
            "target": _x("9ee1c939d1cb936b1f98e8d81aeffab57bae46ab"),
            "target_type": "revision",
            "name": b"v2.6.12",
            "author": {
                "name": b"Linus Torvalds",
                "email": b"*****@*****.**",
            },
            "date": datetime.datetime(2005, 10, 27, 17, 2, 33,
                                      tzinfo=linus_tz),
            "message": b"",
            "synthetic": False,
        }

        self.release_negative_utc = {
            "id": _x("97c8d2573a001f88e72d75f596cf86b12b82fd01"),
            "name": b"20081029",
            "target": _x("54e9abca4c77421e2921f5f156c9fe4a9f7441c7"),
            "target_type": "revision",
            "date": {
                "timestamp": {
                    "seconds": 1225281976
                },
                "offset_bytes": b"-0000",
            },
            "author": {
                "name": b"Otavio Salvador",
                "email": b"*****@*****.**",
            },
            "synthetic": False,
            "message": b"tagging version 20081029\n\nr56558\n",
        }

        self.release_newline_in_author = {
            "author": {
                "email": b"*****@*****.**",
                "fullname": b"Eugene Janusov\n<*****@*****.**>",
                "name": b"Eugene Janusov\n",
            },
            "date": {
                "offset_bytes": b"+1000",
                "timestamp": {
                    "microseconds": 0,
                    "seconds": 1377480558,
                },
            },
            "id": _x("5c98f559d034162de22d3ebeb95433e6f8885231"),
            "message": b"Release of v0.3.2.",
            "name": b"0.3.2",
            "synthetic": False,
            "target": _x("c06aa3d93b78a2865c4935170030f8c2d7396fd3"),
            "target_type": "revision",
        }

        self.release_snapshot_target = dict(self.release)
        self.release_snapshot_target["target_type"] = "snapshot"
        self.release_snapshot_target["id"] = _x(
            "c29c3ddcc6769a04e54dd69d63a6fdcbc566f850")
Example #25
0
def test_swhid_parsing_error(invalid_swhid, swhid_class):
    """Tests SWHID strings that are invalid for all SWHID classes do raise
    a ValidationError"""
    with pytest.raises(ValidationError):
        swhid_class.from_string(invalid_swhid)


# string SWHIDs, and how they should be parsed by each of the classes,
# or None if the class does not support it
HASH = "94a9ed024d3859793618152ea559a168bbcbb5e2"
VALID_SWHIDS = [
    (
        f"swh:1:cnt:{HASH}",
        CoreSWHID(
            object_type=ObjectType.CONTENT,
            object_id=_x(HASH),
        ),
        QualifiedSWHID(
            object_type=ObjectType.CONTENT,
            object_id=_x(HASH),
        ),
        ExtendedSWHID(
            object_type=ExtendedObjectType.CONTENT,
            object_id=_x(HASH),
        ),
    ),
    (
        f"swh:1:dir:{HASH}",
        CoreSWHID(
            object_type=ObjectType.DIRECTORY,
            object_id=_x(HASH),