swh:1:snp:eb70f1f85391e4b077c211bec36af0061c4bf937
Raw File
Tip revision: c21d0e38204aaca3999c00f2346b0d5c69a2ddff authored by Antoine R. Dumont (@ardumont) on 07 July 2020, 09:09:25 UTC
Move sharable fixtures out of conftest into a dedicated pytest plugin
Tip revision: c21d0e3
test_revision_bw_compat.py
# Copyright (C) 2020  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

import attr

from swh.core.utils import decode_with_escape
from swh.model.model import Revision
from swh.storage import get_storage
from swh.storage.tests.storage_data import data
from swh.storage.tests.test_storage import db_transaction


def headers_to_db(git_headers):
    return [[key, decode_with_escape(value)] for key, value in git_headers]


def test_revision_extra_header_in_metadata(swh_storage_backend_config):
    storage = get_storage(**swh_storage_backend_config)
    rev = Revision.from_dict(data.revision)

    md_w_extra = dict(
        rev.metadata.items(),
        extra_headers=headers_to_db(
            [
                ["gpgsig", b"test123"],
                ["mergetag", b"foo\\bar"],
                ["mergetag", b"\x22\xaf\x89\x80\x01\x00"],
            ]
        ),
    )

    bw_rev = attr.evolve(rev, extra_headers=())
    object.__setattr__(bw_rev, "metadata", md_w_extra)
    assert bw_rev.extra_headers == ()

    assert storage.revision_add([bw_rev]) == {"revision:add": 1}

    # check data in the db are old format
    with db_transaction(storage) as (_, cur):
        cur.execute("SELECT metadata, extra_headers FROM revision")
        metadata, extra_headers = cur.fetchone()
    assert extra_headers == []
    assert metadata == bw_rev.metadata

    # check the Revision build from revision_get is the original, "new style", Revision
    assert [Revision.from_dict(x) for x in storage.revision_get([rev.id])] == [rev]
back to top