from pathlib import Path import json import unittest import logging # from cocluto import ClusterController from cocluto.SimpaDbUtil import SqliteDb from cocluto.quman import QueueManager, init_db, MockGridEngine, QueuesStatus class QumanTestCase(unittest.TestCase): logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') def setUp(self) -> None: return super().setUp() def test_quman(self): logging.info('test_quman') db_path = Path('./quman_test/quman.sqlite') db_path.parent.mkdir(exist_ok=True) if db_path.exists(): db_path.unlink() db_backend = SqliteDb(db_path) init_db(db_backend) qs = QueuesStatus() for node_id in range(40, 44): qs.add_queue(f'main.q@alambix{node_id}', True) qs.add_queue('gpuonly.q@alambix42', True) grid_engine = MockGridEngine(qs) grid_engine.disable_queue_machine('main.q@alambix42') # simulate that the queue is already disabled) quman = QueueManager(db_backend, grid_engine) print('queues state:') grid_engine.queues_status.print() print('disable requests:') print(json.dumps(quman.get_state().as_dict(), indent=2)) print('synchronizing with grid engine...') quman.synchronize_with_grid_engine() print('queues state:') grid_engine.queues_status.print() print('disable requests:') print(json.dumps(quman.get_state().as_dict(), indent=2)) quman.request_queue_machines_deactivation(['main.q@alambix42'], 'sysadmin.graffy', 'disabled to move the alambix42 to another rack') with self.assertRaises(RuntimeError): # attempting to disable the same queue again with the same disable tag should raise an assertion error (the tag is used to uniquely identify the disables on the machine) quman.request_queue_machines_deactivation(['main.q@alambix42'], 'sysadmin.graffy', 'because I want to test quman') quman.request_queue_machines_deactivation(['main.q@alambix42'], 'croconaus.maco-update', 'disabled to update maco') quman.request_queue_machines_activation(['main.q@alambix42'], 'sysadmin.graffy', 'alambix42 has been moved to a new rack') main_queue_machines = quman.get_queue_machines('main.q') quman.request_queue_machines_deactivation(main_queue_machines, 'sysadmin.graffy.bug4242', 'disable all cluster to prepare complete shutdown') main_queue_machines = quman.get_queue_machines('main.q') quman.request_queue_machines_activation(main_queue_machines, 'sysadmin.graffy.bug4242', 'electricity is back, reactivating all cluster') db_backend.dump(Path('./quman_test/quman_dump.sql')) print('queues state:') grid_engine.queues_status.print() print('disable requests:') print(json.dumps(quman.get_state().as_dict(), indent=2)) if __name__ == '__main__': unittest.main()