diff options
author | Raoul Hidalgo Charman <raoul.hidalgocharman@codethink.co.uk> | 2019-07-01 16:05:23 +0100 |
---|---|---|
committer | bst-marge-bot <marge-bot@buildstream.build> | 2019-07-12 08:36:09 +0000 |
commit | e10e67b87c766c0a5ee8ca1eb0e39b30735aa878 (patch) | |
tree | 30c3dc90ee5e249e6f2a93c7051f6136603cfe42 | |
parent | 943edbb760ac1f0568073e127a301510fc5661cd (diff) | |
download | buildstream-raoul/994-further-re-testing.tar.gz |
tests: Add RE test for builds that failraoul/994-further-re-testing
Part of #994
-rw-r--r-- | tests/remoteexecution/buildfail.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/tests/remoteexecution/buildfail.py b/tests/remoteexecution/buildfail.py new file mode 100644 index 000000000..031e5829e --- /dev/null +++ b/tests/remoteexecution/buildfail.py @@ -0,0 +1,75 @@ +# +# Copyright (C) 2018 Bloomberg Finance LP +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see <http://www.gnu.org/licenses/>. +# + +# Pylint doesn't play well with fixtures and dependency injection from pytest +# pylint: disable=redefined-outer-name + +import os +import pytest + +from buildstream._exceptions import ErrorDomain +from buildstream import _yaml +from buildstream.testing import cli_remote_execution as cli # pylint: disable=unused-import + +pytestmark = pytest.mark.remoteexecution + +# Project directory +DATA_DIR = os.path.join( + os.path.dirname(os.path.realpath(__file__)), + "project", +) + + +@pytest.mark.datafiles(DATA_DIR) +def test_build_remote_failure(cli, datafiles): + project = str(datafiles) + element_path = os.path.join(project, 'elements', 'element.bst') + checkout_path = os.path.join(cli.directory, 'checkout') + + # Write out our test target + element = { + 'kind': 'script', + 'depends': [ + { + 'filename': 'base.bst', + 'type': 'build', + }, + ], + 'config': { + 'commands': [ + 'touch %{install-root}/foo', + 'false', + ], + }, + } + _yaml.dump(element, element_path) + + services = cli.ensure_services() + assert set(services) == set(['action-cache', 'execution', 'storage']) + + # Try to build it, this should result in a failure that contains the content + result = cli.run(project=project, args=['build', 'element.bst']) + result.assert_main_error(ErrorDomain.STREAM, None) + + result = cli.run(project=project, args=[ + 'artifact', 'checkout', 'element.bst', '--directory', checkout_path + ]) + result.assert_success() + + # check that the file created before the failure exists + filename = os.path.join(checkout_path, 'foo') + assert os.path.isfile(filename) |