summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2017-10-07 19:09:40 +0900
committerTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2017-10-10 19:29:59 +0900
commit7c152594e563ec93b4258e45685283ce3717c0a3 (patch)
treef281a59a481800905602f65d7d5a687c16418c3a
parent6819bb8c50126538ce8877b8f8c5fb98120001db (diff)
downloadbuildstream-7c152594e563ec93b4258e45685283ce3717c0a3.tar.gz
tests/format/optionarch.py: Added arch option specific test cases
-rw-r--r--tests/format/option-arch/element.bst8
-rw-r--r--tests/format/option-arch/project.conf9
-rw-r--r--tests/format/optionarch.py80
3 files changed, 97 insertions, 0 deletions
diff --git a/tests/format/option-arch/element.bst b/tests/format/option-arch/element.bst
new file mode 100644
index 000000000..4da01d889
--- /dev/null
+++ b/tests/format/option-arch/element.bst
@@ -0,0 +1,8 @@
+kind: autotools
+variables:
+ result: "Nothing"
+ (?):
+ - machine_arch == "arm":
+ result: "Army"
+ - machine_arch == "aarch64":
+ result: "Aarchy"
diff --git a/tests/format/option-arch/project.conf b/tests/format/option-arch/project.conf
new file mode 100644
index 000000000..a2c3ddf9a
--- /dev/null
+++ b/tests/format/option-arch/project.conf
@@ -0,0 +1,9 @@
+name: test
+
+options:
+ machine_arch:
+ type: arch
+ description: The machine architecture
+ values:
+ - arm
+ - aarch64
diff --git a/tests/format/optionarch.py b/tests/format/optionarch.py
new file mode 100644
index 000000000..fce689800
--- /dev/null
+++ b/tests/format/optionarch.py
@@ -0,0 +1,80 @@
+import os
+import pytest
+from contextlib import contextmanager
+from buildstream import _yaml
+from buildstream import LoadError, LoadErrorReason
+from tests.testutils.runcli import cli
+
+# Project directory
+DATA_DIR = os.path.dirname(os.path.realpath(__file__))
+
+
+# Context manager to override the reported value of `os.uname()`
+@contextmanager
+def override_uname_arch(name):
+ orig_uname = os.uname
+ orig_tuple = tuple(os.uname())
+ override_result = (orig_tuple[0], orig_tuple[1],
+ orig_tuple[2], orig_tuple[3],
+ name)
+
+ def override():
+ return override_result
+
+ os.uname = override
+ yield
+ os.uname = orig_uname
+
+
+@pytest.mark.datafiles(DATA_DIR)
+@pytest.mark.parametrize("uname,value,expected", [
+ # Test explicitly provided arches
+ ('arm', 'arm', 'Army'),
+ ('arm', 'aarch64', 'Aarchy'),
+
+ # Test automatically derived arches
+ ('arm', None, 'Army'),
+ ('aarch64', None, 'Aarchy'),
+
+ # Test that explicitly provided arches dont error out
+ # when the `uname` reported arch is not supported
+ ('i386', 'arm', 'Army'),
+ ('x86_64', 'aarch64', 'Aarchy'),
+])
+def test_conditional(cli, datafiles, uname, value, expected):
+ with override_uname_arch(uname):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'option-arch')
+
+ bst_args = []
+ if value is not None:
+ bst_args += ['--option', 'machine_arch', value]
+
+ bst_args += [
+ 'show',
+ '--deps', 'none',
+ '--format', '%{vars}',
+ 'element.bst'
+ ]
+ result = cli.run(project=project, silent=True, args=bst_args)
+
+ assert result.exit_code == 0
+ loaded = _yaml.load_data(result.output)
+ assert loaded['result'] == expected
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_unsupported_arch(cli, datafiles):
+
+ with override_uname_arch("x86_64"):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'option-arch')
+ result = cli.run(project=project, silent=True, args=[
+ 'show',
+ '--deps', 'none',
+ '--format', '%{vars}',
+ 'element.bst'
+ ])
+
+ assert result.exit_code != 0
+ assert result.exception
+ assert isinstance(result.exception, LoadError)
+ assert result.exception.reason == LoadErrorReason.INVALID_DATA