summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--buildstream/plugintestutils/__init__.py63
-rw-r--r--buildstream/plugintestutils/repo.py109
-rw-r--r--tests/elements/filter.py2
-rw-r--r--tests/format/include.py4
-rw-r--r--tests/format/junctions.py2
-rw-r--r--tests/frontend/buildtrack.py3
-rw-r--r--tests/frontend/cross_junction_workspace.py3
-rw-r--r--tests/frontend/fetch.py4
-rw-r--r--tests/frontend/logging.py2
-rw-r--r--tests/frontend/mirror.py3
-rw-r--r--tests/frontend/order.py2
-rw-r--r--tests/frontend/track.py4
-rw-r--r--tests/frontend/workspace.py4
-rw-r--r--tests/integration/source-determinism.py2
-rw-r--r--tests/sourcecache/fetch.py4
-rw-r--r--tests/sourcecache/push.py3
-rw-r--r--tests/sources/__init__.py13
-rw-r--r--tests/sources/bzr.py2
-rw-r--r--tests/sources/generic/build_checkout.py3
-rw-r--r--tests/sources/generic/fetch.py3
-rw-r--r--tests/sources/generic/mirror.py3
-rw-r--r--tests/sources/generic/source_determinism.py2
-rw-r--r--tests/sources/generic/track.py3
-rw-r--r--tests/sources/generic/track_cross_junction.py3
-rw-r--r--tests/sources/generic/workspace.py3
-rw-r--r--tests/sources/git.py2
-rw-r--r--tests/sources/no_fetch_cached.py2
-rw-r--r--tests/sources/ostree.py3
-rw-r--r--tests/testutils/__init__.py1
-rw-r--r--tests/testutils/element_generators.py3
-rw-r--r--tests/testutils/junction.py3
-rw-r--r--tests/testutils/repo/__init__.py31
-rw-r--r--tests/testutils/repo/bzr.py2
-rw-r--r--tests/testutils/repo/git.py2
-rw-r--r--tests/testutils/repo/ostree.py2
-rw-r--r--tests/testutils/repo/repo.py90
-rw-r--r--tests/testutils/repo/tar.py2
-rw-r--r--tests/testutils/repo/zip.py2
38 files changed, 227 insertions, 167 deletions
diff --git a/buildstream/plugintestutils/__init__.py b/buildstream/plugintestutils/__init__.py
index 9ec18df19..a052e4780 100644
--- a/buildstream/plugintestutils/__init__.py
+++ b/buildstream/plugintestutils/__init__.py
@@ -15,7 +15,9 @@
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
+from collections import OrderedDict
+from .repo import Repo
from .runcli import cli, cli_integration, cli_remote_execution
# To make use of these test utilities it is necessary to have pytest
@@ -28,3 +30,64 @@ except ImportError:
msg = "Could not import pytest:\n" \
"To use the {} module, you must have pytest installed.".format(module_name)
raise ImportError(msg)
+
+
+ALL_REPO_KINDS = OrderedDict()
+
+
+def create_repo(kind, directory, subdir='repo'):
+ """Convenience method for creating a Repo
+
+ Args:
+ kind (str): The kind of repo to create (a source plugin basename). This
+ must have previously been registered using
+ `register_repo_kind`
+ directory (str): The path where the repo will keep a cache
+
+ Returns:
+ (Repo): A new Repo object
+ """
+ try:
+ constructor = ALL_REPO_KINDS[kind]
+ except KeyError as e:
+ raise AssertionError("Unsupported repo kind {}".format(kind)) from e
+
+ return constructor(directory, subdir=subdir)
+
+
+def register_repo_kind(kind, cls):
+ """Register a new repo kind.
+
+ Registering a repo kind will allow the use of the `create_repo`
+ method for that kind and include that repo kind in ALL_REPO_KINDS
+
+ In addition, repo_kinds registred prior to
+ `sourcetests_collection_hook` being called will be automatically
+ used to test the basic behaviour of their associated source
+ plugins using the tests in `plugintestutils._sourcetests`.
+
+ Args:
+ kind (str): The kind of repo to create (a source plugin basename)
+ cls (cls) : A class derived from Repo.
+
+ """
+ ALL_REPO_KINDS[kind] = cls
+
+
+def sourcetests_collection_hook(session):
+ """ Used to hook the templated source plugin tests into a pyest test suite.
+
+ This should be called via the `pytest_sessionstart
+ hook <https://docs.pytest.org/en/latest/reference.html#collection-hooks>`_.
+ The tests in the _sourcetests package will be collected as part of
+ whichever test package this hook is called from.
+
+ Args:
+ session (pytest.Session): The current pytest session
+ """
+ SOURCE_TESTS_PATH = os.path.dirname(_sourcetests.__file__)
+ # Add the location of the source tests to the session's
+ # python_files config. Without this, pytest may filter out these
+ # tests during collection.
+ session.config.addinivalue_line("python_files", os.path.join(SOURCE_TESTS_PATH, "/**.py"))
+ session.config.args.append(SOURCE_TESTS_PATH)
diff --git a/buildstream/plugintestutils/repo.py b/buildstream/plugintestutils/repo.py
new file mode 100644
index 000000000..e3293ea75
--- /dev/null
+++ b/buildstream/plugintestutils/repo.py
@@ -0,0 +1,109 @@
+#
+# Copyright (C) 2016-2018 Codethink Limited
+# Copyright (C) 2019 Bloomberg Finance LP
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library. If not, see <http://www.gnu.org/licenses/>.
+
+"""
+Repo - Utility class for testing source plugins
+===============================================
+
+
+"""
+import os
+import shutil
+
+
+class Repo():
+ """Repo()
+
+ Abstract class providing scaffolding for generating data to be
+ used with various sources. Subclasses of Repo may be registered to
+ run through the suite of generic source plugin tests provided in
+ buildstream.plugintestutils.
+
+ Args:
+ directory (str): The base temp directory for the test
+ subdir (str): The subdir for the repo, in case there is more than one
+
+ """
+ def __init__(self, directory, subdir='repo'):
+
+ # The working directory for the repo object
+ #
+ self.directory = os.path.abspath(directory)
+
+ # The directory the actual repo will be stored in
+ self.repo = os.path.join(self.directory, subdir)
+
+ os.makedirs(self.repo, exist_ok=True)
+
+ def create(self, directory):
+ """Create a repository in self.directory and add the initial content
+
+ Args:
+ directory: A directory with content to commit
+
+ Returns:
+ (smth): A new ref corresponding to this commit, which can
+ be passed as the ref in the Repo.source_config() API.
+ """
+ raise NotImplementedError("create method has not been implemeted")
+
+ def source_config(self, ref=None):
+ """
+ Args:
+ ref (smth): An optional abstract ref object, usually a string.
+
+ Returns:
+ (dict): A configuration which can be serialized as a
+ source when generating an element file on the fly
+
+ """
+ raise NotImplementedError("source_config method has not been implemeted")
+
+ def copy_directory(self, src, dest):
+ """ Copies the content of src to the directory dest
+
+ Like shutil.copytree(), except dest is expected
+ to exist.
+
+ Args:
+ src (str): The source directory
+ dest (str): The destination directory
+ """
+ for filename in os.listdir(src):
+ src_path = os.path.join(src, filename)
+ dest_path = os.path.join(dest, filename)
+ if os.path.isdir(src_path):
+ shutil.copytree(src_path, dest_path)
+ else:
+ shutil.copy2(src_path, dest_path)
+
+ def copy(self, dest):
+ """Creates a copy of this repository in the specified destination.
+
+ Args:
+ dest (str): The destination directory
+
+ Returns:
+ (Repo): A Repo object for the new repository.
+ """
+ subdir = self.repo[len(self.directory):].lstrip(os.sep)
+ new_dir = os.path.join(dest, subdir)
+ os.makedirs(new_dir, exist_ok=True)
+ self.copy_directory(self.repo, new_dir)
+ repo_type = type(self)
+ new_repo = repo_type(dest, subdir)
+ return new_repo
diff --git a/tests/elements/filter.py b/tests/elements/filter.py
index 1579bf06c..2c5ca88b7 100644
--- a/tests/elements/filter.py
+++ b/tests/elements/filter.py
@@ -6,7 +6,7 @@ import shutil
import pytest
-from tests.testutils import create_repo
+from buildstream.plugintestutils import create_repo
from buildstream.plugintestutils import cli # pylint: disable=unused-import
from buildstream._exceptions import ErrorDomain
from buildstream import _yaml
diff --git a/tests/format/include.py b/tests/format/include.py
index 793bdb0e4..73f8092c5 100644
--- a/tests/format/include.py
+++ b/tests/format/include.py
@@ -7,8 +7,8 @@ import pytest
from buildstream import _yaml
from buildstream._exceptions import ErrorDomain, LoadErrorReason
from buildstream.plugintestutils import cli # pylint: disable=unused-import
-
-from tests.testutils import generate_junction, create_repo
+from buildstream.plugintestutils import create_repo
+from tests.testutils import generate_junction
# Project directory
diff --git a/tests/format/junctions.py b/tests/format/junctions.py
index 3a215761a..94562cb4e 100644
--- a/tests/format/junctions.py
+++ b/tests/format/junctions.py
@@ -9,7 +9,7 @@ import pytest
from buildstream import _yaml
from buildstream._exceptions import ErrorDomain, LoadErrorReason
from buildstream.plugintestutils import cli # pylint: disable=unused-import
-from tests.testutils import create_repo
+from buildstream.plugintestutils import create_repo
from tests.testutils.site import HAVE_GIT
diff --git a/tests/frontend/buildtrack.py b/tests/frontend/buildtrack.py
index 5a3781dc6..d4dc93aac 100644
--- a/tests/frontend/buildtrack.py
+++ b/tests/frontend/buildtrack.py
@@ -8,9 +8,8 @@ import itertools
import pytest
-from tests.testutils import create_repo
-
from buildstream import _yaml
+from buildstream.plugintestutils import create_repo
from buildstream.plugintestutils import cli # pylint: disable=unused-import
from buildstream._exceptions import ErrorDomain
diff --git a/tests/frontend/cross_junction_workspace.py b/tests/frontend/cross_junction_workspace.py
index 88bda857d..a93d5c132 100644
--- a/tests/frontend/cross_junction_workspace.py
+++ b/tests/frontend/cross_junction_workspace.py
@@ -3,10 +3,9 @@
import os
from buildstream.plugintestutils import cli # pylint: disable=unused-import
+from buildstream.plugintestutils import create_repo
from buildstream import _yaml
-from tests.testutils import create_repo
-
def prepare_junction_project(cli, tmpdir):
main_project = tmpdir.join("main")
diff --git a/tests/frontend/fetch.py b/tests/frontend/fetch.py
index 8282e2131..cea7ff129 100644
--- a/tests/frontend/fetch.py
+++ b/tests/frontend/fetch.py
@@ -4,8 +4,8 @@
import os
import pytest
-from tests.testutils import create_repo, generate_junction, yaml_file_get_provenance
-
+from tests.testutils import generate_junction, yaml_file_get_provenance
+from buildstream.plugintestutils import create_repo
from buildstream.plugintestutils import cli # pylint: disable=unused-import
from buildstream import _yaml
from buildstream._exceptions import ErrorDomain, LoadErrorReason
diff --git a/tests/frontend/logging.py b/tests/frontend/logging.py
index 4036a4693..49e3a70c6 100644
--- a/tests/frontend/logging.py
+++ b/tests/frontend/logging.py
@@ -6,7 +6,7 @@ import re
import pytest
-from tests.testutils import create_repo
+from buildstream.plugintestutils import create_repo
from buildstream import _yaml
from buildstream._exceptions import ErrorDomain
diff --git a/tests/frontend/mirror.py b/tests/frontend/mirror.py
index b33d889c6..47f94289f 100644
--- a/tests/frontend/mirror.py
+++ b/tests/frontend/mirror.py
@@ -4,9 +4,8 @@
import os
import pytest
-from tests.testutils import create_repo
-
from buildstream import _yaml
+from buildstream.plugintestutils import create_repo
from buildstream.plugintestutils import cli # pylint: disable=unused-import
diff --git a/tests/frontend/order.py b/tests/frontend/order.py
index cd75aa6b7..5eb5b299d 100644
--- a/tests/frontend/order.py
+++ b/tests/frontend/order.py
@@ -4,7 +4,7 @@
import os
import pytest
-from tests.testutils import create_repo
+from buildstream.plugintestutils import create_repo
from buildstream.plugintestutils import cli # pylint: disable=unused-import
from buildstream import _yaml
diff --git a/tests/frontend/track.py b/tests/frontend/track.py
index 46f5bcf67..17d0cd827 100644
--- a/tests/frontend/track.py
+++ b/tests/frontend/track.py
@@ -4,12 +4,12 @@
import stat
import os
import pytest
-from tests.testutils import create_repo, generate_junction, yaml_file_get_provenance
+from buildstream.plugintestutils import create_repo
from buildstream.plugintestutils import cli # pylint: disable=unused-import
from buildstream._exceptions import ErrorDomain, LoadErrorReason
from buildstream import _yaml
-
+from tests.testutils import generate_junction, yaml_file_get_provenance
from . import configure_project
# Project directory
diff --git a/tests/frontend/workspace.py b/tests/frontend/workspace.py
index 78f3600d1..522bbffab 100644
--- a/tests/frontend/workspace.py
+++ b/tests/frontend/workspace.py
@@ -34,9 +34,9 @@ import subprocess
import pytest
-from tests.testutils import create_repo, ALL_REPO_KINDS, wait_for_cache_granularity
-from tests.testutils import create_artifact_share, create_element_size
+from tests.testutils import create_artifact_share, create_element_size, wait_for_cache_granularity
+from buildstream.plugintestutils import create_repo, ALL_REPO_KINDS
from buildstream.plugintestutils import cli # pylint: disable=unused-import
from buildstream import _yaml
from buildstream._exceptions import ErrorDomain, LoadErrorReason
diff --git a/tests/integration/source-determinism.py b/tests/integration/source-determinism.py
index 7cfca98e0..2f63a4af9 100644
--- a/tests/integration/source-determinism.py
+++ b/tests/integration/source-determinism.py
@@ -3,7 +3,7 @@ import pytest
from buildstream import _yaml
from buildstream.plugintestutils import cli_integration as cli
-from tests.testutils import create_repo
+from buildstream.plugintestutils import create_repo
from tests.testutils.site import HAVE_SANDBOX
diff --git a/tests/sourcecache/fetch.py b/tests/sourcecache/fetch.py
index 86d2138c0..7f82388ab 100644
--- a/tests/sourcecache/fetch.py
+++ b/tests/sourcecache/fetch.py
@@ -28,8 +28,8 @@ from buildstream._context import Context
from buildstream._project import Project
from buildstream import _yaml
from buildstream.plugintestutils import cli # pylint: disable=unused-import
-
-from tests.testutils import create_artifact_share, create_repo
+from buildstream.plugintestutils import create_repo
+from tests.testutils import create_artifact_share
DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "project")
diff --git a/tests/sourcecache/push.py b/tests/sourcecache/push.py
index f692136bb..825d2614e 100644
--- a/tests/sourcecache/push.py
+++ b/tests/sourcecache/push.py
@@ -28,8 +28,9 @@ from buildstream._exceptions import ErrorDomain
from buildstream._project import Project
from buildstream import _yaml
from buildstream.plugintestutils import cli # pylint: disable=unused-import
+from buildstream.plugintestutils import create_repo
-from tests.testutils import create_artifact_share, create_repo
+from tests.testutils import create_artifact_share
DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "project")
diff --git a/tests/sources/__init__.py b/tests/sources/__init__.py
index 02a755074..155ecc064 100644
--- a/tests/sources/__init__.py
+++ b/tests/sources/__init__.py
@@ -1,5 +1,18 @@
import os
+from buildstream.plugintestutils import register_repo_kind
+from tests.testutils.repo.git import Git
+from tests.testutils.repo.bzr import Bzr
+from tests.testutils.repo.ostree import OSTree
+from tests.testutils.repo.tar import Tar
+from tests.testutils.repo.zip import Zip
+
+register_repo_kind('git', Git)
+register_repo_kind('bzr', Bzr)
+register_repo_kind('ostree', OSTree)
+register_repo_kind('tar', Tar)
+register_repo_kind('zip', Zip)
+
def list_dir_contents(srcdir):
contents = set()
diff --git a/tests/sources/bzr.py b/tests/sources/bzr.py
index 0a3c345bd..bf022236b 100644
--- a/tests/sources/bzr.py
+++ b/tests/sources/bzr.py
@@ -7,7 +7,7 @@ import pytest
from buildstream import _yaml
from buildstream.plugintestutils import cli # pylint: disable=unused-import
-from tests.testutils import create_repo
+from buildstream.plugintestutils import create_repo
from tests.testutils.site import HAVE_BZR
DATA_DIR = os.path.join(
diff --git a/tests/sources/generic/build_checkout.py b/tests/sources/generic/build_checkout.py
index e113b40cb..074be8429 100644
--- a/tests/sources/generic/build_checkout.py
+++ b/tests/sources/generic/build_checkout.py
@@ -22,8 +22,7 @@
import os
import pytest
-from tests.testutils import create_repo, ALL_REPO_KINDS
-
+from buildstream.plugintestutils import create_repo, ALL_REPO_KINDS
from buildstream.plugintestutils import cli # pylint: disable=unused-import
from buildstream import _yaml
diff --git a/tests/sources/generic/fetch.py b/tests/sources/generic/fetch.py
index f5931f8f1..f8c6b5557 100644
--- a/tests/sources/generic/fetch.py
+++ b/tests/sources/generic/fetch.py
@@ -22,7 +22,8 @@
import os
import pytest
-from tests.testutils import create_repo, ALL_REPO_KINDS, generate_junction
+from tests.testutils import generate_junction
+from buildstream.plugintestutils import create_repo, ALL_REPO_KINDS
from tests.frontend import configure_project
from buildstream.plugintestutils import cli # pylint: disable=unused-import
diff --git a/tests/sources/generic/mirror.py b/tests/sources/generic/mirror.py
index e9fe254c5..9cbb19fe4 100644
--- a/tests/sources/generic/mirror.py
+++ b/tests/sources/generic/mirror.py
@@ -22,8 +22,9 @@
import os
import pytest
-from tests.testutils import create_repo, ALL_REPO_KINDS, generate_junction
+from tests.testutils import generate_junction
+from buildstream.plugintestutils import create_repo, ALL_REPO_KINDS
from buildstream.plugintestutils import cli # pylint: disable=unused-import
from buildstream import _yaml
from buildstream._exceptions import ErrorDomain
diff --git a/tests/sources/generic/source_determinism.py b/tests/sources/generic/source_determinism.py
index 3488e3beb..e3203a891 100644
--- a/tests/sources/generic/source_determinism.py
+++ b/tests/sources/generic/source_determinism.py
@@ -22,9 +22,9 @@
import os
import pytest
-from tests.testutils import create_repo, ALL_REPO_KINDS
from tests.testutils.site import HAVE_SANDBOX
+from buildstream.plugintestutils import create_repo, ALL_REPO_KINDS
from buildstream.plugintestutils import cli # pylint: disable=unused-import
from buildstream import _yaml
diff --git a/tests/sources/generic/track.py b/tests/sources/generic/track.py
index 4c65602e9..cbc826eae 100644
--- a/tests/sources/generic/track.py
+++ b/tests/sources/generic/track.py
@@ -22,9 +22,10 @@
import os
import pytest
-from tests.testutils import create_repo, ALL_REPO_KINDS, generate_junction
+from tests.testutils import generate_junction
from tests.frontend import configure_project
+from buildstream.plugintestutils import create_repo, ALL_REPO_KINDS
from buildstream.plugintestutils import cli # pylint: disable=unused-import
from buildstream import _yaml
from buildstream._exceptions import ErrorDomain
diff --git a/tests/sources/generic/track_cross_junction.py b/tests/sources/generic/track_cross_junction.py
index 56969619d..7cf049634 100644
--- a/tests/sources/generic/track_cross_junction.py
+++ b/tests/sources/generic/track_cross_junction.py
@@ -22,8 +22,9 @@
import os
import pytest
-from tests.testutils import create_repo, ALL_REPO_KINDS, generate_junction
+from tests.testutils import generate_junction
+from buildstream.plugintestutils import create_repo, ALL_REPO_KINDS
from buildstream.plugintestutils import cli # pylint: disable=unused-import
from buildstream import _yaml
diff --git a/tests/sources/generic/workspace.py b/tests/sources/generic/workspace.py
index ad115c1ba..4da3a5b78 100644
--- a/tests/sources/generic/workspace.py
+++ b/tests/sources/generic/workspace.py
@@ -23,8 +23,7 @@ import os
import shutil
import pytest
-from tests.testutils import create_repo, ALL_REPO_KINDS
-
+from buildstream.plugintestutils import create_repo, ALL_REPO_KINDS
from buildstream.plugintestutils import cli # pylint: disable=unused-import
from buildstream import _yaml
diff --git a/tests/sources/git.py b/tests/sources/git.py
index dd53df2b5..0f97b77a3 100644
--- a/tests/sources/git.py
+++ b/tests/sources/git.py
@@ -33,8 +33,8 @@ from buildstream._exceptions import ErrorDomain
from buildstream import _yaml
from buildstream.plugin import CoreWarnings
from buildstream.plugintestutils import cli # pylint: disable=unused-import
+from buildstream.plugintestutils import create_repo
-from tests.testutils import create_repo
from tests.testutils.site import HAVE_GIT, HAVE_OLD_GIT
DATA_DIR = os.path.join(
diff --git a/tests/sources/no_fetch_cached.py b/tests/sources/no_fetch_cached.py
index 767c193d2..4a3f71932 100644
--- a/tests/sources/no_fetch_cached.py
+++ b/tests/sources/no_fetch_cached.py
@@ -7,7 +7,7 @@ import pytest
from buildstream import _yaml
from buildstream.plugintestutils import cli # pylint: disable=unused-import
-from tests.testutils import create_repo
+from buildstream.plugintestutils import create_repo
from tests.testutils.site import HAVE_GIT
DATA_DIR = os.path.join(
diff --git a/tests/sources/ostree.py b/tests/sources/ostree.py
index 2d4dd953a..e75a64663 100644
--- a/tests/sources/ostree.py
+++ b/tests/sources/ostree.py
@@ -26,8 +26,7 @@ import pytest
from buildstream._exceptions import ErrorDomain
from buildstream import _yaml
from buildstream.plugintestutils import cli # pylint: disable=unused-import
-
-from tests.testutils import create_repo
+from buildstream.plugintestutils import create_repo
DATA_DIR = os.path.join(
os.path.dirname(os.path.realpath(__file__)),
diff --git a/tests/testutils/__init__.py b/tests/testutils/__init__.py
index 929ffc5f2..2e1f72138 100644
--- a/tests/testutils/__init__.py
+++ b/tests/testutils/__init__.py
@@ -23,7 +23,6 @@
# William Salmon <will.salmon@codethink.co.uk>
#
-from .repo import create_repo, ALL_REPO_KINDS
from .artifactshare import create_artifact_share
from .element_generators import create_element_size, update_element_size
from .junction import generate_junction
diff --git a/tests/testutils/element_generators.py b/tests/testutils/element_generators.py
index 4461e4b7f..ec1b6bd85 100644
--- a/tests/testutils/element_generators.py
+++ b/tests/testutils/element_generators.py
@@ -2,8 +2,7 @@ import os
from buildstream import _yaml
from buildstream import utils
-
-from .repo import create_repo
+from buildstream.plugintestutils import create_repo
# create_element_size()
diff --git a/tests/testutils/junction.py b/tests/testutils/junction.py
index e0db8fcfb..49bc692ed 100644
--- a/tests/testutils/junction.py
+++ b/tests/testutils/junction.py
@@ -1,6 +1,5 @@
from buildstream import _yaml
-
-from .repo import create_repo
+from buildstream.plugintestutils import create_repo
# generate_junction()
diff --git a/tests/testutils/repo/__init__.py b/tests/testutils/repo/__init__.py
index 1881aa3c4..e69de29bb 100644
--- a/tests/testutils/repo/__init__.py
+++ b/tests/testutils/repo/__init__.py
@@ -1,31 +0,0 @@
-from collections import OrderedDict
-
-from .git import Git
-from .bzr import Bzr
-from .ostree import OSTree
-from .tar import Tar
-from .zip import Zip
-
-ALL_REPO_KINDS = OrderedDict()
-ALL_REPO_KINDS['git'] = Git
-ALL_REPO_KINDS['bzr'] = Bzr
-ALL_REPO_KINDS['ostree'] = OSTree
-ALL_REPO_KINDS['tar'] = Tar
-ALL_REPO_KINDS['zip'] = Zip
-
-
-# create_repo()
-#
-# Convenience for creating a Repo
-#
-# Args:
-# kind (str): The kind of repo to create (a source plugin basename)
-# directory (str): The path where the repo will keep a cache
-#
-def create_repo(kind, directory, subdir='repo'):
- try:
- constructor = ALL_REPO_KINDS[kind]
- except KeyError as e:
- raise AssertionError("Unsupported repo kind {}".format(kind)) from e
-
- return constructor(directory, subdir=subdir)
diff --git a/tests/testutils/repo/bzr.py b/tests/testutils/repo/bzr.py
index 0bedb3aa7..c006c3fce 100644
--- a/tests/testutils/repo/bzr.py
+++ b/tests/testutils/repo/bzr.py
@@ -2,7 +2,7 @@ import os
import subprocess
import pytest
-from .repo import Repo
+from buildstream.plugintestutils import Repo
from .. import site
diff --git a/tests/testutils/repo/git.py b/tests/testutils/repo/git.py
index 1455de264..5c27be3ee 100644
--- a/tests/testutils/repo/git.py
+++ b/tests/testutils/repo/git.py
@@ -4,7 +4,7 @@ import subprocess
import pytest
-from .repo import Repo
+from buildstream.plugintestutils import Repo
from .. import site
diff --git a/tests/testutils/repo/ostree.py b/tests/testutils/repo/ostree.py
index 0bb1d8ae3..d0cef8b88 100644
--- a/tests/testutils/repo/ostree.py
+++ b/tests/testutils/repo/ostree.py
@@ -2,7 +2,7 @@ import subprocess
import pytest
-from .repo import Repo
+from buildstream.plugintestutils import Repo
from .. import site
diff --git a/tests/testutils/repo/repo.py b/tests/testutils/repo/repo.py
deleted file mode 100644
index 234aa374c..000000000
--- a/tests/testutils/repo/repo.py
+++ /dev/null
@@ -1,90 +0,0 @@
-import os
-import shutil
-
-
-# Repo()
-#
-# Abstract class providing scaffolding for
-# generating data to be used with various sources
-#
-# Args:
-# directory (str): The base temp directory for the test
-# subdir (str): The subdir for the repo, in case there is more than one
-#
-class Repo():
-
- def __init__(self, directory, subdir='repo'):
-
- # The working directory for the repo object
- #
- self.directory = os.path.abspath(directory)
-
- # The directory the actual repo will be stored in
- self.repo = os.path.join(self.directory, subdir)
-
- os.makedirs(self.repo, exist_ok=True)
-
- # create():
- #
- # Create a repository in self.directory and add the initial content
- #
- # Args:
- # directory: A directory with content to commit
- #
- # Returns:
- # (smth): A new ref corresponding to this commit, which can
- # be passed as the ref in the Repo.source_config() API.
- #
- def create(self, directory):
- pass
-
- # source_config()
- #
- # Args:
- # ref (smth): An optional abstract ref object, usually a string.
- #
- # Returns:
- # (dict): A configuration which can be serialized as a
- # source when generating an element file on the fly
- #
- def source_config(self, ref=None):
- pass
-
- # copy_directory():
- #
- # Copies the content of src to the directory dest
- #
- # Like shutil.copytree(), except dest is expected
- # to exist.
- #
- # Args:
- # src (str): The source directory
- # dest (str): The destination directory
- #
- def copy_directory(self, src, dest):
- for filename in os.listdir(src):
- src_path = os.path.join(src, filename)
- dest_path = os.path.join(dest, filename)
- if os.path.isdir(src_path):
- shutil.copytree(src_path, dest_path)
- else:
- shutil.copy2(src_path, dest_path)
-
- # copy():
- #
- # Creates a copy of this repository in the specified
- # destination.
- #
- # Args:
- # dest (str): The destination directory
- #
- # Returns:
- # (Repo): A Repo object for the new repository.
- def copy(self, dest):
- subdir = self.repo[len(self.directory):].lstrip(os.sep)
- new_dir = os.path.join(dest, subdir)
- os.makedirs(new_dir, exist_ok=True)
- self.copy_directory(self.repo, new_dir)
- repo_type = type(self)
- new_repo = repo_type(dest, subdir)
- return new_repo
diff --git a/tests/testutils/repo/tar.py b/tests/testutils/repo/tar.py
index ee6cb77b3..6fdf58ae0 100644
--- a/tests/testutils/repo/tar.py
+++ b/tests/testutils/repo/tar.py
@@ -3,7 +3,7 @@ import tarfile
from buildstream.utils import sha256sum
-from .repo import Repo
+from buildstream.plugintestutils import Repo
class Tar(Repo):
diff --git a/tests/testutils/repo/zip.py b/tests/testutils/repo/zip.py
index 8133f1236..c57e09e7d 100644
--- a/tests/testutils/repo/zip.py
+++ b/tests/testutils/repo/zip.py
@@ -3,7 +3,7 @@ import zipfile
from buildstream.utils import sha256sum
-from .repo import Repo
+from buildstream.plugintestutils import Repo
class Zip(Repo):