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

10 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))