def _apt_source_list(self, cfg, expected): "_apt_source_list - Test rendering from template (generic)" arch = distro.get_architecture() # would fail inside the unittest context bpath = "curtin.commands.apt_config." upath = bpath + "util." dpath = bpath + 'distro.' self.add_patch(dpath + "get_architecture", "mockga", return_value=arch) self.add_patch(upath + "write_file", "mockwrite") self.add_patch(bpath + "os.rename", "mockrename") self.add_patch(upath + "load_file", "mockload_file", return_value=MOCKED_APT_SRC_LIST) self.add_patch(bpath + "distro.lsb_release", "mock_lsb_release", return_value={'codename': 'fakerel'}) self.add_patch(bpath + "apply_preserve_sources_list", "mock_apply_preserve_sources_list") apt_config.handle_apt(cfg, TARGET) self.mockga.assert_called_with(TARGET) self.mock_apply_preserve_sources_list.assert_called_with(TARGET) calls = [ call(paths.target_path(TARGET, '/etc/apt/sources.list'), expected, mode=0o644) ] self.mockwrite.assert_has_calls(calls)
def _apt_source_list(cfg, expected): "_apt_source_list - Test rendering from template (generic)" arch = util.get_architecture() # would fail inside the unittest context with mock.patch.object(util, 'get_architecture', return_value=arch) as mockga: with mock.patch.object(util, 'write_file') as mockwrite: # keep it side effect free and avoid permission errors with mock.patch.object(os, 'rename'): # make test independent to executing system with mock.patch.object(util, 'load_file', return_value=MOCKED_APT_SRC_LIST): with mock.patch.object( util, 'lsb_release', return_value={'codename': 'fakerel'}): apt_config.handle_apt(cfg, TARGET) mockga.assert_called_with("/") cloudfile = '/etc/cloud/cloud.cfg.d/curtin-preserve-sources.cfg' cloudconf = yaml.dump({'apt_preserve_sources_list': True}, indent=1) calls = [ call(util.target_path(TARGET, '/etc/apt/sources.list'), expected, mode=0o644), call(util.target_path(TARGET, cloudfile), cloudconf, mode=0o644) ] mockwrite.assert_has_calls(calls)
def do_apt_config(cfg, target): cfg = apt_config.translate_old_apt_features(cfg) apt_cfg = cfg.get("apt") if apt_cfg is not None: LOG.info("curthooks handling apt to target %s with config %s", target, apt_cfg) apt_config.handle_apt(apt_cfg, target) else: LOG.info("No apt config provided, skipping")
def test_apt_srcl_custom(self): """test_apt_srcl_custom - Test rendering a custom source template""" cfg = yaml.safe_load(YAML_TEXT_CUSTOM_SL) target = self.new_root arch = distro.get_architecture() # would fail inside the unittest context with mock.patch.object(distro, 'get_architecture', return_value=arch): with mock.patch.object(distro, 'lsb_release', return_value={'codename': 'fakerel'}): apt_config.handle_apt(cfg, target) self.assertEqual( EXPECTED_CONVERTED_CONTENT, util.load_file(paths.target_path(target, "/etc/apt/sources.list")))
def test_apt_srcl_custom(self): """test_apt_srcl_custom - Test rendering a custom source template""" cfg = yaml.safe_load(YAML_TEXT_CUSTOM_SL) target = self.new_root arch = util.get_architecture() # would fail inside the unittest context with mock.patch.object(util, 'get_architecture', return_value=arch): with mock.patch.object(util, 'lsb_release', return_value={'codename': 'fakerel'}): apt_config.handle_apt(cfg, target) self.assertEqual( EXPECTED_CONVERTED_CONTENT, util.load_file(util.target_path(target, "/etc/apt/sources.list"))) cloudfile = util.target_path( target, '/etc/cloud/cloud.cfg.d/curtin-preserve-sources.cfg') self.assertEqual({'apt_preserve_sources_list': True}, yaml.load(util.load_file(cloudfile)))
def test_trusty_source_lists(self, m_get_arch, m_lsb_release): """Support mirror equivalency with and without trailing /. Trusty official images do not have a trailing slash on http://archive.ubuntu.com/ubuntu .""" orig_primary = apt_config.PRIMARY_ARCH_MIRRORS['PRIMARY'] orig_security = apt_config.PRIMARY_ARCH_MIRRORS['SECURITY'] msg = "Test is invalid. %s mirror does not end in a /." self.assertEqual(orig_primary[-1], "/", msg % "primary") self.assertEqual(orig_security[-1], "/", msg % "security") orig_primary = orig_primary[:-1] orig_security = orig_security[:-1] m_lsb_release.return_value = { 'codename': 'trusty', 'description': 'Ubuntu 14.04.5 LTS', 'id': 'Ubuntu', 'release': '14.04' } target = self.new_root my_primary = 'http://fixed-primary.ubuntu.com/ubuntu' my_security = 'http://fixed-security.ubuntu.com/ubuntu' cfg = { 'preserve_sources_list': False, 'primary': [{ 'arches': ['amd64'], 'uri': my_primary }], 'security': [{ 'arches': ['amd64'], 'uri': my_security }] } # this is taken from a trusty image /etc/apt/sources.list tmpl = textwrap.dedent("""\ deb {mirror} {release} {comps} deb {mirror} {release}-updates {comps} deb {mirror} {release}-backports {comps} deb {security} {release}-security {comps} # not modified deb http://my.example.com/updates testing main """) release = 'trusty' comps = 'main universe multiverse restricted' easl = paths.target_path(target, 'etc/apt/sources.list') orig_content = tmpl.format(mirror=orig_primary, security=orig_security, release=release, comps=comps) orig_content_slash = tmpl.format(mirror=orig_primary + "/", security=orig_security + "/", release=release, comps=comps) expected = tmpl.format(mirror=my_primary, security=my_security, release=release, comps=comps) # Avoid useless test. Make sure the strings don't start out equal. self.assertNotEqual(expected, orig_content) util.write_file(easl, orig_content) apt_config.handle_apt(cfg, target) self.assertEqual(expected, util.load_file(easl)) util.write_file(easl, orig_content_slash) apt_config.handle_apt(cfg, target) self.assertEqual(expected, util.load_file(easl))