def module_user(request, module_target_sat, default_org, default_location): """Creates admin user with default org set to module org and shares that user for all tests in the same test module. User's login contains test module name as a prefix. :rtype: :class:`nailgun.entities.Organization` """ # take only "module" from "tests.foreman.virtwho.test_module" test_module_name = request.module.__name__.split('.')[-1].split('_', 1)[-1] login = f'{test_module_name}_{gen_string("alphanumeric")}' password = gen_string('alphanumeric') logger.debug('Creating session user %r', login) user = module_target_sat.api.User( admin=True, default_organization=default_org, default_location=default_location, description= f'created automatically by airgun for module "{test_module_name}"', login=login, password=password, ).create() user.password = password yield user try: logger.debug('Deleting session user %r', user.login) user.delete(synchronous=False) except HTTPError as err: logger.warning('Unable to delete session user: %s', str(err))
def get_settings(): """Return Lazy settings object after validating :return: A validated Lazy settings object """ settings = LazySettings( envvar_prefix="ROBOTTELO", core_loaders=["YAML"], settings_file="settings.yaml", preload=["conf/*.yaml"], includes=["settings.local.yaml", ".secrets.yaml", ".secrets_*.yaml"], envless_mode=True, lowercase_read=True, load_dotenv=True, ) settings.validators.register(**VALIDATORS) try: settings.validators.validate() except ValidationError as err: logger.warning( f'Dynaconf validation failed, continuing for the sake of unit tests\n{err}' ) return settings
def get_host_sat_version(): """Fetches host's Satellite version through SSH :return: Satellite version :rtype: version """ commands = (_extract_sat_version(c) for c in (_SAT_6_2_VERSION_COMMAND, _SAT_6_1_VERSION_COMMAND)) for version, ssh_result in commands: if version != 'Not Available': logger.debug(f'Host Satellite version: {version}') return version logger.warning(f'Host Satellite version not available: {ssh_result!r}') return version
def get_host_os_version(): """Fetches host's OS version through SSH :return: str with version """ cmd = ssh.command('cat /etc/redhat-release') if cmd.stdout: version_description = cmd.stdout[0] version_re = r'Red Hat Enterprise Linux Server release (?P<version>\d(\.\d)*)' result = re.search(version_re, version_description) if result: host_os_version = f'RHEL{result.group("version")}' logger.debug(f'Host version: {host_os_version}') return host_os_version logger.warning(f'Host version not available: {cmd!r}') return 'Not Available'
def get_data_bz(bz_numbers, cached_data=None): # pragma: no cover """Get a list of marked BZ data and query Bugzilla REST API. Arguments: bz_numbers {list of str} -- ['123456', ...] cached_data Returns: [list of dicts] -- [{'id':..., 'status':..., 'resolution': ...}] """ if not bz_numbers: return [] cached_by_call = CACHED_RESPONSES['get_data'].get(str(sorted(bz_numbers))) if cached_by_call: return cached_by_call if cached_data: logger.debug(f"Using cached data for {set(bz_numbers)}") if not all([f'BZ:{number}' in cached_data for number in bz_numbers]): logger.debug("There are BZs out of cache.") return [item['data'] for _, item in cached_data.items() if 'data' in item] # Ensure API key is set if not settings.bugzilla.api_key: logger.warning( "Config file is missing bugzilla api_key " "so all tests with skip_if_open mark is skipped. " "Provide api_key or a bz_cache.json." ) # Provide default data for collected BZs return [get_default_bz(number) for number in bz_numbers] # No cached data so Call Bugzilla API logger.debug(f"Calling Bugzilla API for {set(bz_numbers)}") bz_fields = [ "id", "summary", "status", "resolution", "cf_last_closed", "last_change_time", "creation_time", "flags", "keywords", "dupe_of", "target_milestone", "cf_clone_of", "clone_ids", "depends_on", ] # Following fields are dynamically calculated/loaded for field in ('is_open', 'clones', 'version'): assert field not in bz_fields response = requests.get( f"{settings.bugzilla.url}/rest/bug", params={ "id": ",".join(set(bz_numbers)), "include_fields": ",".join(bz_fields), }, headers={"Authorization": f"Bearer {settings.bugzilla.api_key}"}, ) response.raise_for_status() data = response.json().get('bugs') CACHED_RESPONSES['get_data'][str(sorted(bz_numbers))] = data return data
settings = LazySettings( envvar_prefix="ROBOTTELO", core_loaders=["YAML"], settings_file="settings.yaml", preload=["conf/*.yaml"], includes=["settings.local.yaml", ".secrets.yaml", ".secrets_*.yaml"], envless_mode=True, lowercase_read=True, ) settings.validators.register(**VALIDATORS) try: settings.validators.validate() except ValidationError: logger.warning( "Dynaconf validation failed, continuing for the sake of unit tests") if not os.getenv('BROKER_DIRECTORY'): # set the BROKER_DIRECTORY envar so broker knows where to operate from os.environ['BROKER_DIRECTORY'] = settings.broker.get('broker_directory') robottelo_tmp_dir = Path(settings.robottelo.tmp_dir) robottelo_tmp_dir.mkdir(parents=True, exist_ok=True) def get_credentials(): """Return credentials for interacting with a Foreman deployment API. :return: A username-password pair. :rtype: tuple
settings = LazySettings( envvar_prefix="ROBOTTELO", core_loaders=["YAML"], settings_file="settings.yaml", preload=["conf/*.yaml"], includes=["settings.local.yaml", ".secrets.yaml", ".secrets_*.yaml"], envless_mode=True, lowercase_read=True, ) settings.validators.register(**VALIDATORS) try: settings.validators.validate() except ValidationError as err: logger.warning( f'Dynaconf validation failed, continuing for the sake of unit tests\n{err}' ) if not os.getenv('BROKER_DIRECTORY'): # set the BROKER_DIRECTORY envar so broker knows where to operate from os.environ['BROKER_DIRECTORY'] = settings.broker.get('broker_directory') robottelo_tmp_dir = Path(settings.robottelo.tmp_dir) robottelo_tmp_dir.mkdir(parents=True, exist_ok=True) def get_credentials(): """Return credentials for interacting with a Foreman deployment API. :return: A username-password pair. :rtype: tuple