from fileinput import filename import json from pathlib import Path import unittest from unittest.mock import Mock from pyson.ObjectMapper import ObjectMapper from tudelft_utilities_logging.ReportToLogger import ReportToLogger from geniusweb.protocol.NegoSettings import NegoSettings from geniusweb.simplerunner.ClassPathConnectionFactory import ClassPathConnectionFactory from geniusweb.simplerunner.NegoRunner import NegoRunner class SessionRunnerE2ETest(unittest.TestCase): ''' E2E test doing a full real run of a session with real agents and protocol. NOTICE This will exercise a full system to errors here may point far outside this module. ''' TEST_RUNTIME = 5000 jackson = ObjectMapper() logger = Mock(ReportToLogger("test")) filename:str runner:NegoRunner params = ["test/resources/settings.json", # "test/resources/settings2.json" , PARTIALORDERING NOT YET "test/resources/settingsbadprofile.json" # "test/resources/shaoptoursettings.json", ALLPERMUTATIONSETTINGS NOT YET # "test/resources/mopac.json" , MOPAC NOT YET # "test/resources/tournament.json" ALLPERMUTATIONSETTINGS NOT YET ] def testAll(self): ''' runs all the tests. Python has no standard 'parameterized' mechanism so we have to do it ourselves. ''' for filename in self.params: self.filename=filename with self.subTest("before "+self.filename): self.before() with self.subTest("runMain"+self.filename): self.runTestMainFunction() def before(self): print("Running from file " + self.filename) serialized = Path(self.filename).read_text("utf-8") settings=self.jackson.parse(json.loads(serialized), NegoSettings) self.runner = NegoRunner(settings, ClassPathConnectionFactory(), self.logger,self.TEST_RUNTIME) def runTestMainFunction(self) : NegoRunner.main([self.filename]) def runTest(self) : self.runner.run() print("Final state:\n" + str(self.runner.getProtocol().getState())) self.assertTrue(self.runner.isProperlyStopped()) # check no warnings and more severe self.asssertEqual([], self.logger.log.call_args_list)