Exemplo n.º 1
0
 def test_live_build_cross_build(self):
     with ExitStack() as resources:
         tmpdir = resources.enter_context(TemporaryDirectory())
         root_dir = os.path.join(tmpdir, 'root_dir')
         mock = LiveBuildMocker(root_dir)
         resources.enter_context(LogCapture())
         resources.enter_context(
             patch('ubuntu_image.helpers.run', mock.run))
         resources.enter_context(
             patch('ubuntu_image.helpers.get_host_arch',
                   return_value='amd64'))
         resources.enter_context(
             patch('ubuntu_image.helpers.find_executable',
                   return_value='/usr/bin/qemu-arm-static-fake'))
         env = OrderedDict()
         env['PROJECT'] = 'ubuntu-server'
         env['SUITE'] = 'xenial'
         env['ARCH'] = 'armhf'
         live_build(root_dir, env)
         self.assertEqual(len(mock.call_args_list), 3)
         self.assertEqual(
             mock.call_args_list[1],
             ['sudo',
              'PROJECT=ubuntu-server', 'SUITE=xenial', 'ARCH=armhf',
              'lb', 'config',
              '--bootstrap-qemu-arch', 'armhf',
              '--bootstrap-qemu-static', '/usr/bin/qemu-arm-static-fake',
              '--architectures', 'armhf'])
         self.assertEqual(
             mock.call_args_list[2],
             ['sudo',
              'PROJECT=ubuntu-server', 'SUITE=xenial', 'ARCH=armhf',
              'lb', 'build'])
Exemplo n.º 2
0
 def test_live_build_no_cross_build(self):
     with ExitStack() as resources:
         tmpdir = resources.enter_context(TemporaryDirectory())
         root_dir = os.path.join(tmpdir, 'root_dir')
         mock = LiveBuildMocker(root_dir)
         resources.enter_context(LogCapture())
         resources.enter_context(
             patch('ubuntu_image.helpers.run', mock.run))
         resources.enter_context(
             patch('ubuntu_image.helpers.get_host_arch',
                   return_value='amd64'))
         resources.enter_context(
             patch('ubuntu_image.helpers.find_executable',
                   return_value='/usr/bin/qemu-arm-static'))
         env = OrderedDict()
         env['PROJECT'] = 'ubuntu-server'
         env['SUITE'] = 'xenial'
         env['ARCH'] = 'armhf'
         live_build(root_dir, env, enable_cross_build=False)
         # Make sure that if we explicity disable cross-building, no
         # cross-build arguments are passed to lb config
         self.assertEqual(len(mock.call_args_list), 3)
         self.assertEqual(
             mock.call_args_list[1],
             ['sudo',
              'PROJECT=ubuntu-server', 'SUITE=xenial', 'ARCH=armhf',
              'lb', 'config'])
Exemplo n.º 3
0
 def test_live_build_with_full_args(self):
     with ExitStack() as resources:
         tmpdir = resources.enter_context(TemporaryDirectory())
         root_dir = os.path.join(tmpdir, 'root_dir')
         mock = LiveBuildMocker(root_dir)
         resources.enter_context(LogCapture())
         resources.enter_context(patch('ubuntu_image.helpers.run',
                                       mock.run))
         resources.enter_context(
             patch('ubuntu_image.helpers.get_host_arch',
                   return_value='amd64'))
         env = OrderedDict()
         env['PROJECT'] = 'ubuntu-cpc'
         env['SUITE'] = 'xenial'
         env['ARCH'] = 'amd64'
         env['SUBPROJECT'] = 'live'
         env['SUBARCH'] = 'ubuntu-cpc'
         env['PROPOSED'] = 'true'
         env['IMAGEFORMAT'] = 'ext4'
         env['EXTRA_PPAS'] = '******'
         live_build(root_dir, env)
         self.assertEqual(len(mock.call_args_list), 3)
         self.assertEqual(mock.call_args_list[1], [
             'sudo', 'PROJECT=ubuntu-cpc', 'SUITE=xenial', 'ARCH=amd64',
             'SUBPROJECT=live', 'SUBARCH=ubuntu-cpc', 'PROPOSED=true',
             'IMAGEFORMAT=ext4', 'EXTRA_PPAS=foo1/bar1 foo2', 'lb', 'config'
         ])
         self.assertEqual(mock.call_args_list[2], [
             'sudo', 'PROJECT=ubuntu-cpc', 'SUITE=xenial', 'ARCH=amd64',
             'SUBPROJECT=live', 'SUBARCH=ubuntu-cpc', 'PROPOSED=true',
             'IMAGEFORMAT=ext4', 'EXTRA_PPAS=foo1/bar1 foo2', 'lb', 'build'
         ])
