Fix Python issue with build failures; Add test case for build failures. (#2687)
This commit is contained in:
		| @@ -60,9 +60,10 @@ | ||||
|  | ||||
| import llnl.util.lang as lang | ||||
| import llnl.util.tty as tty | ||||
| from llnl.util.filesystem import * | ||||
|  | ||||
| import spack | ||||
| import spack.store | ||||
| from llnl.util.filesystem import * | ||||
| from spack.environment import EnvironmentModifications, validate | ||||
| from spack.util.environment import * | ||||
| from spack.util.executable import Executable, which | ||||
| @@ -450,7 +451,8 @@ def parent_class_modules(cls): | ||||
|     """ | ||||
|     Get list of super class modules that are all descend from spack.Package | ||||
|     """ | ||||
|     if not issubclass(cls, spack.Package) or issubclass(spack.Package, cls): | ||||
|     if (not issubclass(cls, spack.package.Package) or | ||||
|         issubclass(spack.package.Package, cls)): | ||||
|         return [] | ||||
|     result = [] | ||||
|     module = sys.modules.get(cls.__module__) | ||||
| @@ -622,9 +624,9 @@ def make_stack(tb, stack=None): | ||||
|     for tb in stack: | ||||
|         frame = tb.tb_frame | ||||
|         if 'self' in frame.f_locals: | ||||
|             # Find the first proper subclass of spack.PackageBase. | ||||
|             # Find the first proper subclass of PackageBase. | ||||
|             obj = frame.f_locals['self'] | ||||
|             if isinstance(obj, spack.PackageBase): | ||||
|             if isinstance(obj, spack.package.PackageBase): | ||||
|                 break | ||||
|  | ||||
|     # we found obj, the Package implementation we care about. | ||||
|   | ||||
| @@ -90,3 +90,15 @@ def test_store(mock_archive): | ||||
|     except Exception: | ||||
|         pkg.remove_prefix() | ||||
|         raise | ||||
|  | ||||
|  | ||||
| @pytest.mark.usefixtures('install_mockery') | ||||
| def test_failing_build(mock_archive): | ||||
|     spec = Spec('failing-build').concretized() | ||||
|  | ||||
|     for s in spec.traverse(): | ||||
|         fake_fetchify(mock_archive.url, s.package) | ||||
|  | ||||
|     pkg = spec.package | ||||
|     with pytest.raises(spack.build_environment.ChildError): | ||||
|         pkg.do_install() | ||||
|   | ||||
| @@ -0,0 +1,37 @@ | ||||
| ############################################################################## | ||||
| # Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC. | ||||
| # Produced at the Lawrence Livermore National Laboratory. | ||||
| # | ||||
| # This file is part of Spack. | ||||
| # Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. | ||||
| # LLNL-CODE-647188 | ||||
| # | ||||
| # For details, see https://github.com/llnl/spack | ||||
| # Please also see the LICENSE file for our notice and the LGPL. | ||||
| # | ||||
| # 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) version 2.1, February 1999. | ||||
| # | ||||
| # This program 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 terms and | ||||
| # conditions of 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 program; if not, write to the Free Software | ||||
| # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||||
| ############################################################################## | ||||
| from spack import * | ||||
|  | ||||
|  | ||||
| class FailingBuild(Package): | ||||
|     """This package has a trivial install method that fails.""" | ||||
|  | ||||
|     homepage = "http://www.example.com/trivial_install" | ||||
|     url      = "http://www.unit-test-should-replace-this-url/trivial_install-1.0.tar.gz" | ||||
|  | ||||
|     version('1.0', 'foobarbaz') | ||||
|  | ||||
|     def install(self, spec, prefix): | ||||
|         raise InstallError("Expected failure.") | ||||
		Reference in New Issue
	
	Block a user
	 Todd Gamblin
					Todd Gamblin