summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChandan Singh <csingh43@bloomberg.net>2018-08-01 00:44:32 +0100
committerChandan Singh <csingh43@bloomberg.net>2018-08-01 01:21:56 +0100
commitcd2c10e2515cee9911e6390058f3c4becab5a08c (patch)
treec0cab479efdc1629ffe9fa05c155076cc960e84b
parentd4437c6fa9c845e9f566072282f21373d239c4ab (diff)
downloadbuildstream-chandan/pip-source.tar.gz
Add tests for pip source pluginchandan/pip-source
-rw-r--r--tests/integration/pip_element.py (renamed from tests/integration/pip.py)0
-rw-r--r--tests/integration/pip_source.py54
-rw-r--r--tests/integration/project/files/pip-source/myreqs.txt1
-rw-r--r--tests/integration/project/files/pypi-repo/app1/App1-0.1.tar.gzbin0 -> 772 bytes
-rw-r--r--tests/integration/project/files/pypi-repo/app1/index.html8
-rw-r--r--tests/integration/project/files/pypi-repo/app2/App2-0.1.tar.gzbin0 -> 769 bytes
-rw-r--r--tests/integration/project/files/pypi-repo/app2/index.html8
-rw-r--r--tests/sources/pip.py47
-rw-r--r--tests/sources/pip/first-source-pip/target.bst7
-rw-r--r--tests/sources/pip/no-packages/file1
-rw-r--r--tests/sources/pip/no-packages/target.bst7
-rw-r--r--tests/sources/pip/no-ref/file1
-rw-r--r--tests/sources/pip/no-ref/target.bst9
13 files changed, 143 insertions, 0 deletions
diff --git a/tests/integration/pip.py b/tests/integration/pip_element.py
index 6c6de8bf8..6c6de8bf8 100644
--- a/tests/integration/pip.py
+++ b/tests/integration/pip_element.py
diff --git a/tests/integration/pip_source.py b/tests/integration/pip_source.py
new file mode 100644
index 000000000..9ab0b79bc
--- /dev/null
+++ b/tests/integration/pip_source.py
@@ -0,0 +1,54 @@
+import os
+import pytest
+
+from buildstream import _yaml
+
+from tests.testutils import cli_integration as cli
+from tests.testutils.integration import assert_contains
+
+
+pytestmark = pytest.mark.integration
+
+
+DATA_DIR = os.path.join(
+ os.path.dirname(os.path.realpath(__file__)),
+ "project"
+)
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_pip_source(cli, tmpdir, datafiles):
+ project = os.path.join(datafiles.dirname, datafiles.basename)
+ checkout = os.path.join(cli.directory, 'checkout')
+ element_path = os.path.join(project, 'elements')
+ element_name = 'pip/hello.bst'
+
+ element = {
+ 'kind': 'import',
+ 'sources': [
+ {
+ 'kind': 'local',
+ 'path': 'files/pip-source'
+ },
+ {
+ 'kind': 'pip',
+ 'python-exe': 'python3',
+ 'index-url': 'file://{}'.format(os.path.realpath(os.path.join(project, 'files', 'pypi-repo'))),
+ 'requirements-files': ['myreqs.txt'],
+ 'packages': ['app2']
+ }
+ ]
+ }
+ os.makedirs(os.path.dirname(os.path.join(element_path, element_name)), exist_ok=True)
+ _yaml.dump(element, os.path.join(element_path, element_name))
+
+ result = cli.run(project=project, args=['track', element_name])
+ assert result.exit_code == 0
+
+ result = cli.run(project=project, args=['build', element_name])
+ assert result.exit_code == 0
+
+ result = cli.run(project=project, args=['checkout', element_name, checkout])
+ assert result.exit_code == 0
+
+ assert_contains(checkout, ['/bin', '/bin/app1', '/bin/app2'])
diff --git a/tests/integration/project/files/pip-source/myreqs.txt b/tests/integration/project/files/pip-source/myreqs.txt
new file mode 100644
index 000000000..a641e39b1
--- /dev/null
+++ b/tests/integration/project/files/pip-source/myreqs.txt
@@ -0,0 +1 @@
+app1
diff --git a/tests/integration/project/files/pypi-repo/app1/App1-0.1.tar.gz b/tests/integration/project/files/pypi-repo/app1/App1-0.1.tar.gz
new file mode 100644
index 000000000..74424046f
--- /dev/null
+++ b/tests/integration/project/files/pypi-repo/app1/App1-0.1.tar.gz
Binary files differ
diff --git a/tests/integration/project/files/pypi-repo/app1/index.html b/tests/integration/project/files/pypi-repo/app1/index.html
new file mode 100644
index 000000000..3e35ac364
--- /dev/null
+++ b/tests/integration/project/files/pypi-repo/app1/index.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <title>Links for app1</title>
+ </head>
+ <body>
+ <a href='App1-0.1.tar.gz'>App1-0.1.tar.gz</a><br />
+ </body>
+</html>
diff --git a/tests/integration/project/files/pypi-repo/app2/App2-0.1.tar.gz b/tests/integration/project/files/pypi-repo/app2/App2-0.1.tar.gz
new file mode 100644
index 000000000..86cb43cfe
--- /dev/null
+++ b/tests/integration/project/files/pypi-repo/app2/App2-0.1.tar.gz
Binary files differ
diff --git a/tests/integration/project/files/pypi-repo/app2/index.html b/tests/integration/project/files/pypi-repo/app2/index.html
new file mode 100644
index 000000000..5bc72e47c
--- /dev/null
+++ b/tests/integration/project/files/pypi-repo/app2/index.html
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <title>Links for app1</title>
+ </head>
+ <body>
+ <a href='App2-0.1.tar.gz'>App2-0.1.tar.gz</a><br />
+ </body>
+</html>
diff --git a/tests/sources/pip.py b/tests/sources/pip.py
new file mode 100644
index 000000000..8b4c213dc
--- /dev/null
+++ b/tests/sources/pip.py
@@ -0,0 +1,47 @@
+import os
+import pytest
+
+from buildstream._exceptions import ErrorDomain
+from buildstream import _yaml
+from tests.testutils import cli
+
+DATA_DIR = os.path.join(
+ os.path.dirname(os.path.realpath(__file__)),
+ 'pip',
+)
+
+
+def generate_project(project_dir, tmpdir):
+ project_file = os.path.join(project_dir, "project.conf")
+ _yaml.dump({'name': 'foo'}, 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, tmpdir, datafiles):
+ project = os.path.join(datafiles.dirname, datafiles.basename)
+ generate_project(project, tmpdir)
+ 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, tmpdir, datafiles):
+ project = os.path.join(datafiles.dirname, datafiles.basename)
+ generate_project(project, tmpdir)
+ 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, tmpdir, datafiles):
+ project = os.path.join(datafiles.dirname, datafiles.basename)
+ generate_project(project, tmpdir)
+ result = cli.run(project=project, args=[
+ 'show', 'target.bst'
+ ])
+ result.assert_main_error(ErrorDomain.SOURCE, None)
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 000000000..1cdc1478c
--- /dev/null
+++ b/tests/sources/pip/first-source-pip/target.bst
@@ -0,0 +1,7 @@
+kind: import
+description: pip should not be allowed to be the first source
+sources:
+- kind: pip
+ python-exe: python3
+ packages:
+ - flake8
diff --git a/tests/sources/pip/no-packages/file b/tests/sources/pip/no-packages/file
new file mode 100644
index 000000000..980a0d5f1
--- /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 000000000..e31ad714e
--- /dev/null
+++ b/tests/sources/pip/no-packages/target.bst
@@ -0,0 +1,7 @@
+kind: import
+description: The kind of this element is irrelevant.
+sources:
+- kind: local
+ path: file
+- kind: pip
+ python-exe: python3
diff --git a/tests/sources/pip/no-ref/file b/tests/sources/pip/no-ref/file
new file mode 100644
index 000000000..980a0d5f1
--- /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 000000000..db6e31aa7
--- /dev/null
+++ b/tests/sources/pip/no-ref/target.bst
@@ -0,0 +1,9 @@
+kind: import
+description: The kind of this element is irrelevant.
+sources:
+- kind: local
+ path: file
+- kind: pip
+ python-exe: python3
+ packages:
+ - flake8