from importlib import import_module import pytest from tiramisu import Storage from risotto.context import Context from risotto.services import load_services from risotto.dispatcher import dispatcher from risotto.config import DATABASE_DIR from risotto.services.session.storage import storage_server, storage_servermodel def get_fake_context(module_name): risotto_context = Context() risotto_context.username = 'test' risotto_context.paths.append(f'{module_name}.on_join') risotto_context.type = None return risotto_context def setup_module(module): load_services(['config', 'session'], validate=False) config_module = dispatcher.get_service('config') config_module.save_storage = Storage(engine='sqlite3', dir_database=DATABASE_DIR, name='test') dispatcher.set_module('server', import_module(f'.server', 'fake_services')) dispatcher.set_module('servermodel', import_module(f'.servermodel', 'fake_services')) def teardown_function(function): config_module = dispatcher.get_service('session') storage_server.sessions = {} storage_servermodel.sessions = {} @pytest.mark.asyncio async def test_server_start(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.server: await config_module.on_join(fake_context) await dispatcher.call('v1', 'session.server.start', fake_context, id=3) @pytest.mark.asyncio async def test_server_list(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.server: await config_module.on_join(fake_context) assert not await dispatcher.call('v1', 'session.server.list', fake_context) await dispatcher.call('v1', 'session.server.start', fake_context, id=3) assert await dispatcher.call('v1', 'session.server.list', fake_context) @pytest.mark.asyncio async def test_server_filter_namespace(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.server: await config_module.on_join(fake_context) session = await dispatcher.call('v1', 'session.server.start', fake_context, id=3) session_id = session['session_id'] namespace = 'containers' await dispatcher.call('v1', 'session.server.filter', fake_context, session_id=session_id, namespace=namespace) list_result = await dispatcher.call('v1', 'session.server.list', fake_context) assert list_result[0]['namespace'] == namespace @pytest.mark.asyncio async def test_server_filter_mode(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.server: await config_module.on_join(fake_context) session = await dispatcher.call('v1', 'session.server.start', fake_context, id=3) session_id = session['session_id'] assert session['mode'] == 'normal' mode = 'expert' await dispatcher.call('v1', 'session.server.filter', fake_context, session_id=session_id, mode=mode) list_result = await dispatcher.call('v1', 'session.server.list', fake_context) assert list_result[0]['mode'] == mode @pytest.mark.asyncio async def test_server_filter_debug(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.server: await config_module.on_join(fake_context) session = await dispatcher.call('v1', 'session.server.start', fake_context, id=3) session_id = session['session_id'] assert session['debug'] == False debug = True await dispatcher.call('v1', 'session.server.filter', fake_context, session_id=session_id, debug=debug) list_result = await dispatcher.call('v1', 'session.server.list', fake_context) assert list_result[0]['debug'] == debug #FIXME @pytest.mark.asyncio async def test_server_filter_get(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.server: await config_module.on_join(fake_context) session = await dispatcher.call('v1', 'session.server.start', fake_context, id=3) session_id = session['session_id'] values = await dispatcher.call('v1', 'session.server.get', fake_context, session_id=session_id) assert values == {'content': {"general.mode_conteneur_actif": "non", "general.master.master": [], "general.master.slave1": [], "general.master.slave2": []}, 'debug': False, 'id': 3, 'mode': 'normal', 'namespace': 'creole', 'session_id': session_id, 'timestamp': values['timestamp'], 'username': 'test'} @pytest.mark.asyncio async def test_server_filter_get_one_value(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.server: await config_module.on_join(fake_context) session = await dispatcher.call('v1', 'session.server.start', fake_context, id=3) session_id = session['session_id'] values = await dispatcher.call('v1', 'session.server.get', fake_context, session_id=session_id, name="general.mode_conteneur_actif") assert values == {'content': {"general.mode_conteneur_actif": "non"}, 'debug': False, 'id': 3, 'mode': 'normal', 'namespace': 'creole', 'session_id': session_id, 'timestamp': values['timestamp'], 'username': 'test'} @pytest.mark.asyncio async def test_server_filter_configure(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.server: await config_module.on_join(fake_context) session = await dispatcher.call('v1', 'session.server.start', fake_context, id=3) session_id = session['session_id'] await dispatcher.call('v1', 'session.server.configure', fake_context, session_id=session_id, action='modify', name='general.mode_conteneur_actif', value='oui') list_result = await dispatcher.call('v1', 'session.server.list', fake_context) values = await dispatcher.call('v1', 'session.server.get', fake_context, session_id=session_id, name="general.mode_conteneur_actif") assert values == {'content': {"general.mode_conteneur_actif": "oui"}, 'debug': False, 'id': 3, 'mode': 'normal', 'namespace': 'creole', 'session_id': session_id, 'timestamp': values['timestamp'], 'username': 'test'} @pytest.mark.asyncio async def test_server_filter_validate(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.server: await config_module.on_join(fake_context) session = await dispatcher.call('v1', 'session.server.start', fake_context, id=3) session_id = session['session_id'] await dispatcher.call('v1', 'session.server.validate', fake_context, session_id=session_id) @pytest.mark.asyncio async def test_server_stop(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.server: await config_module.on_join(fake_context) assert not await dispatcher.call('v1', 'session.server.list', fake_context) start = await dispatcher.call('v1', 'session.server.start', fake_context, id=3) session_id = start['session_id'] assert await dispatcher.call('v1', 'session.server.list', fake_context) await dispatcher.call('v1', 'session.server.stop', fake_context, session_id=session_id) assert not await dispatcher.call('v1', 'session.server.list', fake_context) # servermodel @pytest.mark.asyncio async def test_servermodel_start(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.servermodel: await config_module.on_join(fake_context) await dispatcher.call('v1', 'session.servermodel.start', fake_context, id=1) @pytest.mark.asyncio async def test_servermodel_list(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.servermodel: await config_module.on_join(fake_context) assert not await dispatcher.call('v1', 'session.servermodel.list', fake_context) await dispatcher.call('v1', 'session.servermodel.start', fake_context, id=1) assert await dispatcher.call('v1', 'session.servermodel.list', fake_context) @pytest.mark.asyncio async def test_servermodel_filter_namespace(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.servermodel: await config_module.on_join(fake_context) session = await dispatcher.call('v1', 'session.servermodel.start', fake_context, id=1) session_id = session['session_id'] namespace = 'containers' await dispatcher.call('v1', 'session.servermodel.filter', fake_context, session_id=session_id, namespace=namespace) list_result = await dispatcher.call('v1', 'session.servermodel.list', fake_context) assert list_result[0]['namespace'] == namespace @pytest.mark.asyncio async def test_servermodel_filter_mode(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.servermodel: await config_module.on_join(fake_context) session = await dispatcher.call('v1', 'session.servermodel.start', fake_context, id=1) session_id = session['session_id'] assert session['mode'] == 'normal' mode = 'expert' await dispatcher.call('v1', 'session.servermodel.filter', fake_context, session_id=session_id, mode=mode) list_result = await dispatcher.call('v1', 'session.servermodel.list', fake_context) assert list_result[0]['mode'] == mode @pytest.mark.asyncio async def test_servermodel_filter_debug(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.servermodel: await config_module.on_join(fake_context) session = await dispatcher.call('v1', 'session.servermodel.start', fake_context, id=1) session_id = session['session_id'] assert session['debug'] == False debug = True await dispatcher.call('v1', 'session.servermodel.filter', fake_context, session_id=session_id, debug=debug) list_result = await dispatcher.call('v1', 'session.servermodel.list', fake_context) assert list_result[0]['debug'] == debug @pytest.mark.asyncio async def test_servermodel_filter_get(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.servermodel: await config_module.on_join(fake_context) session = await dispatcher.call('v1', 'session.servermodel.start', fake_context, id=1) session_id = session['session_id'] values = await dispatcher.call('v1', 'session.servermodel.get', fake_context, session_id=session_id) assert values == {'content': {"general.mode_conteneur_actif": "non", "general.master.master": [], "general.master.slave1": [], "general.master.slave2": []}, 'debug': False, 'id': 1, 'mode': 'normal', 'namespace': 'creole', 'session_id': session_id, 'timestamp': values['timestamp'], 'username': 'test'} @pytest.mark.asyncio async def test_servermodel_filter_get_one_value(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.servermodel: await config_module.on_join(fake_context) session = await dispatcher.call('v1', 'session.servermodel.start', fake_context, id=1) session_id = session['session_id'] values = await dispatcher.call('v1', 'session.servermodel.get', fake_context, session_id=session_id, name="general.mode_conteneur_actif") assert values == {'content': {"general.mode_conteneur_actif": "non"}, 'debug': False, 'id': 1, 'mode': 'normal', 'namespace': 'creole', 'session_id': session_id, 'timestamp': values['timestamp'], 'username': 'test'} @pytest.mark.asyncio async def test_servermodel_filter_configure(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.servermodel: await config_module.on_join(fake_context) session = await dispatcher.call('v1', 'session.servermodel.start', fake_context, id=1) session_id = session['session_id'] await dispatcher.call('v1', 'session.servermodel.configure', fake_context, session_id=session_id, action='modify', name='general.mode_conteneur_actif', value='oui') list_result = await dispatcher.call('v1', 'session.servermodel.list', fake_context) values = await dispatcher.call('v1', 'session.servermodel.get', fake_context, session_id=session_id, name="general.mode_conteneur_actif") assert values == {'content': {"general.mode_conteneur_actif": "oui"}, 'debug': False, 'id': 1, 'mode': 'normal', 'namespace': 'creole', 'session_id': session_id, 'timestamp': values['timestamp'], 'username': 'test'} @pytest.mark.asyncio async def test_servermodel_filter_validate(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.servermodel: await config_module.on_join(fake_context) session = await dispatcher.call('v1', 'session.servermodel.start', fake_context, id=1) session_id = session['session_id'] await dispatcher.call('v1', 'session.servermodel.validate', fake_context, session_id=session_id) @pytest.mark.asyncio async def test_servermodel_stop(): fake_context = get_fake_context('session') config_module = dispatcher.get_service('config') if not config_module.servermodel: await config_module.on_join(fake_context) assert not await dispatcher.call('v1', 'session.servermodel.list', fake_context) start = await dispatcher.call('v1', 'session.servermodel.start', fake_context, id=1) session_id = start['session_id'] assert await dispatcher.call('v1', 'session.servermodel.list', fake_context) await dispatcher.call('v1', 'session.servermodel.stop', fake_context, session_id=session_id) assert not await dispatcher.call('v1', 'session.servermodel.list', fake_context)