diff options
author | Chandan Singh <csingh43@bloomberg.net> | 2018-08-01 00:44:32 +0100 |
---|---|---|
committer | Chandan Singh <csingh43@bloomberg.net> | 2018-08-01 01:21:56 +0100 |
commit | cd2c10e2515cee9911e6390058f3c4becab5a08c (patch) | |
tree | c0cab479efdc1629ffe9fa05c155076cc960e84b | |
parent | d4437c6fa9c845e9f566072282f21373d239c4ab (diff) | |
download | buildstream-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.py | 54 | ||||
-rw-r--r-- | tests/integration/project/files/pip-source/myreqs.txt | 1 | ||||
-rw-r--r-- | tests/integration/project/files/pypi-repo/app1/App1-0.1.tar.gz | bin | 0 -> 772 bytes | |||
-rw-r--r-- | tests/integration/project/files/pypi-repo/app1/index.html | 8 | ||||
-rw-r--r-- | tests/integration/project/files/pypi-repo/app2/App2-0.1.tar.gz | bin | 0 -> 769 bytes | |||
-rw-r--r-- | tests/integration/project/files/pypi-repo/app2/index.html | 8 | ||||
-rw-r--r-- | tests/sources/pip.py | 47 | ||||
-rw-r--r-- | tests/sources/pip/first-source-pip/target.bst | 7 | ||||
-rw-r--r-- | tests/sources/pip/no-packages/file | 1 | ||||
-rw-r--r-- | tests/sources/pip/no-packages/target.bst | 7 | ||||
-rw-r--r-- | tests/sources/pip/no-ref/file | 1 | ||||
-rw-r--r-- | tests/sources/pip/no-ref/target.bst | 9 |
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 Binary files differnew file mode 100644 index 000000000..74424046f --- /dev/null +++ b/tests/integration/project/files/pypi-repo/app1/App1-0.1.tar.gz 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 Binary files differnew file mode 100644 index 000000000..86cb43cfe --- /dev/null +++ b/tests/integration/project/files/pypi-repo/app2/App2-0.1.tar.gz 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 |