Example #1
0
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))
Example #2
0
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
Example #3
0
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
Example #4
0
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'
Example #5
0
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
Example #6
0
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
Example #7
0
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