Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
    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)
Beispiel #4
0
    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')
Beispiel #5
0
    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)
Beispiel #6
0
def _is_yum_distro():
    inst = model.Model("/tmp/objectstore")
    repo_type = inst.capabilities_lookup()['repo_mngt_tool']
    return repo_type == 'yum'