diff options
author | Richard Maw <richard.maw@codethink.co.uk> | 2013-08-07 11:55:25 +0000 |
---|---|---|
committer | Richard Maw <richard.maw@codethink.co.uk> | 2013-08-07 13:41:40 +0100 |
commit | 66291811c81ed21f5005ba35e68898c73edd88bd (patch) | |
tree | a2aefc7e7cb36a73d4c76da349796c3402bbcc20 /morphlib | |
parent | 6c0e0fb41df901771be8074d1e2603ceb26a3926 (diff) | |
download | morph-66291811c81ed21f5005ba35e68898c73edd88bd.tar.gz |
morphologyfactory: refactor chunk bdeps exceptions
This creates a small exception hierarchy for failures to validate
stratum morphologies. This is currently a line rather than a tree,
but it will be expanded later in the patch series.
This also adds test coverage for chunk build dependencies being
omitted.
Diffstat (limited to 'morphlib')
-rw-r--r-- | morphlib/morphologyfactory.py | 19 | ||||
-rw-r--r-- | morphlib/morphologyfactory_tests.py | 17 |
2 files changed, 30 insertions, 6 deletions
diff --git a/morphlib/morphologyfactory.py b/morphlib/morphologyfactory.py index d0d9ea04..394d186a 100644 --- a/morphlib/morphologyfactory.py +++ b/morphlib/morphologyfactory.py @@ -36,6 +36,17 @@ class NotcachedError(MorphologyFactoryError): "remote cache specified" % repo_name) +class StratumError(MorphologyFactoryError): + pass + + +class NoChunkBuildDependsError(StratumError): + def __init__(self, stratum, chunk): + StratumError.__init__( + self, 'No build dependencies in stratum %s for chunk %s ' + '(build-depends is a mandatory field)' % (stratum, chunk)) + + class MorphologyFactory(object): '''An way of creating morphologies which will provide a default''' @@ -136,14 +147,10 @@ class MorphologyFactory(object): def _check_and_tweak_stratum(self, morphology, reponame, sha1, filename): '''Check and tweak a stratum morphology.''' - for source in morphology['chunks']: # pragma: no cover + for source in morphology['chunks']: if source.get('build-depends', None) is None: name = source.get('name', source.get('repo', 'unknown')) - raise morphlib.Error('No build dependencies ' - 'stratum %s for chunk %s ' - '(build-depends is a mandatory ' - 'field)' % - (filename, name)) + raise NoChunkBuildDependsError(filename, name) morphology.builds_artifacts = [morphology['name']] morphology.needs_artifact_metadata_cached = True diff --git a/morphlib/morphologyfactory_tests.py b/morphlib/morphologyfactory_tests.py index b1a6a621..7a3dc343 100644 --- a/morphlib/morphologyfactory_tests.py +++ b/morphlib/morphologyfactory_tests.py @@ -59,6 +59,18 @@ class FakeLocalRepo(object): "name": "stratum", "kind": "stratum" }''', + 'stratum-no-chunk-bdeps.morph': '''{ + "name": "stratum-no-chunk-bdeps", + "kind": "stratum", + "chunks": [ + { + "name": "chunk", + "repo": "test:repo", + "ref": "sha1", + "build-mode": "bootstrap" + } + ] + }''', 'system.morph': '''{ "name": "system", "kind": "system", @@ -261,3 +273,8 @@ class MorphologyFactoryTests(unittest.TestCase): self.assertRaises(morphlib.Error, self.mf.get_morphology, 'reponame', 'sha1', 'parse-error.morph') + def test_fails_on_no_chunk_bdeps(self): + self.assertRaises(morphlib.morphologyfactory.NoChunkBuildDependsError, + self.mf.get_morphology, 'reponame', 'sha1', + 'stratum-no-chunk-bdeps.morph') + |