summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2018-03-02 21:01:51 +0900
committerTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2018-03-04 21:14:19 +0900
commitbc0c4b714509862efcb20df82e11eca1e628a90d (patch)
tree2739b9ed0081b1c6907d831367c84521f14f4c32
parent12ca960710dac773618524a9b7d35c12cf686824 (diff)
downloadbuildstream-bc0c4b714509862efcb20df82e11eca1e628a90d.tar.gz
tests/integration/shell.py: Updated shell tests
o Added new test for `bst shell --mount` o Removed the test that a directory is refused in `host-files`, this is no longer a requirement o Updated names of the `host-files` mount specification members o Test the new `optional` feature of the mount specifications
-rw-r--r--tests/integration/shell.py66
1 files changed, 34 insertions, 32 deletions
diff --git a/tests/integration/shell.py b/tests/integration/shell.py
index 08dda0d22..98e485f41 100644
--- a/tests/integration/shell.py
+++ b/tests/integration/shell.py
@@ -41,10 +41,11 @@ def create_project_conf(project_dir, config):
# cli (Cli): The cli runner fixture
# project (str): The project directory
# command (list): The command argv list
+# mount (tuple): A (host, target) tuple for the `--mount` option
# element (str): The element to build and run a shell with
# isolate (bool): Whether to pass --isolate to `bst shell`
#
-def execute_shell(cli, project, command, element='base.bst', isolate=False):
+def execute_shell(cli, project, command, mount=None, element='base.bst', isolate=False):
# Ensure the element is built
result = cli.run(project=project, args=['build', element])
assert result.exit_code == 0
@@ -52,6 +53,9 @@ def execute_shell(cli, project, command, element='base.bst', isolate=False):
args = ['shell']
if isolate:
args += ['--isolate']
+ if mount is not None:
+ host_path, target_path = mount
+ args += ['--mount', host_path, target_path]
args += [element, '--'] + command
return cli.run(project=project, args=args)
@@ -160,8 +164,8 @@ def test_host_files(cli, tmpdir, datafiles, path):
'shell': {
'host-files': [
{
- 'host': ponyfile,
- 'sandbox': path
+ 'host_path': ponyfile,
+ 'path': path
}
]
}
@@ -183,8 +187,8 @@ def test_isolated_no_mount(cli, tmpdir, datafiles, path):
'shell': {
'host-files': [
{
- 'host': ponyfile,
- 'sandbox': path
+ 'host_path': ponyfile,
+ 'path': path
}
]
}
@@ -194,18 +198,26 @@ def test_isolated_no_mount(cli, tmpdir, datafiles, path):
assert result.exit_code != 0
-# Test that bind mounts which specify directories dont get mounted
+# Test that we warn about non-existing files on the host if the mount is not
+# declared as optional, and that there is no warning if it is optional
+@pytest.mark.parametrize("optional", [("mandatory"), ("optional")])
@pytest.mark.datafiles(DATA_DIR)
-def test_host_files_refuse_dir(cli, tmpdir, datafiles):
+def test_host_files_missing(cli, tmpdir, datafiles, optional):
project = os.path.join(datafiles.dirname, datafiles.basename)
- ponydir = os.path.join(project, 'files', 'shell-mount')
+ ponyfile = os.path.join(project, 'files', 'shell-mount', 'horsy.txt')
+
+ if optional == "optional":
+ option = True
+ else:
+ option = False
create_project_conf(project, {
'shell': {
'host-files': [
{
- 'host': ponydir,
- 'sandbox': '/usr/share/pony'
+ 'host_path': ponyfile,
+ 'path': '/etc/pony.conf',
+ 'optional': option
}
]
}
@@ -216,31 +228,21 @@ def test_host_files_refuse_dir(cli, tmpdir, datafiles):
assert result.exit_code == 0
assert result.output == 'Hello\n'
- # Assert that there was some warning about refusing to mount
- assert ponydir in result.stderr
+ if option:
+ # Assert that there was no warning about the mount
+ assert ponyfile not in result.stderr
+ else:
+ # Assert that there was a warning about the mount
+ assert ponyfile in result.stderr
-# Test that we warn about non-existing files on the host, but execute the shell anyway
+# Test that bind mounts defined in project.conf work
+@pytest.mark.parametrize("path", [("/etc/pony.conf"), ("/usr/share/pony/pony.txt")])
@pytest.mark.datafiles(DATA_DIR)
-def test_host_files_non_existing(cli, tmpdir, datafiles):
+def test_cli_mount(cli, tmpdir, datafiles, path):
project = os.path.join(datafiles.dirname, datafiles.basename)
- ponyfile = os.path.join(project, 'files', 'shell-mount', 'horsy.txt')
-
- create_project_conf(project, {
- 'shell': {
- 'host-files': [
- {
- 'host': ponyfile,
- 'sandbox': '/etc/pony.conf'
- }
- ]
- }
- })
+ ponyfile = os.path.join(project, 'files', 'shell-mount', 'pony.txt')
- # Assert that we did successfully run something in the shell anyway
- result = execute_shell(cli, project, ['echo', 'Hello'])
+ result = execute_shell(cli, project, ['cat', path], mount=(ponyfile, path))
assert result.exit_code == 0
- assert result.output == 'Hello\n'
-
- # Assert that there was some warning about refusing to mount
- assert ponyfile in result.stderr
+ assert result.output == 'pony\n'