summaryrefslogtreecommitdiff
path: root/morphlib/morphloader_tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'morphlib/morphloader_tests.py')
-rw-r--r--morphlib/morphloader_tests.py267
1 files changed, 14 insertions, 253 deletions
diff --git a/morphlib/morphloader_tests.py b/morphlib/morphloader_tests.py
index db22264f..1eac3fbe 100644
--- a/morphlib/morphloader_tests.py
+++ b/morphlib/morphloader_tests.py
@@ -21,6 +21,7 @@ import shutil
import tempfile
import unittest
import warnings
+import yaml
import morphlib
@@ -48,7 +49,8 @@ def stratum_template(name):
class MorphologyLoaderTests(unittest.TestCase):
def setUp(self):
- self.loader = morphlib.morphloader.MorphologyLoader()
+ schemas = morphlib.util.read_schemas()
+ self.loader = morphlib.morphloader.MorphologyLoader(schemas=schemas)
self.tempdir = tempfile.mkdtemp()
self.filename = os.path.join(self.tempdir, 'foo.morph')
@@ -83,166 +85,10 @@ build-system: manual
self.assertRaises(
morphlib.morphloader.MissingFieldError, self.loader.validate, m)
- def test_fails_to_validate_chunk_with_no_fields(self):
- m = morphlib.morphology.Morphology({
- 'kind': 'chunk',
- })
- self.assertRaises(
- morphlib.morphloader.MissingFieldError, self.loader.validate, m)
-
- def test_fails_to_validate_chunk_with_invalid_field(self):
- m = morphlib.morphology.Morphology({
- 'kind': 'chunk',
- 'name': 'foo',
- 'invalid': 'field',
- })
+ def test_fails_to_validate_morphology_not_compliant_with_schema(self):
self.assertRaises(
- morphlib.morphloader.InvalidFieldError, self.loader.validate, m)
-
- def test_validate_requires_products_list(self):
- m = morphlib.morphology.Morphology(
- kind='chunk',
- name='foo',
- products={
- 'foo-runtime': ['.'],
- 'foo-devel': ['.'],
- })
- with self.assertRaises(morphlib.morphloader.InvalidTypeError) as cm:
- self.loader.validate(m)
- e = cm.exception
- self.assertEqual(e.field, 'products')
- self.assertEqual(e.expected, list)
- self.assertEqual(e.actual, dict)
- self.assertEqual(e.morphology_name, 'foo')
-
- def test_validate_requires_products_list_of_mappings(self):
- m = morphlib.morphology.Morphology(
- kind='chunk',
- name='foo',
- products=[
- 'foo-runtime',
- ])
- with self.assertRaises(morphlib.morphloader.InvalidTypeError) as cm:
- self.loader.validate(m)
- e = cm.exception
- self.assertEqual(e.field, 'products[0]')
- self.assertEqual(e.expected, dict)
- self.assertEqual(e.actual, str)
- self.assertEqual(e.morphology_name, 'foo')
-
- def test_validate_requires_products_list_required_fields(self):
- m = morphlib.morphology.Morphology(
- kind='chunk',
- name='foo',
- products=[
- {
- 'factiart': 'foo-runtime',
- 'cludein': [],
- }
- ])
- with self.assertRaises(morphlib.morphloader.MultipleValidationErrors) \
- as cm:
- self.loader.validate(m)
- exs = cm.exception.errors
- self.assertEqual(type(exs[0]), morphlib.morphloader.MissingFieldError)
- self.assertEqual(exs[0].field, 'products[0].artifact')
- self.assertEqual(type(exs[1]), morphlib.morphloader.MissingFieldError)
- self.assertEqual(exs[1].field, 'products[0].include')
- self.assertEqual(type(exs[2]), morphlib.morphloader.InvalidFieldError)
- self.assertEqual(exs[2].field, 'products[0].cludein')
- self.assertEqual(type(exs[3]), morphlib.morphloader.InvalidFieldError)
- self.assertEqual(exs[3].field, 'products[0].factiart')
-
- def test_validate_requires_products_list_include_is_list(self):
- m = morphlib.morphology.Morphology(
- kind='chunk',
- name='foo',
- products=[
- {
- 'artifact': 'foo-runtime',
- 'include': '.*',
- }
- ])
- with self.assertRaises(morphlib.morphloader.InvalidTypeError) as cm:
- self.loader.validate(m)
- ex = cm.exception
- self.assertEqual(ex.field, 'products[0].include')
- self.assertEqual(ex.expected, list)
- self.assertEqual(ex.actual, str)
- self.assertEqual(ex.morphology_name, 'foo')
-
- def test_validate_requires_products_list_include_is_list_of_strings(self):
- m = morphlib.morphology.Morphology(
- kind='chunk',
- name='foo',
- products=[
- {
- 'artifact': 'foo-runtime',
- 'include': [
- 123,
- ]
- }
- ])
- with self.assertRaises(morphlib.morphloader.InvalidTypeError) as cm:
- self.loader.validate(m)
- ex = cm.exception
- self.assertEqual(ex.field, 'products[0].include[0]')
- self.assertEqual(ex.expected, str)
- self.assertEqual(ex.actual, int)
- self.assertEqual(ex.morphology_name, 'foo')
-
-
- def test_fails_to_validate_stratum_with_no_fields(self):
- m = morphlib.morphology.Morphology({
- 'kind': 'stratum',
- })
- self.assertRaises(
- morphlib.morphloader.MissingFieldError, self.loader.validate, m)
-
- def test_fails_to_validate_stratum_with_invalid_field(self):
- m = morphlib.morphology.Morphology({
- 'kind': 'stratum',
- 'name': 'foo',
- 'invalid': 'field',
- })
- self.assertRaises(
- morphlib.morphloader.InvalidFieldError, self.loader.validate, m)
-
- def test_validate_requires_chunk_refs_in_stratum_to_be_strings(self):
- m = morphlib.morphology.Morphology({
- 'kind': 'stratum',
- 'name': 'foo',
- 'build-depends': [],
- 'chunks': [
- {
- 'name': 'chunk',
- 'repo': 'test:repo',
- 'ref': 1,
- 'build-depends': []
- }
- ]
- })
- with self.assertRaises(
- morphlib.morphloader.ChunkSpecRefNotStringError):
- self.loader.validate(m)
-
- def test_fails_to_validate_stratum_with_empty_refs_for_a_chunk(self):
- m = morphlib.morphology.Morphology({
- 'kind': 'stratum',
- 'name': 'foo',
- 'build-depends': [],
- 'chunks' : [
- {
- 'name': 'chunk',
- 'repo': 'test:repo',
- 'ref': None,
- 'build-depends': []
- }
- ]
- })
- with self.assertRaises(
- morphlib.morphloader.EmptyRefError):
- self.loader.validate(m)
+ morphlib.morphloader.MorphologyValidationError,
+ self.loader.load_from_string, 'kind: chunk', 'test')
def test_fails_to_validate_stratum_which_build_depends_on_self(self):
text = '''\
@@ -258,25 +104,6 @@ chunks:
morphlib.morphloader.DependsOnSelfError,
self.loader.load_from_string, text, 'strata/bad-stratum.morph')
- def test_fails_to_validate_system_with_no_fields(self):
- m = morphlib.morphology.Morphology({
- 'kind': 'system',
- })
- self.assertRaises(
- morphlib.morphloader.MissingFieldError, self.loader.validate, m)
-
- def test_fails_to_validate_system_with_invalid_field(self):
- m = morphlib.morphology.Morphology(
- kind="system",
- name="foo",
- arch="blah",
- strata=[
- {'morph': 'bar'},
- ],
- invalid='field')
- self.assertRaises(
- morphlib.morphloader.InvalidFieldError, self.loader.validate, m)
-
def test_fails_to_validate_morphology_with_unknown_kind(self):
m = morphlib.morphology.Morphology({
'kind': 'invalid',
@@ -289,17 +116,13 @@ chunks:
{
"kind": "system",
"name": "foo",
- "arch": "x86-64",
+ "arch": "x86_64",
"strata": [
{
"morph": "stratum",
- "repo": "test1",
- "ref": "ref"
},
{
"morph": "stratum",
- "repo": "test2",
- "ref": "ref"
}
]
})
@@ -355,20 +178,6 @@ chunks:
m['chunks'][0]['build-mode'] = 'bootstrap'
self.loader.validate(m)
- def test_validate_stratum_build_deps_are_list(self):
- m = stratum_template("stratum-invalid-bdeps")
- m['build-depends'] = 0.1
- self.assertRaises(
- morphlib.morphloader.InvalidTypeError,
- self.loader.validate, m)
-
- def test_validate_chunk_build_deps_are_list(self):
- m = stratum_template("stratum-invalid-bdeps")
- m['chunks'][0]['build-depends'] = 0.1
- self.assertRaises(
- morphlib.morphloader.InvalidTypeError,
- self.loader.validate, m)
-
def test_validate_chunk_has_build_instructions(self):
m = stratum_template("stratum-no-build-instructions")
del m['chunks'][0]['build-system']
@@ -383,67 +192,20 @@ chunks:
morphlib.morphloader.ChunkSpecConflictingFieldsError,
self.loader.validate, m)
- def test_validate_requires_chunks_in_strata(self):
- m = stratum_template("stratum-no-chunks")
- del m['chunks']
- self.assertRaises(
- morphlib.morphloader.EmptyStratumError,
- self.loader.validate, m)
-
- def test_validate_requires_strata_in_system(self):
- m = morphlib.morphology.Morphology(
- name='system',
- kind='system',
- arch='testarch')
- self.assertRaises(
- morphlib.morphloader.MissingFieldError,
- self.loader.validate, m)
-
- def test_validate_requires_list_of_strata_in_system(self):
- for v in (None, {}):
- m = morphlib.morphology.Morphology(
- name='system',
- kind='system',
- arch='testarch',
- strata=v)
- with self.assertRaises(
- morphlib.morphloader.SystemStrataNotListError) as cm:
-
- self.loader.validate(m)
- self.assertEqual(cm.exception.strata_type, type(v))
-
- def test_validate_requires_non_empty_strata_in_system(self):
- m = morphlib.morphology.Morphology(
- name='system',
- kind='system',
- arch='testarch',
- strata=[])
- self.assertRaises(
- morphlib.morphloader.EmptySystemError,
- self.loader.validate, m)
-
- def test_validate_requires_stratum_specs_in_system(self):
- m = morphlib.morphology.Morphology(
- name='system',
- kind='system',
- arch='testarch',
- strata=["foo"])
- with self.assertRaises(
- morphlib.morphloader.SystemStratumSpecsNotMappingError) as cm:
-
- self.loader.validate(m)
- self.assertEqual(cm.exception.strata, ["foo"])
-
def test_validate_requires_unique_deployment_names_in_cluster(self):
- subsystem = [{'morph': 'baz', 'deploy': {'foobar': None}}]
+ subsystem = [{'morph': 'baz',
+ 'deploy': {
+ 'foobar': { 'type': 'foo', 'location': 'bar'}}}]
m = morphlib.morphology.Morphology(
name='cluster',
kind='cluster',
systems=[{'morph': 'foo',
- 'deploy': {'deployment': {}},
+ 'deploy':
+ {'deployment': {'type': 'foo', 'location': 'bar'}},
'subsystems': subsystem},
{'morph': 'bar',
- 'deploy': {'deployment': {}},
+ 'deploy':
+ {'deployment': {'type': 'foo', 'location': 'bar'}},
'subsystems': subsystem}])
with self.assertRaises(
morphlib.morphloader.DuplicateDeploymentNameError) as cm:
@@ -537,7 +299,6 @@ build-system: manual
'name': 'foo',
})
self.loader.set_defaults(m)
- self.loader.validate(m)
self.assertEqual(
dict(m),
{