import os import pytest from buildstream import _yaml from buildstream._exceptions import ErrorDomain, LoadErrorReason from tests.testutils import cli DATA_DIR = os.path.join( os.path.dirname(os.path.realpath(__file__)), 'variables', ) PROTECTED_VARIABLES = [('project-name'), ('element-name'), ('max-jobs')] @pytest.mark.parametrize('protected_var', PROTECTED_VARIABLES) @pytest.mark.datafiles(DATA_DIR) def test_use_of_protected_var_project_conf(cli, tmpdir, datafiles, protected_var): project = os.path.join(str(datafiles), 'simple') conf = { 'name': 'test', 'variables': { protected_var: 'some-value' } } _yaml.dump(conf, os.path.join(project, 'project.conf')) element = { 'kind': 'import', 'sources': [ { 'kind': 'local', 'path': 'foo.txt' } ], } _yaml.dump(element, os.path.join(project, 'target.bst')) result = cli.run(project=project, args=['build', 'target.bst']) result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.PROTECTED_VARIABLE_REDEFINED) @pytest.mark.parametrize('protected_var', PROTECTED_VARIABLES) @pytest.mark.datafiles(DATA_DIR) def test_use_of_protected_var_element_overrides(cli, tmpdir, datafiles, protected_var): project = os.path.join(str(datafiles), 'simple') conf = { 'name': 'test', 'elements': { 'manual': { 'variables': { protected_var: 'some-value' } } } } _yaml.dump(conf, os.path.join(project, 'project.conf')) element = { 'kind': 'manual', 'sources': [ { 'kind': 'local', 'path': 'foo.txt' } ], } _yaml.dump(element, os.path.join(project, 'target.bst')) result = cli.run(project=project, args=['build', 'target.bst']) result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.PROTECTED_VARIABLE_REDEFINED) @pytest.mark.parametrize('protected_var', PROTECTED_VARIABLES) @pytest.mark.datafiles(DATA_DIR) def test_use_of_protected_var_in_element(cli, tmpdir, datafiles, protected_var): project = os.path.join(str(datafiles), 'simple') element = { 'kind': 'import', 'sources': [ { 'kind': 'local', 'path': 'foo.txt' } ], 'variables': { protected_var: 'some-value' } } _yaml.dump(element, os.path.join(project, 'target.bst')) result = cli.run(project=project, args=['build', 'target.bst']) result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.PROTECTED_VARIABLE_REDEFINED)