You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by tv...@apache.org on 2022/04/05 10:04:40 UTC
[buildstream-plugins] 25/49: tests/sources/pip.py: Adding pip source test
This is an automated email from the ASF dual-hosted git repository.
tvb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/buildstream-plugins.git
commit ad335d2d5394d2fed34fc4ed3a0e9b8468928e89
Author: Tristan van Berkom <tr...@codethink.co.uk>
AuthorDate: Sun Mar 20 17:41:45 2022 +0900
tests/sources/pip.py: Adding pip source test
---
tests/sources/__init__.py | 0
tests/sources/pip.py | 71 +++++++++++++++++++++++++++
tests/sources/pip/first-source-pip/target.bst | 6 +++
tests/sources/pip/no-packages/file | 1 +
tests/sources/pip/no-packages/target.bst | 6 +++
tests/sources/pip/no-ref/file | 1 +
tests/sources/pip/no-ref/target.bst | 8 +++
7 files changed, 93 insertions(+)
diff --git a/tests/sources/__init__.py b/tests/sources/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/sources/pip.py b/tests/sources/pip.py
new file mode 100644
index 0000000..bf30b20
--- /dev/null
+++ b/tests/sources/pip.py
@@ -0,0 +1,71 @@
+# Pylint doesn't play well with fixtures and dependency injection from pytest
+# pylint: disable=redefined-outer-name
+
+import os
+import pytest
+
+from buildstream import _yaml
+from buildstream.exceptions import ErrorDomain
+from buildstream._testing import cli # pylint: disable=unused-import
+from buildstream_plugins.sources.pip import _match_package_name
+
+DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "pip",)
+
+
+def generate_project(project_dir):
+ project_file = os.path.join(project_dir, "project.conf")
+ _yaml.roundtrip_dump(
+ {
+ "name": "foo",
+ "min-version": "2.0",
+ "plugins": [{"origin": "pip", "package-name": "buildstream-plugins", "sources": ["pip"],}],
+ },
+ project_file,
+ )
+
+
+# Test that without ref, consistency is set appropriately.
+@pytest.mark.datafiles(os.path.join(DATA_DIR, "no-ref"))
+def test_no_ref(cli, datafiles):
+ project = str(datafiles)
+ generate_project(project)
+ assert cli.get_element_state(project, "target.bst") == "no reference"
+
+
+# Test that pip is not allowed to be the first source
+@pytest.mark.datafiles(os.path.join(DATA_DIR, "first-source-pip"))
+def test_first_source(cli, datafiles):
+ project = str(datafiles)
+ generate_project(project)
+ result = cli.run(project=project, args=["show", "target.bst"])
+ result.assert_main_error(ErrorDomain.ELEMENT, None)
+
+
+# Test that error is raised when neither packges nor requirements files
+# have been specified
+@pytest.mark.datafiles(os.path.join(DATA_DIR, "no-packages"))
+def test_no_packages(cli, datafiles):
+ project = str(datafiles)
+ generate_project(project)
+ result = cli.run(project=project, args=["show", "target.bst"])
+ result.assert_main_error(ErrorDomain.SOURCE, None)
+
+
+# Test that pip source parses tar ball names correctly for the ref
+@pytest.mark.parametrize(
+ "tarball, expected_name, expected_version",
+ [
+ ("dotted.package-0.9.8.tar.gz", "dotted.package", "0.9.8"),
+ ("hyphenated-package-2.6.0.tar.gz", "hyphenated-package", "2.6.0"),
+ ("underscore_pkg-3.1.0.tar.gz", "underscore_pkg", "3.1.0"),
+ ("numbers2and5-1.0.1.tar.gz", "numbers2and5", "1.0.1"),
+ ("multiple.dots.package-5.6.7.tar.gz", "multiple.dots.package", "5.6.7",),
+ ("multiple-hyphens-package-1.2.3.tar.gz", "multiple-hyphens-package", "1.2.3",),
+ ("multiple_underscore_pkg-3.4.5.tar.gz", "multiple_underscore_pkg", "3.4.5",),
+ ("shortversion-1.0.tar.gz", "shortversion", "1.0"),
+ ("longversion-1.2.3.4.tar.gz", "longversion", "1.2.3.4"),
+ ],
+)
+def test_match_package_name(tarball, expected_name, expected_version):
+ name, version = _match_package_name(tarball)
+ assert (expected_name, expected_version) == (name, version)
diff --git a/tests/sources/pip/first-source-pip/target.bst b/tests/sources/pip/first-source-pip/target.bst
new file mode 100644
index 0000000..e5f20ab
--- /dev/null
+++ b/tests/sources/pip/first-source-pip/target.bst
@@ -0,0 +1,6 @@
+kind: import
+description: pip should not be allowed to be the first source
+sources:
+- kind: pip
+ packages:
+ - flake8
diff --git a/tests/sources/pip/no-packages/file b/tests/sources/pip/no-packages/file
new file mode 100644
index 0000000..980a0d5
--- /dev/null
+++ b/tests/sources/pip/no-packages/file
@@ -0,0 +1 @@
+Hello World!
diff --git a/tests/sources/pip/no-packages/target.bst b/tests/sources/pip/no-packages/target.bst
new file mode 100644
index 0000000..0d8b948
--- /dev/null
+++ b/tests/sources/pip/no-packages/target.bst
@@ -0,0 +1,6 @@
+kind: import
+description: The kind of this element is irrelevant.
+sources:
+- kind: local
+ path: file
+- kind: pip
diff --git a/tests/sources/pip/no-ref/file b/tests/sources/pip/no-ref/file
new file mode 100644
index 0000000..980a0d5
--- /dev/null
+++ b/tests/sources/pip/no-ref/file
@@ -0,0 +1 @@
+Hello World!
diff --git a/tests/sources/pip/no-ref/target.bst b/tests/sources/pip/no-ref/target.bst
new file mode 100644
index 0000000..ec450b7
--- /dev/null
+++ b/tests/sources/pip/no-ref/target.bst
@@ -0,0 +1,8 @@
+kind: import
+description: The kind of this element is irrelevant.
+sources:
+- kind: local
+ path: file
+- kind: pip
+ packages:
+ - flake8