def _permission_name(entity, which_perm): """Find a permission name. Attempt to locate a permission in :data:`robottelo.constants.PERMISSIONS`. For example, return 'view_architectures' if ``entity`` is ``Architecture`` and ``which_perm`` is 'read'. :param entity: A ``nailgun.entity_mixins.Entity`` subclass. :param str which_perm: Either the word "create", "read", "update" or "delete". :raise: ``LookupError`` if a relevant permission cannot be found, or if multiple results are found. """ pattern = { 'create': '^create_', 'delete': '^destroy_', 'read': '^view_', 'update': '^edit_', }[which_perm] perm_names = [] permissions = (PERMISSIONS.get(entity.__name__) or PERMISSIONS.get('Katello::{0}'.format(entity.__name__))) for permission in permissions: match = re.match(pattern, permission) if match is not None: perm_names.append(permission) if len(perm_names) != 1: raise LookupError( 'Could not find the requested permission. Found: {0}' .format(perm_names) ) return perm_names[0]
def _permission_name(entity, which_perm): """Find a permission name. Attempt to locate a permission in :data:`robottelo.constants.PERMISSIONS`. For example, return 'view_architectures' if ``entity`` is ``Architecture`` and ``which_perm`` is 'read'. :param entity: A ``nailgun.entity_mixins.Entity`` subclass. :param str which_perm: Either the word "create", "read", "update" or "delete". :raise: ``LookupError`` if a relevant permission cannot be found, or if multiple results are found. """ pattern = { 'create': '^create_', 'delete': '^destroy_', 'read': '^view_', 'update': '^edit_', }[which_perm] perm_names = [] permissions = (PERMISSIONS.get(entity.__name__) or PERMISSIONS.get('Katello::{0}'.format(entity.__name__))) for permission in permissions: match = re.match(pattern, permission) if match is not None: perm_names.append(permission) if len(perm_names) != 1: raise LookupError( 'Could not find the requested permission. Found: {0}'.format( perm_names)) return perm_names[0]
def setUpClass(cls): super(PermissionTestCase, cls).setUpClass() cls.permissions = PERMISSIONS.copy() if get_server_software() == 'upstream': cls.permissions[None].extend(cls.permissions.pop('DiscoveryRule')) cls.permissions[None].remove('app_root') cls.permissions[None].remove('attachments') cls.permissions[None].remove('configuration') cls.permissions[None].remove('logs') cls.permissions[None].remove('view_cases') cls.permissions[None].remove('view_log_viewer') result = ssh.command('rpm -qa | grep rubygem-foreman_openscap') if result.return_code != 0: cls.permissions.pop('ForemanOpenscap::Policy') cls.permissions.pop('ForemanOpenscap::ScapContent') cls.permissions[None].remove('destroy_arf_reports') cls.permissions[None].remove('view_arf_reports') cls.permissions[None].remove('create_arf_reports') result = ssh.command('rpm -qa | grep rubygem-foreman_remote_execution') if result.return_code != 0: cls.permissions.pop('JobInvocation') cls.permissions.pop('JobTemplate') cls.permissions.pop('RemoteExecutionFeature') cls.permissions.pop('TemplateInvocation') #: e.g. ['Architecture', 'Audit', 'AuthSourceLdap', …] cls.permission_resource_types = list(cls.permissions.keys()) #: e.g. ['view_architectures', 'create_architectures', …] cls.permission_names = list( chain.from_iterable(cls.permissions.values()))
def create_permissions(self, class_target_sat): # workaround for setting class variables cls = type(self) cls.permissions = PERMISSIONS.copy() if class_target_sat.is_upstream: cls.permissions[None].extend(cls.permissions.pop('DiscoveryRule')) cls.permissions[None].remove('app_root') cls.permissions[None].remove('attachments') cls.permissions[None].remove('configuration') cls.permissions[None].remove('logs') cls.permissions[None].remove('view_cases') cls.permissions[None].remove('view_log_viewer') result = class_target_sat.execute('rpm -qa | grep rubygem-foreman_openscap') if result.status != 0: cls.permissions.pop('ForemanOpenscap::Policy') cls.permissions.pop('ForemanOpenscap::ScapContent') cls.permissions[None].remove('destroy_arf_reports') cls.permissions[None].remove('view_arf_reports') cls.permissions[None].remove('create_arf_reports') result = class_target_sat.execute('rpm -qa | grep rubygem-foreman_remote_execution') if result.status != 0: cls.permissions.pop('JobInvocation') cls.permissions.pop('JobTemplate') cls.permissions.pop('RemoteExecutionFeature') cls.permissions.pop('TemplateInvocation') #: e.g. ['Architecture', 'Audit', 'AuthSourceLdap', …] cls.permission_resource_types = list(cls.permissions.keys()) #: e.g. ['view_architectures', 'create_architectures', …] cls.permission_names = list(chain.from_iterable(cls.permissions.values()))
def setUpClass(cls): super(PermissionTestCase, cls).setUpClass() cls.permissions = PERMISSIONS.copy() if get_server_software() == 'upstream': cls.permissions[None].extend(cls.permissions.pop('DiscoveryRule')) cls.permissions[None].remove('app_root') cls.permissions[None].remove('attachments') cls.permissions[None].remove('configuration') cls.permissions[None].remove('logs') cls.permissions[None].remove('view_cases') cls.permissions[None].remove('view_log_viewer') cls.permissions[None].remove('view_search') result = ssh.command('rpm -qa | grep rubygem-foreman_openscap') if result.return_code != 0: cls.permissions.pop('ForemanOpenscap::Policy') cls.permissions.pop('ForemanOpenscap::ScapContent') cls.permissions[None].remove('destroy_arf_reports') cls.permissions[None].remove('view_arf_reports') cls.permissions[None].remove('create_arf_reports') #: e.g. ['Architecture', 'Audit', 'AuthSourceLdap', …] cls.permission_resource_types = list(cls.permissions.keys()) #: e.g. ['view_architectures', 'create_architectures', …] cls.permission_names = list( chain.from_iterable(cls.permissions.values()))
def test_positive_list_filters_with_pagination(self): """Make sure filters list can be displayed with different items per page value :id: b9c7c6c1-70c2-4d7f-8d36-fa8613acc865 :BZ: 1428516 :expectedresults: `per-page` correctly sets amount of items displayed per page, different `per-page` values divide a list into correct number of pages :CaseImportance: Critical """ role = make_role() res_types = iter(PERMISSIONS.keys()) permissions = [] # Collect more than 20 different permissions while len(permissions) <= 20: permissions += [ permission['name'] for permission in Filter.available_permissions( {'resource-type': next(res_types)}) ] # Create a filter for each permission for perm in permissions: make_filter({ 'role': role['name'], 'permissions': perm, }) # Test different `per-page` values for per_page in (1, 5, 20): with self.subTest(per_page): # Verify the first page contains exactly the same items count # as `per-page` value filters = Role.filters({ 'name': role['name'], 'per-page': per_page, }) self.assertEqual(len(filters), per_page) # Verify pagination and total amount of pages by checking the # items count on the last page last_page = (len(permissions) / per_page + int(len(permissions) % per_page != 0)) filters = Role.filters({ 'name': role['name'], 'page': last_page, 'per-page': per_page, }) self.assertEqual( len(filters), len(permissions) % per_page or per_page)
def test_positive_list_filters_with_pagination(self): """Make sure filters list can be displayed with different items per page value :id: b9c7c6c1-70c2-4d7f-8d36-fa8613acc865 :BZ: 1428516 :expectedresults: `per-page` correctly sets amount of items displayed per page, different `per-page` values divide a list into correct number of pages :CaseImportance: Critical """ role = make_role() res_types = iter(PERMISSIONS.keys()) permissions = [] # Collect more than 20 different permissions while len(permissions) <= 20: permissions += [ permission['name'] for permission in Filter.available_permissions( {'resource-type': next(res_types)}) ] # Create a filter for each permission for perm in permissions: make_filter({ 'role': role['name'], 'permissions': perm, }) # Test different `per-page` values for per_page in (1, 5, 20): with self.subTest(per_page): # Verify the first page contains exactly the same items count # as `per-page` value filters = Role.filters({ 'name': role['name'], 'per-page': per_page, }) self.assertEqual(len(filters), per_page) # Verify pagination and total amount of pages by checking the # items count on the last page last_page = (len(permissions) / per_page + int(len(permissions) % per_page != 0)) filters = Role.filters({ 'name': role['name'], 'page': last_page, 'per-page': per_page, }) self.assertEqual(len(filters), len(permissions) % per_page or per_page)
def setUpClass(cls): super(PermissionTestCase, cls).setUpClass() cls.permissions = PERMISSIONS.copy() if get_server_software() == 'upstream': cls.permissions[None].extend(cls.permissions.pop('DiscoveryRule')) cls.permissions[None].remove('app_root') cls.permissions[None].remove('attachments') cls.permissions[None].remove('configuration') cls.permissions[None].remove('logs') cls.permissions[None].remove('view_cases') cls.permissions[None].remove('view_log_viewer') cls.permissions[None].remove('view_search') #: e.g. ['Architecture', 'Audit', 'AuthSourceLdap', …] cls.permission_resource_types = list(cls.permissions.keys()) #: e.g. ['view_architectures', 'create_architectures', …] cls.permission_names = list( chain.from_iterable(cls.permissions.values()))
def setUpClass(cls): super(PermissionsTestCase, cls).setUpClass() cls.permissions = PERMISSIONS.copy() if get_server_software() == 'upstream': cls.permissions[None].extend(cls.permissions.pop('DiscoveryRule')) cls.permissions[None].remove('app_root') cls.permissions[None].remove('attachments') cls.permissions[None].remove('configuration') cls.permissions[None].remove('logs') cls.permissions[None].remove('view_cases') cls.permissions[None].remove('view_log_viewer') cls.permissions[None].remove('view_search') #: e.g. ['Architecture', 'Audit', 'AuthSourceLdap', …] cls.permission_resource_types = list(cls.permissions.keys()) #: e.g. ['view_architectures', 'create_architectures', …] cls.permission_names = list( chain.from_iterable(cls.permissions.values()))
def make_role_with_permissions(self): """Create new role with a filter""" role = make_role() res_types = iter(PERMISSIONS.keys()) permissions = [] # Collect more than 20 different permissions while len(permissions) <= 20: permissions += [ permission['name'] for permission in Filter.available_permissions( {"search": f"resource_type={next(res_types)}"}) ] # Create a filter for each permission for perm in permissions: make_filter({'role': role['name'], 'permissions': perm}) return { 'role': role, 'permissions': permissions, }