def __init__(self, wok_options): make_dirs = [ os.path.dirname(os.path.abspath(config.get_object_store())), os.path.abspath(config.get_debugreports_path()) ] for directory in make_dirs: if not os.path.isdir(directory): os.makedirs(directory) if hasattr(wok_options, "model"): self.model = wok_options.model elif wok_options.test: self.model = mockmodel.MockModel() else: self.model = gingerBaseModel.Model() dev_env = wok_options.environment != 'production' super(GingerBase, self).__init__(self.model, dev_env) for ident, node in sub_nodes.items(): setattr(self, ident, node(self.model)) self.api_schema = json.load( open( os.path.join(os.path.dirname(os.path.abspath(__file__)), 'API.json'))) self.paths = config.gingerBasePaths self.domain = 'gingerbase' self.messages = messages
def __init__(self, wok_options): make_dirs = [ os.path.dirname(os.path.abspath(config.get_object_store())), os.path.abspath(config.get_debugreports_path()) ] for directory in make_dirs: if not os.path.isdir(directory): os.makedirs(directory) if wok_options.test and (wok_options.test is True or wok_options.test.lower() == 'true'): self.objectstore_loc = tempfile.mktemp() self.model = mockmodel.MockModel(self.objectstore_loc) def remove_objectstore(): if os.path.exists(self.objectstore_loc): os.unlink(self.objectstore_loc) cherrypy.engine.subscribe('exit', remove_objectstore) else: self.model = gingerBaseModel.Model() dev_env = wok_options.environment != 'production' super(Gingerbase, self).__init__(self.model, dev_env) for ident, node in sub_nodes.items(): setattr(self, ident, node(self.model)) self.api_schema = json.load(open(os.path.join(os.path.dirname( os.path.abspath(__file__)), 'API.json'))) self.paths = config.gingerBasePaths self.domain = 'gingerbase' self.messages = messages
def test_repository_disable_enable(self): inst = model.Model(objstore_loc=self.tmp_store) yum_repo = { 'repo_id': 'fedora-fake', 'baseurl': 'http://www.fedora.org' } deb_repo = { 'baseurl': 'http://archive.ubuntu.com/ubuntu/', 'config': { 'dist': 'quantal' } } repo_type = inst.capabilities_lookup()['repo_mngt_tool'] if repo_type == 'yum': repo = yum_repo elif repo_type == 'deb': repo = deb_repo else: # repository management tool was not recognized by Ginger Base # skip test case return system_host_repos = len(inst.repositories_get_list()) repo_id = inst.repositories_create(repo) host_repos = inst.repositories_get_list() self.assertEquals(system_host_repos + 1, len(host_repos)) repo_info = inst.repository_lookup(repo_id) self.assertEquals(True, repo_info['enabled']) inst.repository_disable(repo_id) repo_info = inst.repository_lookup(repo_id) self.assertEquals(False, repo_info['enabled']) inst.repository_enable(repo_id) repo_info = inst.repository_lookup(repo_id) self.assertEquals(True, repo_info['enabled']) # remove files creates inst.repository_delete(repo_id)
def test_repository_create(self): inst = model.Model(objstore_loc=self.tmp_store) yum_repos = [{'repo_id': 'fedora-fake', 'baseurl': 'http://www.fedora.org'}, {'repo_id': 'fedora-updates-fake', 'config': {'mirrorlist': 'http://www.fedoraproject.org'}}] deb_repos = [{'baseurl': 'http://archive.ubuntu.com/ubuntu/', 'config': {'dist': 'quantal'}}, {'baseurl': 'http://archive.ubuntu.com/ubuntu/', 'config': {'dist': 'quantal', 'comps': ['main']}}] yum_invalid_repos = [] deb_invalid_repos = [] for url in invalid_repository_urls: wrong_baseurl = {'repo_id': 'wrong-id', 'baseurl': url} wrong_mirrorlist = {'repo_id': 'wrong-id', 'baseurl': 'www.example.com', 'config': {'mirrorlist': url}} wrong_config_item = { 'repo_id': 'wrong-id', 'baseurl': 'www.example.com', 'config': { 'gpgkey': 'file:///tmp/KEY-fedora-updates-fake-19'}} yum_invalid_repos.append(wrong_baseurl) yum_invalid_repos.append(wrong_mirrorlist) yum_invalid_repos.append(wrong_config_item) wrong_baseurl['config'] = {'dist': 'tasty'} wrong_config = {'baseurl': deb_repos[0]['baseurl'], 'config': { 'unsupported_item': "a_unsupported_item"}} deb_invalid_repos.append(wrong_baseurl) deb_invalid_repos.append(wrong_config) repo_type = inst.capabilities_lookup()['repo_mngt_tool'] if repo_type == 'yum': test_repos = yum_repos invalid_repos = yum_invalid_repos elif repo_type == 'deb': test_repos = deb_repos invalid_repos = deb_invalid_repos else: # repository management tool was not recognized by Ginger Base # skip test case return # create repositories with invalid data for repo in invalid_repos: self.assertRaises(InvalidParameter, inst.repositories_create, repo) for repo in test_repos: system_host_repos = len(inst.repositories_get_list()) repo_id = inst.repositories_create(repo) host_repos = inst.repositories_get_list() self.assertEquals(system_host_repos + 1, len(host_repos)) repo_info = inst.repository_lookup(repo_id) self.assertEquals(repo_id, repo_info['repo_id']) self.assertEquals(True, repo_info.get('enabled')) self.assertEquals(repo.get('baseurl', ''), repo_info.get('baseurl')) original_config = repo.get('config', {}) config_info = repo_info.get('config', {}) if repo_type == 'yum': self.assertEquals(original_config.get('mirrorlist', ''), config_info.get('mirrorlist', '')) self.assertEquals(True, config_info['gpgcheck']) else: self.assertEquals(original_config['dist'], config_info['dist']) self.assertEquals(original_config.get('comps', []), config_info.get('comps', [])) inst.repository_delete(repo_id) self.assertRaises(NotFoundError, inst.repository_lookup, repo_id) self.assertRaises(NotFoundError, inst.repository_lookup, 'google')
def test_repository_update(self): inst = model.Model(objstore_loc=self.tmp_store) yum_repo = {'repo_id': 'fedora-fake', 'baseurl': 'http://www.fedora.org'} yum_new_repo = {'baseurl': 'http://www.fedoraproject.org'} deb_repo = {'baseurl': 'http://archive.ubuntu.com/ubuntu/', 'config': {'dist': 'quantal'}} deb_new_repo = {'baseurl': 'http://br.archive.canonical.com/ubuntu/', 'config': {'dist': 'utopic'}} yum_invalid_repos = [] deb_invalid_repos = [] for url in invalid_repository_urls: wrong_baseurl = {'baseurl': url} wrong_mirrorlist = {'baseurl': 'www.example.com', 'config': {'mirrorlist': url}} yum_invalid_repos.append(wrong_baseurl) yum_invalid_repos.append(wrong_mirrorlist) wrong_baseurl['config'] = {'dist': 'tasty'} deb_invalid_repos.append(wrong_baseurl) repo_type = inst.capabilities_lookup()['repo_mngt_tool'] if repo_type == 'yum': repo = yum_repo new_repo = yum_new_repo invalid_repos = yum_invalid_repos elif repo_type == 'deb': repo = deb_repo new_repo = deb_new_repo invalid_repos = deb_invalid_repos else: # repository management tool was not recognized by Ginger Base # skip test case return system_host_repos = len(inst.repositories_get_list()) with RollbackContext() as rollback: repo_id = inst.repositories_create(repo) rollback.prependDefer(inst.repository_delete, repo_id) host_repos = inst.repositories_get_list() self.assertEquals(system_host_repos + 1, len(host_repos)) # update repositories with invalid data for tmp_repo in invalid_repos: self.assertRaises(InvalidParameter, inst.repository_update, repo_id, tmp_repo) new_repo_id = inst.repository_update(repo_id, new_repo) repo_info = inst.repository_lookup(new_repo_id) self.assertEquals(new_repo_id, repo_info['repo_id']) self.assertEquals(new_repo['baseurl'], repo_info['baseurl']) self.assertEquals(True, repo_info['enabled']) inst.repository_update(new_repo_id, repo)
def _is_yum_distro(): inst = model.Model("/tmp/objectstore") repo_type = inst.capabilities_lookup()['repo_mngt_tool'] return repo_type == 'yum'