update tests

This commit is contained in:
2019-12-26 15:33:51 +01:00
parent 1d25d3a582
commit 50aa8019ab
18 changed files with 464 additions and 352 deletions

View File

@ -5,6 +5,10 @@ from .context import Context
class Controller:
"""Common controller used to add a service in Risotto
"""
def __init__(self,
test: bool):
pass
async def call(self,
uri: str,
risotto_context: Context,

View File

@ -218,11 +218,11 @@ class RegisterDispatcher:
dico['notification'] = notification
self.messages[version][message]['functions'].append(dico)
def set_module(self, module_name, module):
def set_module(self, module_name, module, test):
""" register and instanciate a new module
"""
try:
self.injected_self[module_name] = module.Risotto()
self.injected_self[module_name] = module.Risotto(test)
except AttributeError as err:
raise RegistrationError(_(f'unable to register the module {module_name}, this module must have Risotto class'))

View File

@ -5,7 +5,8 @@ from ..dispatcher import dispatcher
def load_services(modules=None,
validate: bool=True):
validate: bool=True,
test: bool=False):
abs_here = dirname(abspath(__file__))
here = basename(abs_here)
module = basename(dirname(abs_here))
@ -14,6 +15,6 @@ def load_services(modules=None,
for filename in modules:
absfilename = join(abs_here, filename)
if isdir(absfilename) and isfile(join(absfilename, '__init__.py')):
dispatcher.set_module(filename, import_module(f'.{here}.{filename}', module))
dispatcher.set_module(filename, import_module(f'.{here}.{filename}', module), test)
if validate:
dispatcher.validate()

View File

@ -19,15 +19,18 @@ from ...logger import log
class Risotto(Controller):
def __init__(self) -> None:
def __init__(self,
test) -> None:
global conf_storage
self.cache_root_path = join(get_config().get('cache').get('root_path'), 'servermodel')
for dirname in [self.cache_root_path, DATABASE_DIR]:
if not isdir(dirname):
raise RegistrationError(_(f'unable to find the cache dir "{dirname}"'))
self.save_storage = Storage(engine='sqlite3', dir_database=DATABASE_DIR)
if not test:
self.save_storage = Storage(engine='sqlite3', dir_database=DATABASE_DIR)
self.servermodel = {}
self.server = {}
super().__init__()
super().__init__(test)
async def on_join(self,
risotto_context: Context) -> None:
@ -80,28 +83,7 @@ class Risotto(Controller):
None,
f'Load servermodel {servermodel_name} ({servermodel_id})')
# use file in cache if found, otherwise retrieve it in servermodel context
# if isfile(cache_file):
# fileio = open(cache_file)
# else:
# servermodel = await self.call('v1.servermodel.describe',
# risotto_context,
# servermodel_id=servermodel_id,
# inheritance=False,
# resolvdepends=False,
# schema=True,
# creolefuncs=True)
# fileio = BytesIO()
# fileio.write(servermodel['schema'].encode())
# fileio.seek(0)
#
# with open(cache_file, 'w') as cache:
# cache.write(servermodel['schema'])
# with open(funcs_file, 'w') as cache:
# cache.write(servermodel['creolefuncs'])
# del servermodel
#
# # loads tiramisu config and store it
# use file in cache
with open(cache_file) as fileio:
xmlroot = parse(fileio).getroot()
self.servermodel[servermodel_id] = await self.build_metaconfig(servermodel_id,
@ -289,7 +271,7 @@ class Risotto(Controller):
for server_type in ['server', 'server_to_deploy']:
config = self.server[server_id]['server']
for parent in await config.config.parents():
await parent.config.pop(config.config.name())
await parent.config.pop(await config.config.name())
delete_session(storage=self.save_storage,
session_id=await config.config.name())
# delete metaconfig
@ -341,46 +323,46 @@ class Risotto(Controller):
delete_session(storage=self.save_storage,
session_id=await metaconfig.config.name())
return children
@register('v1.servermodel.updated')
async def servermodel_updated(self,
risotto_context: Context,
servermodel_id: int,
servermodel_name: str,
servermodel_parents_id: List[int]) -> None:
log.info_msg(risotto_context,
None,
f'Reload servermodel {servermodel_name} ({servermodel_id})')
# unlink cache to force download new aggregated file
cache_file = join(self.cache_root_path, str(servermodel_id)+".xml")
if isfile(cache_file):
unlink(cache_file)
# store all informations
if servermodel_id in self.servermodel:
old_values = await self.servermodel[servermodel_id].value.exportation()
old_permissives = await self.servermodel[servermodel_id].permissive.exportation()
old_properties = await self.servermodel[servermodel_id].property.exportation()
children = await self.servermodel_delete(servermodel_id)
else:
old_values = None
# create new one
await self.load_and_link_servermodel(risotto_context,
servermodel_id,
servermodel_name,
servermodel_parents_id)
# migrates informations
if old_values is not None:
await self.servermodel[servermodel_id].value.importation(old_values)
await self.servermodel[servermodel_id].permissive.importation(old_permissives)
await self.servermodel[servermodel_id].property.importation(old_properties)
for child in children:
await self.servermodel_legacy(risotto_context,
await child.information.get('servermodel_name'),
await child.information.get('servermodel_id'),
servermodel_id)
#
# @register('v1.servermodel.updated')
# async def servermodel_updated(self,
# risotto_context: Context,
# servermodel_id: int,
# servermodel_name: str,
# servermodel_parents_id: List[int]) -> None:
# log.info_msg(risotto_context,
# None,
# f'Reload servermodel {servermodel_name} ({servermodel_id})')
# # unlink cache to force download new aggregated file
# cache_file = join(self.cache_root_path, str(servermodel_id)+".xml")
# if isfile(cache_file):
# unlink(cache_file)
#
# # store all informations
# if servermodel_id in self.servermodel:
# old_values = await self.servermodel[servermodel_id].value.exportation()
# old_permissives = await self.servermodel[servermodel_id].permissive.exportation()
# old_properties = await self.servermodel[servermodel_id].property.exportation()
# children = await self.servermodel_delete(servermodel_id)
# else:
# old_values = None
#
# # create new one
# await self.load_and_link_servermodel(risotto_context,
# servermodel_id,
# servermodel_name,
# servermodel_parents_id)
#
# # migrates informations
# if old_values is not None:
# await self.servermodel[servermodel_id].value.importation(old_values)
# await self.servermodel[servermodel_id].permissive.importation(old_permissives)
# await self.servermodel[servermodel_id].property.importation(old_properties)
# for child in children:
# await self.servermodel_legacy(risotto_context,
# await child.information.get('servermodel_name'),
# await child.information.get('servermodel_id'),
# servermodel_id)
@register('v1.config.configuration.server.get', None)
async def get_configuration(self,

View File

@ -41,9 +41,9 @@ class Risotto(Controller):
'server_servermodel_id': server_servermodel_id}
@register('v1.server.describe', None, database=True)
async def server_create(self,
risotto_context: Context,
server_name: str) -> Dict:
async def server_describe(self,
risotto_context: Context,
server_name: str) -> Dict:
sql = '''
SELECT ServerId as server_id, ServerName as server_name, ServerDescription as server_description, ServerServermodelId as server_servermodel_id
FROM Server

View File

@ -16,7 +16,8 @@ from ...dispatcher import dispatcher
class Risotto(Controller):
def __init__(self):
def __init__(self,
test):
self.modify_storage = Storage(engine='dictionary')
def get_storage(self,
@ -221,7 +222,7 @@ class Risotto(Controller):
type)
info = self.format_session(session_id, session)
if name is not None:
content = {name: await session['option'].option(name).value.get()}
content = {name: await session['config'].option(name).value.get()}
else:
content = await session['option'].value.dict(fullpath=True,
leader_to_list=True)

View File

@ -44,8 +44,8 @@ class Storage(object):
break
await config.property.read_write()
# set the default owner
self.set_owner(config,
username)
await self.set_owner(config,
username)
# store it
self.sessions[session_id] = {'config': config,
@ -113,10 +113,10 @@ class StorageServer(Storage):
server_id: int):
return f'std_{server_id}'
def set_owner(self,
config: Config,
username: str):
config.owner.set(username)
async def set_owner(self,
config: Config,
username: str):
await config.owner.set(username)
class StorageServermodel(Storage):
@ -124,10 +124,10 @@ class StorageServermodel(Storage):
server_id: int):
return f'v_{server_id}'
def set_owner(self,
config: Config,
username: str):
config.owner.set('servermodel_' + username)
async def set_owner(self,
config: Config,
username: str):
await config.owner.set('servermodel_' + username)
storage_server = StorageServer()