You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

190 lines
5.0 KiB

9 months ago
import json
import logging
import os
from collections import namedtuple
from leapp import reporting
from leapp.libraries.common.config import architecture
from leapp.models import EnvVar
from leapp.utils.deprecation import deprecated
class produce_mocked(object):
def __init__(self):
self.called = 0
self.model_instances = []
def __call__(self, *model_instances):
self.called += len(model_instances)
self.model_instances.extend(list(model_instances))
class create_report_mocked(object):
def __init__(self):
self.called = 0
self.reports = []
def __call__(self, report_fields):
self.called += 1
report_obj = reporting._create_report_object(report_fields)
full_report = json.loads(report_obj.dump()['report'])
self.reports.append(full_report)
@property
def report_fields(self):
if self.reports:
return self.reports[-1]
return {}
class logger_mocked(object):
def __init__(self):
self.dbgmsg = []
self.infomsg = []
self.warnmsg = []
self.errmsg = []
def debug(self, *args):
self.dbgmsg.extend(args)
def info(self, *args):
self.infomsg.extend(args)
@deprecated(since='2020-09-23', message=(
'The logging.warn method has been deprecated since Python 3.3.'
'Use the warning method instead.'
))
def warn(self, *args):
self.warnmsg.extend(args)
def warning(self, *args):
self.warnmsg.extend(args)
def error(self, *args):
self.errmsg.extend(args)
def __call__(self):
return self
class CurrentActorMocked(object): # pylint:disable=R0904
def __init__(self, arch=architecture.ARCH_X86_64, envars=None, kernel='3.10.0-957.43.1.el7.x86_64',
release_id='rhel', src_ver='7.8', dst_ver='8.1', msgs=None, flavour='default'):
envarsList = [EnvVar(name=k, value=v) for k, v in envars.items()] if envars else []
version = namedtuple('Version', ['source', 'target'])(src_ver, dst_ver)
release = namedtuple('OS_release', ['release_id', 'version_id'])(release_id, src_ver)
self._common_folder = '../../files'
self._common_tools_folder = '../../tools'
self._actor_folder = 'files'
self._actor_tools_folder = 'tools'
self.configuration = namedtuple(
'configuration', ['architecture', 'kernel', 'leapp_env_vars', 'os_release', 'version', 'flavour']
)(arch, kernel, envarsList, release, version, flavour)
self._msgs = msgs or []
def __call__(self):
return self
def get_common_folder_path(self, folder):
return os.path.join(self._common_folder, folder)
def get_common_tool_path(self, name):
return os.path.join(self._common_tools_folder, name)
def consume(self, model):
return iter(filter( # pylint:disable=W0110,W1639
lambda msg: isinstance(msg, model), self._msgs
))
@property
def log(self):
return logging.getLogger(__name__)
def get_actor_file_path(self, name):
return os.path.join(self._actor_folder, name)
# other functions and properties from the API - can be implemented as needed
def serialize(self):
raise NotImplementedError
def get_answers(self, dialog):
raise NotImplementedError
def show_message(self, message):
raise NotImplementedError
@property
def actor_files_paths(self):
raise NotImplementedError
@property
def files_paths(self):
raise NotImplementedError
@property
def common_files_paths(self):
raise NotImplementedError
@property
def actor_tools_paths(self):
raise NotImplementedError
@property
def common_tools_paths(self):
raise NotImplementedError
@property
def tools_paths(self):
raise NotImplementedError
def get_folder_path(self, name):
raise NotImplementedError
def get_actor_folder_path(self, name):
raise NotImplementedError
def get_file_path(self, name):
raise NotImplementedError
def get_common_file_path(self, name):
raise NotImplementedError
def get_tool_path(self, name):
raise NotImplementedError
def get_actor_tool_path(self, name):
raise NotImplementedError
def run(self, *args):
raise NotImplementedError
def produce(self, *models):
raise NotImplementedError
def report_error(self, message, severity, details):
raise NotImplementedError
def make_IOError(error):
"""
Create an IOError instance
Create an IOError instance with the given error number.
:param error: the error number, e.g. errno.ENOENT
"""
return IOError(error, os.strerror(error))
def make_OSError(error):
"""
Create an OSError instance
Create an OSError instance with the given error number.
:param error: the error number, e.g. errno.ENOENT
"""
return OSError(error, os.strerror(error))