summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaoul Hidalgo Charman <raoul.hidalgocharman@codethink.co.uk>2019-03-15 14:39:07 +0000
committerbst-marge-bot <marge-bot@buildstream.build>2019-03-25 11:46:44 +0000
commit98ad4e880ba87c29bd850771c88f160adc2590f0 (patch)
tree3cb5a6394bf5e39b8b63aac5752e90c6d31d3b5d
parent85b86204a7114e0b388b65871258f562853240c0 (diff)
downloadbuildstream-98ad4e880ba87c29bd850771c88f160adc2590f0.tar.gz
tests: check sources are pushed even if build fails
Adds a plugin build element that always fails. The test tries to build an element of this kind. Part of #440
-rw-r--r--tests/sourcecache/project/plugins/elements/always_fail.py32
-rw-r--r--tests/sourcecache/project/plugins/elements/always_fail.yaml22
-rw-r--r--tests/sourcecache/project/project.conf7
-rw-r--r--tests/sourcecache/push.py39
4 files changed, 100 insertions, 0 deletions
diff --git a/tests/sourcecache/project/plugins/elements/always_fail.py b/tests/sourcecache/project/plugins/elements/always_fail.py
new file mode 100644
index 000000000..99ef0d7de
--- /dev/null
+++ b/tests/sourcecache/project/plugins/elements/always_fail.py
@@ -0,0 +1,32 @@
+#
+# Copyright (C) 2019 Bloomberg Finance L.P.
+#
+# 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/>.
+#
+# Authors:
+# Raoul Hidalgo Charman <raoul.hidalgocharman@codethink.co.uk>
+#
+
+from buildstream.element import ElementError
+from buildstream.buildelement import BuildElement
+
+
+class AlwaysFail(BuildElement):
+
+ def assemble(self, sandbox):
+ raise ElementError("Always fails")
+
+
+def setup():
+ return AlwaysFail
diff --git a/tests/sourcecache/project/plugins/elements/always_fail.yaml b/tests/sourcecache/project/plugins/elements/always_fail.yaml
new file mode 100644
index 000000000..9934ab2f9
--- /dev/null
+++ b/tests/sourcecache/project/plugins/elements/always_fail.yaml
@@ -0,0 +1,22 @@
+# always-fail build element does not provide any default
+# build commands
+config:
+
+ # Commands for configuring the software
+ #
+ configure-commands: []
+
+ # Commands for building the software
+ #
+ build-commands: []
+
+ # Commands for installing the software into a
+ # destination folder
+ #
+ install-commands: []
+
+ # Commands for stripping installed binaries
+ #
+ strip-commands:
+ - |
+ %{strip-binaries}
diff --git a/tests/sourcecache/project/project.conf b/tests/sourcecache/project/project.conf
index 854e38693..728f3faa1 100644
--- a/tests/sourcecache/project/project.conf
+++ b/tests/sourcecache/project/project.conf
@@ -2,3 +2,10 @@
name: test
element-path: elements
+
+plugins:
+
+- origin: local
+ path: plugins/elements
+ elements:
+ always_fail: 0 \ No newline at end of file
diff --git a/tests/sourcecache/push.py b/tests/sourcecache/push.py
index 8fe06886b..f692136bb 100644
--- a/tests/sourcecache/push.py
+++ b/tests/sourcecache/push.py
@@ -24,6 +24,7 @@ import shutil
import pytest
from buildstream._context import Context
+from buildstream._exceptions import ErrorDomain
from buildstream._project import Project
from buildstream import _yaml
from buildstream.plugintestutils import cli # pylint: disable=unused-import
@@ -181,3 +182,41 @@ def test_push_fail(cli, tmpdir, datafiles):
.format(remote)) in res.stderr
assert "Pushing" not in res.stderr
assert "Pushed" not in res.stderr
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_source_push_build_fail(cli, tmpdir, datafiles):
+ project_dir = str(datafiles)
+ cache_dir = os.path.join(str(tmpdir), 'cache')
+
+ with create_artifact_share(os.path.join(str(tmpdir), 'share')) as share:
+ user_config = {
+ 'scheduler': {
+ 'pushers': 1
+ },
+ 'source-caches': {
+ 'url': share.repo,
+ 'push': True,
+ },
+ 'cachedir': cache_dir,
+ }
+ cli.configure(user_config)
+
+ repo = create_repo('git', str(tmpdir))
+ ref = repo.create(os.path.join(project_dir, 'files'))
+ element_path = os.path.join(project_dir, 'elements')
+
+ element_name = 'always-fail.bst'
+ element = {
+ 'kind': 'always_fail',
+ 'sources': [repo.source_config(ref=ref)]
+ }
+ _yaml.dump(element, os.path.join(element_path, element_name))
+
+ res = cli.run(project=project_dir, args=['build', 'always-fail.bst'])
+ res.assert_main_error(ErrorDomain.STREAM, None)
+ res.assert_task_error(ErrorDomain.ELEMENT, None)
+
+ # Sources are not pushed as the build queue is before the source push
+ # queue.
+ assert "Pushed source " not in res.stderr