diff options
-rw-r--r-- | morphlib/builder2.py | 8 | ||||
-rw-r--r-- | morphlib/builder2_tests.py | 20 |
2 files changed, 23 insertions, 5 deletions
diff --git a/morphlib/builder2.py b/morphlib/builder2.py index 08427b6f..bc7070d4 100644 --- a/morphlib/builder2.py +++ b/morphlib/builder2.py @@ -70,14 +70,14 @@ def download_depends(constituents, lac, rac): target.close() source.close() -def get_chunk_files(f): +def get_chunk_files(f): # pragma: no cover tar = tarfile.open(fileobj=f) for member in tar.getmembers(): if member.type is not tarfile.DIRTYPE: yield member.name tar.close() -def get_stratum_files(f, lac): +def get_stratum_files(f, lac): # pragma: no cover for ca in (ArtifactCacheReference(a) for a in json.load(f)): cf = lac.get(ca) for filename in get_chunk_files(cf): @@ -102,7 +102,7 @@ def get_overlaps(artifact, constituents, lac): #pragma: no cover overlaps[frozenset(artifacts)].add(filename) return overlaps -def log_overlaps(overlaps): +def log_overlaps(overlaps): #pragma: no cover for overlapping, files in sorted(overlaps.iteritems()): logging.warning(' Artifacts %s overlap with files:' % ', '.join(sorted(a.name for a in overlapping)) @@ -110,7 +110,7 @@ def log_overlaps(overlaps): for filename in sorted(files): logging.warning(' %s' % filename) -def write_overlap_metadata(artifact, overlaps, lac): +def write_overlap_metadata(artifact, overlaps, lac): #pragma: no cover f = lac.put_artifact_metadata(artifact, 'overlaps') # the big list comprehension is because json can't serialize # artifacts, sets or dicts with non-string keys diff --git a/morphlib/builder2_tests.py b/morphlib/builder2_tests.py index 9730b59e..5a86fe75 100644 --- a/morphlib/builder2_tests.py +++ b/morphlib/builder2_tests.py @@ -80,9 +80,15 @@ class FakeFileHandle(object): def __enter__(self): return self - def __exit__(self, type, value, traceback): + def _writeback(self): self._cache._cached[self._key] = self._string + def __exit__(self, type, value, traceback): + self._writeback() + + def close(self): + self._writeback() + def write(self, string): self._string += string @@ -209,6 +215,18 @@ class BuilderBaseTests(unittest.TestCase): self.assertEqual(sorted(events), sorted(meta['build-times'].keys())) + def test_downloads_depends(self): + lac = FakeArtifactCache() + rac = FakeArtifactCache() + afacts = [FakeArtifact(name) for name in ('a', 'b', 'c')] + for a in afacts: + fh = rac.put(a) + fh.write(a.name) + fh.close() + morphlib.builder2.download_depends(afacts, lac, rac) + self.assertTrue(all(lac.has(a) for a in afacts)) + + class ChunkBuilderTests(unittest.TestCase): def setUp(self): |