def test_add_remote(self): fid = self.write_tempfile(self.repo_cfg) rf_cfg = config.KeyFileConfigParser(fid.name) remote_name = 'remote "awesomeos-8-container"' url = "https://example.com.not.real/repo" gpg_verify = "true" rf_cfg.add_section(remote_name) self.assertTrue(rf_cfg.has_section(remote_name)) rf_cfg.save() new_contents = open(fid.name, 'r').read() self.assertTrue('awesomeos-8' in new_contents) rf_cfg.set(remote_name, 'url', url) rf_cfg.save() new_contents = open(fid.name, 'r').read() self.assertTrue(url in new_contents) rf_cfg.set(remote_name, 'gpg-verify', gpg_verify) rf_cfg.save() new_contents = open(fid.name, 'r').read() self.assertTrue('gpg-verify' in new_contents) self.assertTrue(gpg_verify in new_contents) self.assertTrue('gpg-verify = true' in new_contents) new_rf_cfg = config.KeyFileConfigParser(fid.name) self.assertTrue(new_rf_cfg.has_section(remote_name)) self.assertEquals(new_rf_cfg.get(remote_name, 'url'), url)
def test_multi_remote_mismatched_ref(self): repo_cfg = """ [core] repo_version=1 mode=bare [remote "lame-ostree"] url=http://lame.example.com.not.real/ gpg-verify=false [remote "awesome-ostree"] url=http://awesome.example.com.not.real/ gpg-verify=false """ origin_cfg = """ [origin] refspec=origremote:thisisnoteitherofthose/awesomeos8/x86_64/controller/docker """ self._setup_config(repo_cfg, origin_cfg) self.updater.run() new_origin = config.KeyFileConfigParser(self.origin_cfg_path.name) # Remote should have been left alone self._assert_origin(new_origin, 'awesome-ostree')
def test_multi_remote_matching_ref(self): repo_cfg = """ [core] repo_version=1 mode=bare [remote "lame-ostree"] url=https://lame.example.com.not.real/ gpg-verify=false [remote "awesome-ostree"] url=https://awesome.example.com.not.real:9999/foo/repo gpg-verify=false """ origin_cfg = """ [origin] refspec=origremote:awesome-ostree/awesomeos8/x86_64/controller/docker """ self._setup_config(repo_cfg, origin_cfg) self.updater.run() # Reload the origin file and make sure it looks right: new_origin = config.KeyFileConfigParser(self.origin_cfg_path.name) self._assert_origin(new_origin, 'awesome-ostree')
def test_remove_section(self): fid = self.write_tempfile(self.repo_cfg) rf_cfg = config.KeyFileConfigParser(fid.name) remote_to_remove = 'remote "awesomeos-7-controller"' self.assertTrue(rf_cfg.has_section(remote_to_remove)) rf_cfg.remove_section(remote_to_remove) self.assertFalse(rf_cfg.has_section(remote_to_remove)) rf_cfg.save() self.assertFalse(rf_cfg.has_section(remote_to_remove)) new_contents = open(fid.name, 'r').read() self.assertFalse(remote_to_remove in new_contents) self.assertFalse('gpg-verify = false' in new_contents) new_rf_cfg = config.KeyFileConfigParser(fid.name) self.assertFalse(new_rf_cfg.has_section(remote_to_remove))
def test_no_remotes(self): repo_cfg = "" origin_cfg = """ [origin] refspec=origremote:thisisnotthesamewords/awesomeos8/x86_64/controller/docker """ self._setup_config(repo_cfg, origin_cfg) self.updater.run() new_origin = config.KeyFileConfigParser(self.origin_cfg_path.name) # No remotes, we don't change the origin at all self._assert_origin(new_origin, 'origremote') self._assert_no_unconfigured_option(new_origin)
def test_no_remotes_unconfigured(self): repo_cfg = "" origin_cfg = """ [origin] refspec=origremote:thisisnotthesamewords/awesomeos8/x86_64/controller/docker unconfigured-state=Use "subscription-manager register" to enable online updates """ self._setup_config(repo_cfg, origin_cfg) self.updater.run() new_origin = config.KeyFileConfigParser(self.origin_cfg_path.name) # No remotes, we don't change the origin at all self._assert_origin(new_origin, 'origremote') self.assertTrue('unconfigured-state' in new_origin.options('origin'))
def test_one_remote_mismatched_ref(self): repo_cfg = """ [remote "awesomeos-atomic-ostree"] url=http://awesome.example.com.not.real/ gpg-verify=false """ origin_cfg = """ [origin] refspec=origremote:thisisnotthesamewords/awesomeos8/x86_64/controller/docker """ self._setup_config(repo_cfg, origin_cfg) self.updater.run() new_origin = config.KeyFileConfigParser(self.origin_cfg_path.name) # FIXME: For now, we pick the first one. self._assert_origin(new_origin, 'awesomeos-atomic-ostree') self._assert_no_unconfigured_option(new_origin)
def test_one_remote_matching_ref(self): repo_cfg = """ [remote "awesomeos-ostree-next-ostree"] url = https://awesome.cdn/content/awesomeos/next/10/ostree/repo gpg-verify = false tls-client-cert-path = /etc/pki/entitlement/12345.pem tls-client-key-path = /etc/pki/entitlement/12345-key.pem """ origin_cfg = """ [origin] refspec=awesomeos-ostree-next-ostree:awesomeos-atomic/10.0-buildmaster/x86_64/standard """ self._setup_config(repo_cfg, origin_cfg) self.updater.run() # Reload the origin file and make sure it looks right: new_origin = config.KeyFileConfigParser(self.origin_cfg_path.name) self._assert_origin(new_origin, 'awesomeos-ostree-next-ostree') self._assert_no_unconfigured_option(new_origin)
def test_one_remote_mismatched_ref_remove_unconfigured(self): repo_cfg = """ [remote "awesomeos-atomic-ostree"] url=http://awesome.example.com.not.real/ gpg-verify=false """ # ostree origins will have 'unconfigured-state' if they need setup origin_cfg = """ [origin] refspec=origremote:thisisnotthesamewords/awesomeos8/x86_64/controller/docker unconfigured-state=Use "subscription-manager register" to enable online updates """ self._setup_config(repo_cfg, origin_cfg) self.updater.run() new_origin = config.KeyFileConfigParser(self.origin_cfg_path.name) # FIXME: For now, we pick the first one. self._assert_origin(new_origin, 'awesomeos-atomic-ostree') self._assert_no_unconfigured_option(new_origin)
def run(self): """ Locate and update the currently deployed origin file. """ self.originfile = self._get_deployed_origin() log.debug("Loading ostree origin file: %s" % self.originfile) # No results if not self.originfile: return origin_cfg = config.KeyFileConfigParser(self.originfile) try: old_refspec = origin_cfg.get('origin', 'refspec') except config.NoSectionError: log.warn("No 'origin' section found in origin file: %s" % self.originfile) return if len(self.repo_config.remotes): log.warn("Multiple remotes configured in %s." % self.repo_config) new_remote = self._get_new_refspec(old_refspec) if new_remote is None: log.warn("Unable to find matching remote for origin: %s" % old_refspec) log.warn("Leaving refspec in %s" % self.originfile) return new_refspec = config.replace_refspec_remote(old_refspec, new_remote) if new_refspec != old_refspec: log.info("Updating refspec in: %s" % self.originfile) log.info(" old = %s" % old_refspec) log.info(" new = %s" % new_refspec) origin_cfg.set('origin', 'refspec', new_refspec) origin_cfg.save() else: log.debug("No change to refspec in %s" % self.originfile)
def test_one_remote_mismatched_ref(self): repo_cfg = """ [core] repo_version=1 mode=bare [remote "awesome-ostree"] url=http://awesome.example.com.not.real/ branches=awesome-ostree/awesome7/x86_64/controller/docker; gpg-verify=false """ origin_cfg = """ [origin] refspec=origremote:thisisnotthesamewords/awesomeos8/x86_64/controller/docker """ self._setup_config(repo_cfg, origin_cfg) self.updater.run() new_origin = config.KeyFileConfigParser( self.origin_cfg_path.name) self._assert_origin(new_origin, 'origremote')
def test_defaults(self): fid = self.write_tempfile(self.repo_cfg) kf_cfg = config.KeyFileConfigParser(fid.name) # There are no defaults, make sure the rhsm ones are skipped self.assertFalse(kf_cfg.has_default('section', 'prop')) self.assertEquals(kf_cfg.defaults(), {})
def run(self): """ Locate and update the currently deployed origin file. """ try: self.originfile = self._get_deployed_origin() except OstreeGIWrapperError, e: log.warning(e) return # No results if not self.originfile: return origin_cfg = config.KeyFileConfigParser(self.originfile) try: old_refspec = origin_cfg.get('origin', 'refspec') except config.NoSectionError: log.warn("No 'origin' section found in origin file: %s" % self.originfile) return # Remove the unconfigured-state flag from the origin config. # Note any changes to origin_cfg here are not saved until later. origin_cfg = self._remove_unconfigured_flag(origin_cfg) if len(self.repo_config.remotes): log.warn("Multiple remotes configured in %s." % self.repo_config)
def _rf_cfg(self): self.fid = self.write_tempfile(self.repo_cfg) self._rf_cfg_instance = config.KeyFileConfigParser(self.fid.name) return self._rf_cfg_instance
def run(self): """ Locate and update the currently deployed origin file. """ self.originfile = self._get_deployed_origin() log.debug("Loading ostree origin file: %s" % self.originfile) # No results if not self.originfile: return origin_cfg = config.KeyFileConfigParser(self.originfile) try: old_refspec = origin_cfg.get('origin', 'refspec') except config.NoSectionError: log.warn("No 'origin' section found in origin file: %s" % self.originfile) return if len(self.repo_config.remotes): log.warn("Multiple remotes configured in %s." % self.repo_config) log.debug("old_refspec: %s" % old_refspec) new_remote = self._get_new_refspec(old_refspec) log.debug("new_remote: %s" % new_remote) if new_remote is None: log.warn("Unable to find matching remote for origin: %s" % old_refspec) log.warn("Leaving refspec in %s" % self.originfile) # TODO: We don't have all the data and namespaces setup yet to insure # we never get this scenario. A fresh installed system with a # respect of # "atomic-host-install:atomic-host/10.0/x86_64/standard" with # remotes "atomic-host-blah-beta" and # "atomic-host-super-preview". Have to update respec with a name # matching at least one of the remotes, so we pick the first one. # This will need to be replaced with a more precise method. # Note this also applies for the case of no matching remote names # and only one remote, which will be the common case for a fresh # install. if len(self.repo_config.remotes): new_remote = sorted([x.name for x in self.repo_config.remotes])[0] log.warn( "No remotes that match refspec for deployed origin found, so " "choosing the first remote names sorted: %s" % new_remote) else: # No remotes, log.debug("No ostree remote urls found in content.") return new_refspec = config.replace_refspec_remote(old_refspec, new_remote) log.debug("old_refspec: %s" % old_refspec) log.debug("new_refspec: %s" % new_refspec) if new_refspec != old_refspec: log.info("Updating refspec in: %s" % self.originfile) log.info(" old = %s" % old_refspec) log.info(" new = %s" % new_refspec) origin_cfg.set('origin', 'refspec', new_refspec) origin_cfg.save() else: log.debug("No change to refspec in %s" % self.originfile)
def test_items(self): fid = self.write_tempfile(self.repo_cfg) kf_cfg = config.KeyFileConfigParser(fid.name) section_one_items = kf_cfg.items('section_one') self.assertEquals(len(section_one_items), 2)
def test_sections(self): fid = self.write_tempfile(self.repo_cfg) kf_cfg = config.KeyFileConfigParser(fid.name) self.assert_items_equals(kf_cfg.sections(), ['section_one', 'section_two']) self.assertEquals(len(kf_cfg.sections()), 2)
def test_items(self): fid = self.write_tempfile(self.repo_cfg) kf_cfg = config.KeyFileConfigParser(fid.name) self.assertEquals(kf_cfg.items('section'), [])