Exemplo n.º 4
0
 def test_live_build_env_livecd(self):
     with ExitStack() as resources:
         tmpdir = resources.enter_context(TemporaryDirectory())
         auto_dir = os.path.join(tmpdir, 'auto')
         os.mkdir(auto_dir)
         with open(os.path.join(auto_dir, 'config'), 'w') as fp:
             fp.write('DUMMY')
         root_dir = os.path.join(tmpdir, 'root_dir')
         mock = LiveBuildMocker(root_dir)
         resources.enter_context(LogCapture())
         resources.enter_context(
             patch('ubuntu_image.helpers.run', mock.run))
         resources.enter_context(
             envar('UBUNTU_IMAGE_LIVECD_ROOTFS_AUTO_PATH', auto_dir))
         env = OrderedDict()
         env['PROJECT'] = 'ubuntu-server'
         env['SUITE'] = 'xenial'
         env['ARCH'] = 'amd64'
         live_build(root_dir, env)
         # Make sure that we had no dpkg -L call made.
         self.assertEqual(len(mock.call_args_list), 2)
         self.assertEqual(
             mock.call_args_list[0],
             ['sudo',
              'PROJECT=ubuntu-server', 'SUITE=xenial', 'ARCH=amd64',
              'lb', 'config'])
         self.assertEqual(
             mock.call_args_list[1],
             ['sudo',
              'PROJECT=ubuntu-server', 'SUITE=xenial', 'ARCH=amd64',
              'lb', 'build'])
         config_path = os.path.join(root_dir, 'auto', 'config')
         self.assertTrue(os.path.exists(config_path))
         with open(os.path.join(config_path), 'r') as fp:
             self.assertEqual(fp.read(), 'DUMMY')
Exemplo n.º 5
0
 def test_fs_contents(self):
     # Run the action classic builder through the steps needed to
     # at least call `lb config && lb build`.
     output = self._resources.enter_context(NamedTemporaryFile())
     workdir = self._resources.enter_context(TemporaryDirectory())
     unpackdir = os.path.join(workdir, 'unpack')
     mock = LiveBuildMocker(unpackdir)
     args = SimpleNamespace(
         cmd='classic',
         project='ubuntu-cpc',
         suite='xenial',
         arch='amd64',
         image_format='img',
         output=output.name,
         subproject='subproject',
         subarch='subarch',
         output_dir=None,
         workdir=workdir,
         cloud_init=None,
         with_proposed='1',
         extra_ppas='******',
         hooks_directory=[],
         disk_info=None,
         disable_console_conf=False,
         gadget_tree=self.gadget_tree,
         filesystem=None,
     )
     state = self._resources.enter_context(XXXClassicBuilder(args))
     # Mock out rootfs generation `live_build`
     # and create dummy top-level filesystem layout.
     self._resources.enter_context(
         patch('ubuntu_image.helpers.run', mock.run))
     state.run_thru('populate_bootfs_contents')
     # How does the root and boot file systems look?
     files = [
         '{boot}/EFI/boot/bootx64.efi',
         '{boot}/EFI/boot/grubx64.efi',
         '{boot}/EFI/ubuntu/grub.cfg',
         '{root}/boot/',
     ]
     for filename in files:
         path = filename.format(
             root=state.rootfs,
             boot=state.gadget.volumes['pc'].bootfs,
         )
         self.assertTrue(os.path.exists(path), path)
     # Simply check if all top-level files and folders exist.
     for dirname in DIRS_UNDER_ROOTFS:
         path = os.path.join(state.rootfs, dirname)
         self.assertTrue(os.path.exists(path), path)
Exemplo n.º 6
0
 def test_live_build_cross_build_no_static(self):
     with ExitStack() as resources:
         tmpdir = resources.enter_context(TemporaryDirectory())
         root_dir = os.path.join(tmpdir, 'root_dir')
         mock = LiveBuildMocker(root_dir)
         resources.enter_context(LogCapture())
         resources.enter_context(patch('ubuntu_image.helpers.run',
                                       mock.run))
         resources.enter_context(
             patch('ubuntu_image.helpers.get_host_arch',
                   return_value='amd64'))
         resources.enter_context(
             patch('ubuntu_image.helpers.find_executable',
                   return_value=None))
         env = OrderedDict()
         env['PROJECT'] = 'ubuntu-server'
         env['SUITE'] = 'xenial'
         env['ARCH'] = 'armhf'
         with self.assertRaises(DependencyError) as cm:
             live_build(root_dir, env)
         self.assertEqual(len(mock.call_args_list), 1)
         self.assertEqual(cm.exception.name, 'qemu-arm-static')
Exemplo n.º 7
0
 def test_live_build(self):
     with ExitStack() as resources:
         tmpdir = resources.enter_context(TemporaryDirectory())
         root_dir = os.path.join(tmpdir, 'root_dir')
         mock = LiveBuildMocker(root_dir)
         resources.enter_context(LogCapture())
         resources.enter_context(
             patch('ubuntu_image.helpers.run', mock.run))
         env = OrderedDict()
         env['PROJECT'] = 'ubuntu-server'
         env['SUITE'] = 'xenial'
         env['ARCH'] = 'amd64'
         live_build(root_dir, env)
         self.assertEqual(len(mock.call_args_list), 3)
         self.assertEqual(
             mock.call_args_list[1],
             ['sudo',
              'PROJECT=ubuntu-server', 'SUITE=xenial', 'ARCH=amd64',
              'lb', 'config'])
         self.assertEqual(
             mock.call_args_list[2],
             ['sudo',
              'PROJECT=ubuntu-server', 'SUITE=xenial', 'ARCH=amd64',
              'lb', 'build'])