Example #1
0
 def test_packager_image_without_matches(self, PackagerContext):
     context = PackagerContext.return_value
     packager = Packager(context, {})
     packager.client = MagicMock()
     packager.client.images.return_value = []
     with self.assertRaises(PackagerException):
         packager.image
Example #2
0
 def test_packager_build_image(self, PackagerContext):
     context = PackagerContext.return_value
     context.__str__.return_value = 'foo'
     context.path = '/tmp'
     packager = Packager(context, {})
     packager.client.build = MagicMock()
     packager.build_image()
     packager.client.build.assert_called_with('/tmp', tag='rpmbuild_foo', stream=True)
Example #3
0
 def test_packager_build_package(self, PackagerContext):
     context = PackagerContext.return_value
     packager = Packager(context, {})
     packager.client = MagicMock()
     packager.client.images.return_value = [{'Id': 0}]
     result_container, result_logs = packager.build_package()
     container = packager.client.create_container.return_value
     packager.client.create_container.assert_called_with(0)
     packager.client.logs.assert_called_with(container, stream=True)
     packager.client.start.assert_called_with(container)
     self.assertEqual(result_container, container)
Example #4
0
def main():
    args = docopt(__doc__, version='Docker Packager 0.0.1')

    if args['build']:
        context = PackagerContext(
            args['<image>'],
            defines=args['--define'],
            sources=args['--source'],
            sources_dir=args['--sources-dir'],
            spec=args['--spec'],
            macrofiles=args['--macrofile'],
            retrieve=args['--retrieve'],
        )

    if args['rebuild']:
        context = PackagerContext(args['<image>'], srpm=args['--srpm'])

    try:
        with Packager(context, get_docker_config(args)) as p:
            for line in p.build_image():
                if is_py26:
                    parsed = json.loads(line.decode('UTF-8'))
                else:
                    parsed = json.loads(line.decode(encoding='UTF-8'))
                if 'stream' not in parsed:
                    print(parsed)
                else:
                    print(parsed['stream'].strip())

            container, logs = p.build_package()

            for line in logs:
                if is_py26:
                    print(line.decode('UTF-8').strip())
                else:
                    print(line.decode(encoding='UTF-8').strip())

            for path in p.export_package(args['--output']):
                print('Wrote: %s' % path)

    except PackagerException:
        print('Container build failed!', file=sys.stderr)
        sys.exit(1)
Example #5
0
    def test_packager_export_package(self, PackagerContext):
        context = PackagerContext.return_value
        packager = Packager(context, {})
        packager.container = {'Id': 0}
        packager.client = MagicMock()
        packager.client.copy.return_value = self.docker_file
        packager.client.diff.return_value = [
            {'Path': '/foo'},
            {'Path': '/rpmbuild/SOURCES/foo.tar.gz'},
            {'Path': '/rpmbuild/SPECS/foo.spec'},
            {'Path': '/rpmbuild/foo.rpm'},
            {'Path': '/rpmbuild/foo.src.rpm'},
        ]

        with patch('rpmbuild.open', self.open, create=True):
            packager.export_package('/tmp')

        packager.client.copy.assert_any_call(0, '/rpmbuild/foo.rpm')
        packager.client.copy.assert_any_call(0, '/rpmbuild/foo.src.rpm')
        self.open.assert_any_call('/tmp/foo.rpm', 'wb')
        self.open.assert_any_call('/tmp/foo.src.rpm', 'wb')
        exported = self.open()
        exported.write.assert_called_with(self.docker_file_content)
Example #6
0
 def test_packager_with_statement(self, PackagerContext):
     context = PackagerContext.return_value
     with Packager(context, {}):
         context.setup.assert_called_with()
     context.teardown.assert_called_with()
Example #7
0
 def test_packager_string(self, PackagerContext):
     context = PackagerContext.return_value
     context.image = 'foo'
     packager = Packager(context, {})
     self.assertEqual(str(packager), 'foo')
Example #8
0
 def test_packager_image_without_matches(self, PackagerContext):
     context = PackagerContext.return_value
     packager = Packager(context, {})
     packager.client = MagicMock()
     packager.client.images.return_value = []
     self.assertRaises(PackagerException, lambda: packager.image)
Example #9
0
 def test_packager_image_with_matches(self, PackagerContext):
     context = PackagerContext.return_value
     packager = Packager(context, {})
     packager.client = MagicMock()
     packager.client.images.return_value = ['foo', 'bar']
     self.assertEqual(packager.image, 'foo')
Example #10
0
 def test_packager_image_name(self, PackagerContext):
     context = PackagerContext.return_value
     context.__str__.return_value = 'foo'
     packager = Packager(context, {})
     self.assertEqual(packager.image_name, 'rpmbuild_foo')
Example #11
0
 def test_packager_init(self, PackagerContext):
     context = PackagerContext.return_value
     Packager(context, {'foo': 'bar'})
     self.docker_client.assert_called_with(**{'foo': 'bar'})