diff options
author | Richard Maw <richard.maw@gmail.com> | 2014-10-01 15:12:06 +0000 |
---|---|---|
committer | Richard Maw <richard.maw@gmail.com> | 2014-10-01 15:12:06 +0000 |
commit | ce2de6bd60db874f26502350a75de10faa1bf220 (patch) | |
tree | 1d2e681e8e8fd96a6b9dcd7fc0a1349412685dc6 /distbuild/serialise_tests.py | |
parent | b40fb0e408c23277aa6f3c505baaf531d18ffcba (diff) | |
download | morph-ce2de6bd60db874f26502350a75de10faa1bf220.tar.gz |
Fix and integrate distbuild unit tests
Diffstat (limited to 'distbuild/serialise_tests.py')
-rw-r--r-- | distbuild/serialise_tests.py | 101 |
1 files changed, 63 insertions, 38 deletions
diff --git a/distbuild/serialise_tests.py b/distbuild/serialise_tests.py index 2ad3a384..70973346 100644 --- a/distbuild/serialise_tests.py +++ b/distbuild/serialise_tests.py @@ -23,13 +23,22 @@ import distbuild class MockMorphology(object): - def __init__(self, name): + def __init__(self, name, kind): self.dict = { 'name': '%s.morphology.name' % name, - 'kind': '%s.morphology.kind' % name, + 'kind': kind, + 'chunks': [], + 'products': [ + { + 'artifact': name, + 'include': [r'.*'], + }, + ], } - self.needs_staging_area = None - self.needs_artifact_metadata_cached = None + + @property + def needs_artifact_metadata_cached(self): + return self.dict['kind'] == 'stratum' def keys(self): return self.dict.keys() @@ -40,36 +49,56 @@ class MockMorphology(object): class MockSource(object): - def __init__(self, name): + build_mode = 'staging' + prefix = '/usr' + def __init__(self, name, kind): + self.name = name self.repo = None self.repo_name = '%s.source.repo_name' % name self.original_ref = '%s.source.original_ref' % name self.sha1 = '%s.source.sha1' % name self.tree = '%s.source.tree' % name - self.morphology = MockMorphology(name) + self.morphology = MockMorphology(name, kind) self.filename = '%s.source.filename' % name - - -class MockArtifact(object): - - def __init__(self, name): - self.source = MockSource(name) - self.name = name + self.dependencies = [] self.cache_id = { 'blip': '%s.blip' % name, 'integer': 42, } self.cache_key = '%s.cache_key' % name - self.dependencies = [] + self.artifacts = {} + + +class MockArtifact(object): + + arch = 'testarch' + + def __init__(self, name, kind): + self.source = MockSource(name, kind) + self.source.artifacts = {name: self} + self.name = name + + def walk(self): # pragma: no cover + done = set() + + def depth_first(a): + if a not in done: + done.add(a) + for dep in a.source.dependencies: + for ret in depth_first(dep): + yield ret + yield a + + return list(depth_first(self)) class SerialisationTests(unittest.TestCase): def setUp(self): - self.art1 = MockArtifact('name1') - self.art2 = MockArtifact('name2') - self.art3 = MockArtifact('name3') - self.art4 = MockArtifact('name4') + self.art1 = MockArtifact('name1', 'stratum') + self.art2 = MockArtifact('name2', 'chunk') + self.art3 = MockArtifact('name3', 'chunk') + self.art4 = MockArtifact('name4', 'chunk') def assertEqualMorphologies(self, a, b): self.assertEqual(sorted(a.keys()), sorted(b.keys())) @@ -77,11 +106,8 @@ class SerialisationTests(unittest.TestCase): a_values = [a[k] for k in keys] b_values = [b[k] for k in keys] self.assertEqual(a_values, b_values) - self.assertEqual(a.needs_staging_area, b.needs_staging_area) self.assertEqual(a.needs_artifact_metadata_cached, b.needs_artifact_metadata_cached) - self.assertEqual(a.needs_staging_area, - b.needs_staging_area) def assertEqualSources(self, a, b): self.assertEqual(a.repo, b.repo) @@ -95,30 +121,29 @@ class SerialisationTests(unittest.TestCase): def assertEqualArtifacts(self, a, b): self.assertEqualSources(a.source, b.source) self.assertEqual(a.name, b.name) - self.assertEqual(a.cache_id, b.cache_id) - self.assertEqual(a.cache_key, b.cache_key) - self.assertEqual(len(a.dependencies), len(b.dependencies)) - for i in range(len(a.dependencies)): - self.assertEqualArtifacts(a.dependencies[i], b.dependencies[i]) + self.assertEqual(a.source.cache_id, b.source.cache_id) + self.assertEqual(a.source.cache_key, b.source.cache_key) + self.assertEqual(len(a.source.dependencies), + len(b.source.dependencies)) + for i in range(len(a.source.dependencies)): + self.assertEqualArtifacts(a.source.dependencies[i], + b.source.dependencies[i]) def verify_round_trip(self, artifact): encoded = distbuild.serialise_artifact(artifact) decoded = distbuild.deserialise_artifact(encoded) self.assertEqualArtifacts(artifact, decoded) - def key(a): - return a.cache_key - objs = {} queue = [decoded] while queue: obj = queue.pop() - k = key(obj) + k = obj.source.cache_key if k in objs: self.assertTrue(obj is objs[k]) else: objs[k] = obj - queue.extend(obj.dependencies) + queue.extend(obj.source.dependencies) def test_returns_string(self): encoded = distbuild.serialise_artifact(self.art1) @@ -128,21 +153,21 @@ class SerialisationTests(unittest.TestCase): self.verify_round_trip(self.art1) def test_works_with_single_dependency(self): - self.art1.dependencies = [self.art2] + self.art1.source.dependencies = [self.art2] self.verify_round_trip(self.art1) def test_works_with_two_dependencies(self): - self.art1.dependencies = [self.art2, self.art3] + self.art1.source.dependencies = [self.art2, self.art3] self.verify_round_trip(self.art1) def test_works_with_two_levels_of_dependencies(self): - self.art2.dependencies = [self.art4] - self.art1.dependencies = [self.art2, self.art3] + self.art2.source.dependencies = [self.art4] + self.art1.source.dependencies = [self.art2, self.art3] self.verify_round_trip(self.art1) def test_works_with_dag(self): - self.art2.dependencies = [self.art4] - self.art3.dependencies = [self.art4] - self.art1.dependencies = [self.art2, self.art3] + self.art2.source.dependencies = [self.art4] + self.art3.source.dependencies = [self.art4] + self.art1.source.dependencies = [self.art2, self.art3] self.verify_round_trip(self.art1) |