diff options
Diffstat (limited to 'morphlib/builder2_tests.py')
-rw-r--r-- | morphlib/builder2_tests.py | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/morphlib/builder2_tests.py b/morphlib/builder2_tests.py new file mode 100644 index 00000000..44fffea9 --- /dev/null +++ b/morphlib/builder2_tests.py @@ -0,0 +1,155 @@ +# Copyright (C) 2012 Codethink Limited +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +import json +import os +import StringIO +import unittest + +import morphlib + + +class FakeBuildSystem(object): + + def __init__(self): + self.build_commands = ['buildsys-it'] + + +class FakeStagingArea(object): + + def __init__(self, runcmd): + self.runcmd = runcmd + + +class FakeSource(object): + + def __init__(self): + self.morphology = { + 'name': 'a', + 'kind': 'b', + 'description': 'c', + } + + self.repo = 'd' + self.original_ref = 'e' + self.sha1 = 'f' + self.filename = 'g' + + +class FakeArtifact(object): + + def __init__(self, name): + self.name = name + self.source = FakeSource() + self.cache_key = 'blahblah' + + +class FakeBuildEnv(object): + + def __init__(self): + self.arch = 'le-arch' + self.env = { + 'PATH': '/le-bin:/le-bon:/le-bin-bon', + } + + +class BuilderBaseTests(unittest.TestCase): + + def fake_runcmd(self, argv, *args, **kwargs): + self.commands_run.append(argv) + + def fake_open(self, filename, mode): + self.open_filename = filename + self.open_handle = StringIO.StringIO() + self.open_handle.close = lambda: None + return self.open_handle + + def setUp(self): + self.commands_run = [] + self.staging_area = FakeStagingArea(self.fake_runcmd) + self.artifact_cache = None # Not used by tests + self.artifact = FakeArtifact('le-artifact') + self.build_env = FakeBuildEnv() + self.max_jobs = 1 + self.builder = morphlib.builder2.BuilderBase(self.staging_area, + self.artifact_cache, + self.artifact, + self.build_env, + self.max_jobs) + + def test_returns_an_artifact(self): + artifact = self.builder.new_artifact('le-artifact') + self.assertEqual(type(artifact), morphlib.artifact.Artifact) + + def test_runs_desired_command(self): + self.builder.runcmd(['foo', 'bar']) + self.assertEqual(self.commands_run, [['foo', 'bar']]) + + def test_creates_metadata_with_required_fields(self): + artifact_name = 'le-artifact' + source = self.artifact.source + morphology = source.morphology + meta = self.builder.create_metadata(artifact_name) + self.assertEqual(meta['artifact-name'], artifact_name) + self.assertEqual(meta['source-name'], morphology['name']) + self.assertEqual(meta['kind'], morphology['kind']) + self.assertEqual(meta['description'], morphology['description']) + self.assertEqual(meta['repo'], source.repo) + self.assertEqual(meta['original_ref'], source.original_ref) + self.assertEqual(meta['sha1'], source.sha1) + self.assertEqual(meta['morphology'], source.filename) + + def test_writes_metadata(self): + artifact_name = 'le-artifact' + orig_meta = self.builder.create_metadata(artifact_name) + + instdir = '/inst/dir' + + self.builder._open = self.fake_open + self.builder.write_metadata(instdir, artifact_name) + + self.assertTrue(self.open_filename.startswith( + os.path.join(instdir, 'baserock', + artifact_name + '.'))) + self.assertTrue(self.open_filename.endswith('.meta')) + + meta = json.loads(self.open_handle.getvalue()) + self.assertEqual(meta, orig_meta) + + +class ChunkBuilderTests(unittest.TestCase): + + def setUp(self): + self.build = morphlib.builder2.ChunkBuilder(None, None, None, None, 1) + + def test_uses_morphology_commands_when_given(self): + m = { 'build-commands': ['build-it'] } + bs = FakeBuildSystem() + cmds = self.build.get_commands('build-commands', m, bs) + self.assertEqual(cmds, ['build-it']) + + def test_uses_build_system_commands_when_morphology_doesnt(self): + m = { 'build-commands': None } + bs = FakeBuildSystem() + cmds = self.build.get_commands('build-commands', m, bs) + self.assertEqual(cmds, ['buildsys-it']) + + def test_uses_morphology_commands_when_morphology_has_empty_list(self): + m = { 'build-commands': [] } + bs = FakeBuildSystem() + cmds = self.build.get_commands('build-commands', m, bs) + self.assertEqual(cmds, []) + |