Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/git/tests/test_loader.py
# Copyright (C) 2018-2020 The Software Heritage developers | # Copyright (C) 2018-2021 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 os | import os | ||||
from unittest import TestCase | from unittest import TestCase | ||||
import dulwich.repo | import dulwich.repo | ||||
import pytest | import pytest | ||||
from swh.loader.git.loader import GitLoader | from swh.loader.git.loader import GitLoader | ||||
from swh.loader.git.tests.test_from_disk import FullGitLoaderTests | from swh.loader.git.tests.test_from_disk import FullGitLoaderTests | ||||
from swh.loader.tests import prepare_repository_from_archive | from swh.loader.tests import assert_last_visit_matches, prepare_repository_from_archive | ||||
class GitLoaderTest(TestCase, FullGitLoaderTests): | class CommonGitLoaderNotFound: | ||||
@pytest.fixture(autouse=True) | |||||
def __inject_fixtures(self, mocker): | |||||
"""Inject required fixtures in unittest.TestCase class | |||||
""" | |||||
ardumont: injecting fixture in unittest case does not work so i'm using this contraption ^ to simulate it. | |||||
self.mocker = mocker | |||||
def test_load_visit_not_found(self): | |||||
"""Ingesting an unknown url result in a visit with not_found status | |||||
""" | |||||
mock = self.mocker.patch( | |||||
"swh.loader.git.loader.GitLoader.fetch_pack_from_origin" | |||||
) | |||||
# fetch communicates with the external world and could raise error, though | |||||
# self.client.fetch_pack (e.g dulwich.client.HTTPUnauthorized, ...), this | |||||
# simulates it. | |||||
mock.side_effect = ValueError | |||||
res = self.loader.load() | |||||
assert res == {"status": "uneventful"} | |||||
assert_last_visit_matches( | |||||
self.loader.storage, | |||||
self.repo_url, | |||||
status="not_found", | |||||
type="git", | |||||
snapshot=None, | |||||
) | |||||
class GitLoaderTest(TestCase, FullGitLoaderTests, CommonGitLoaderNotFound): | |||||
Done Inline Actions(pytest.mark.parametrize does not work with unittest class.) ardumont: (pytest.mark.parametrize does not work with unittest class.) | |||||
Done Inline Actionsvlorentz: https://docs.python.org/3/library/unittest.html#distinguishing-test-iterations-using-subtests | |||||
Done Inline ActionsThanks but I don't immediately see what's the benefit of the subtest. ardumont: Thanks but I don't immediately see what's the benefit of the subtest.
| |||||
Done Inline Actionssame as parametrized tests: it runs and reports them independently vlorentz: same as parametrized tests: it runs and reports them independently | |||||
"""Prepare a git directory repository to be loaded through a GitLoader. | """Prepare a git directory repository to be loaded through a GitLoader. | ||||
This tests all git loader scenario. | This tests all git loader scenario. | ||||
""" | """ | ||||
@pytest.fixture(autouse=True) | @pytest.fixture(autouse=True) | ||||
def init(self, swh_config, datadir, tmp_path): | def init(self, swh_config, datadir, tmp_path): | ||||
super().setUp() | super().setUp() | ||||
archive_name = "testrepo" | archive_name = "testrepo" | ||||
archive_path = os.path.join(datadir, f"{archive_name}.tgz") | archive_path = os.path.join(datadir, f"{archive_name}.tgz") | ||||
tmp_path = str(tmp_path) | tmp_path = str(tmp_path) | ||||
self.repo_url = prepare_repository_from_archive( | self.repo_url = prepare_repository_from_archive( | ||||
archive_path, archive_name, tmp_path=tmp_path | archive_path, archive_name, tmp_path=tmp_path | ||||
) | ) | ||||
self.destination_path = os.path.join(tmp_path, archive_name) | self.destination_path = os.path.join(tmp_path, archive_name) | ||||
self.loader = GitLoader(self.repo_url) | self.loader = GitLoader(self.repo_url) | ||||
self.repo = dulwich.repo.Repo(self.destination_path) | self.repo = dulwich.repo.Repo(self.destination_path) | ||||
class GitLoader2Test(TestCase, FullGitLoaderTests): | class GitLoader2Test(TestCase, FullGitLoaderTests, CommonGitLoaderNotFound): | ||||
"""Mostly the same loading scenario but with a base-url different than the repo-url. | """Mostly the same loading scenario but with a base-url different than the repo-url. | ||||
To walk slightly different paths, the end result should stay the same. | To walk slightly different paths, the end result should stay the same. | ||||
""" | """ | ||||
@pytest.fixture(autouse=True) | @pytest.fixture(autouse=True) | ||||
def init(self, swh_loader_config, datadir, tmp_path): | def init(self, swh_loader_config, datadir, tmp_path): | ||||
super().setUp() | super().setUp() | ||||
Show All 12 Lines |
injecting fixture in unittest case does not work so i'm using this contraption ^ to simulate it.