diff options
-rw-r--r-- | morphlib/morphloader.py | 19 | ||||
-rw-r--r-- | morphlib/morphloader_tests.py | 42 |
2 files changed, 56 insertions, 5 deletions
diff --git a/morphlib/morphloader.py b/morphlib/morphloader.py index bc7ab6ef..8289b01e 100644 --- a/morphlib/morphloader.py +++ b/morphlib/morphloader.py @@ -536,7 +536,12 @@ class MorphologyLoader(object): # Require build-dependencies for the stratum itself, unless # it has chunks built in bootstrap mode. - if 'build-depends' not in morph: + if 'build-depends' in morph: + if not isinstance(morph['build-depends'], list): + raise InvalidTypeError( + 'build-depends', list, type(morph['build-depends']), + morph['name']) + else: for spec in morph['chunks']: if spec.get('build-mode') in ['bootstrap', 'test']: break @@ -549,11 +554,15 @@ class MorphologyLoader(object): # Require build-dependencies for each chunk. for spec in morph['chunks']: - if 'build-depends' not in spec: + chunk_name = spec.get('alias', spec['name']) + if 'build-depends' in spec: + if not isinstance(spec['build-depends'], list): + raise InvalidTypeError( + '%s.build-depends' % chunk_name, list, + type(spec['build-depends']), morph['name']) + else: raise NoBuildDependenciesError( - morph['name'], - spec.get('alias', spec['name']), - morph.filename) + morph['name'], chunk_name, morph.filename) @classmethod def _validate_chunk(cls, morphology): diff --git a/morphlib/morphloader_tests.py b/morphlib/morphloader_tests.py index e783bfdb..dd70c824 100644 --- a/morphlib/morphloader_tests.py +++ b/morphlib/morphloader_tests.py @@ -394,6 +394,48 @@ build-system: dummy m['chunks'][0]['build-mode'] = 'bootstrap' self.loader.validate(m) + def test_validate_stratum_build_deps_are_list(self): + m = morphlib.morphology.Morphology( + { + "name": "stratum-invalid-bdeps", + "kind": "stratum", + "build-depends": 0.1, + "chunks": [ + { + "name": "chunk", + "repo": "test:repo", + "ref": "sha1", + "build-depends": [] + } + ] + }) + + self.assertRaises( + morphlib.morphloader.InvalidTypeError, + self.loader.validate, m) + + def test_validate_chunk_build_deps_are_list(self): + m = morphlib.morphology.Morphology( + { + "name": "stratum-invalid-bdeps", + "kind": "stratum", + "build-depends": [ + { "morph": "foo" }, + ], + "chunks": [ + { + "name": "chunk", + "repo": "test:repo", + "ref": "sha1", + "build-depends": 0.1 + } + ] + }) + + self.assertRaises( + morphlib.morphloader.InvalidTypeError, + self.loader.validate, m) + def test_validate_requires_chunks_in_strata(self): m = morphlib.morphology.Morphology( { |