summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaoul Hidalgo Charman <raoul.hidalgocharman@codethink.co.uk>2018-11-23 12:08:06 +0000
committerRaoul Hidalgo Charman <raoul.hidalgocharman@codethink.co.uk>2018-12-05 10:44:02 +0000
commitdefec11250773152c65dc6b05239d58f90d0a217 (patch)
tree1316157b2afcd35a4f0e5d0befc5311f319d7f77
parent8e09a81c5cf7541ee826d52e3dfecb7ea143eb85 (diff)
downloadbuildstream-defec11250773152c65dc6b05239d58f90d0a217.tar.gz
optionos.py: Add tests for OptionOS
Same format as OptionArch tests, but with OS's.
-rw-r--r--tests/format/option-os/element.bst12
-rw-r--r--tests/format/option-os/project.conf11
-rw-r--r--tests/format/optionos.py76
3 files changed, 99 insertions, 0 deletions
diff --git a/tests/format/option-os/element.bst b/tests/format/option-os/element.bst
new file mode 100644
index 000000000..8208d67e8
--- /dev/null
+++ b/tests/format/option-os/element.bst
@@ -0,0 +1,12 @@
+kind: autotools
+variables:
+ result: "Nothing"
+ (?):
+ - machine_os == "Linux":
+ result: "Linuxy"
+ - machine_os == "Darwin":
+ result: "Darwiny"
+ - machine_os == "SunOS":
+ result: "SunOSy"
+ - machine_os == "FreeBSD":
+ result: "FreeBSDy" \ No newline at end of file
diff --git a/tests/format/option-os/project.conf b/tests/format/option-os/project.conf
new file mode 100644
index 000000000..5edb5072f
--- /dev/null
+++ b/tests/format/option-os/project.conf
@@ -0,0 +1,11 @@
+name: test
+
+options:
+ machine_os:
+ type: os
+ description: The operating system
+ values:
+ - Linux
+ - Darwin
+ - FreeBSD
+ - SunOS
diff --git a/tests/format/optionos.py b/tests/format/optionos.py
new file mode 100644
index 000000000..b05d7e49e
--- /dev/null
+++ b/tests/format/optionos.py
@@ -0,0 +1,76 @@
+import os
+import pytest
+from contextlib import contextmanager
+
+from buildstream import _yaml
+from buildstream._exceptions import ErrorDomain, LoadErrorReason
+from tests.testutils.runcli import cli
+
+DATA_DIR = os.path.dirname(os.path.realpath(__file__))
+
+
+@contextmanager
+def override_uname_os(name):
+ orig_uname = os.uname
+ orig_tuple = tuple(os.uname())
+ override_result = (name, orig_tuple[1],
+ orig_tuple[2], orig_tuple[3],
+ orig_tuple[4])
+
+ 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
+ ('Darwin', 'Linux', 'Linuxy'),
+ ('SunOS', 'FreeBSD', 'FreeBSDy'),
+
+ # Test automatically derived arches
+ ('Linux', None, 'Linuxy'),
+ ('Darwin', None, 'Darwiny'),
+
+ # Test that explicitly provided arches dont error out
+ # when the `uname` reported arch is not supported
+ ('AIX', 'Linux', 'Linuxy'),
+ ('HaikuOS', 'SunOS', 'SunOSy'),
+])
+def test_conditionals(cli, datafiles, uname, value, expected):
+ with override_uname_os(uname):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'option-os')
+
+ bst_args = []
+ if value is not None:
+ bst_args += ['--option', 'machine_os', value]
+
+ bst_args += [
+ 'show',
+ '--deps', 'none',
+ '--format', '%{vars}',
+ 'element.bst'
+ ]
+ result = cli.run(project=project, silent=True, args=bst_args)
+ result.assert_success()
+
+ loaded = _yaml.load_data(result.output)
+ assert loaded['result'] == expected
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_unsupported_arch(cli, datafiles):
+
+ with override_uname_os("AIX"):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'option-os')
+ result = cli.run(project=project, silent=True, args=[
+ 'show',
+ '--deps', 'none',
+ '--format', '%{vars}',
+ 'element.bst'
+ ])
+
+ result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_DATA)