[71] | 1 | from fileinput import filename
|
---|
| 2 | import json
|
---|
| 3 | from pathlib import Path
|
---|
| 4 | import unittest
|
---|
| 5 | from unittest.mock import Mock
|
---|
| 6 |
|
---|
| 7 | from pyson.ObjectMapper import ObjectMapper
|
---|
| 8 | from tudelft_utilities_logging.ReportToLogger import ReportToLogger
|
---|
| 9 |
|
---|
| 10 | from geniusweb.protocol.NegoSettings import NegoSettings
|
---|
| 11 | from geniusweb.simplerunner.ClassPathConnectionFactory import ClassPathConnectionFactory
|
---|
| 12 | from geniusweb.simplerunner.NegoRunner import NegoRunner
|
---|
| 13 |
|
---|
| 14 |
|
---|
| 15 | class SessionRunnerE2ETest(unittest.TestCase):
|
---|
| 16 | '''
|
---|
| 17 | E2E test doing a full real run of a session with real agents and protocol.
|
---|
| 18 | NOTICE This will exercise a full system to errors here may point far outside
|
---|
| 19 | this module.
|
---|
| 20 | '''
|
---|
| 21 | TEST_RUNTIME = 5000
|
---|
| 22 | jackson = ObjectMapper()
|
---|
| 23 | logger = Mock(ReportToLogger("test"))
|
---|
| 24 | filename:str
|
---|
| 25 | runner:NegoRunner
|
---|
| 26 |
|
---|
| 27 | params = ["test/resources/settings.json",
|
---|
| 28 | # "test/resources/settings2.json" , PARTIALORDERING NOT YET
|
---|
| 29 | "test/resources/settingsbadprofile.json",
|
---|
| 30 | # "test/resources/shaoptoursettings.json", ALLPERMUTATIONSETTINGS NOT YET
|
---|
| 31 | "test/resources/mopac.json"
|
---|
| 32 | # "test/resources/tournament.json" ALLPERMUTATIONSETTINGS NOT YET
|
---|
| 33 | ]
|
---|
| 34 |
|
---|
| 35 |
|
---|
| 36 |
|
---|
| 37 | def testAll(self):
|
---|
| 38 | '''
|
---|
| 39 | runs all the tests. Python has no standard 'parameterized' mechanism
|
---|
| 40 | so we have to do it ourselves.
|
---|
| 41 | '''
|
---|
| 42 | for filename in self.params:
|
---|
| 43 | self.filename=filename
|
---|
| 44 | with self.subTest("before "+self.filename):
|
---|
| 45 | self.before()
|
---|
| 46 | with self.subTest("runMain"+self.filename):
|
---|
| 47 | self.runTestMainFunction()
|
---|
| 48 |
|
---|
| 49 | def before(self):
|
---|
| 50 | print("Running from file " + self.filename)
|
---|
| 51 | serialized = Path(self.filename).read_text("utf-8")
|
---|
| 52 | settings=self.jackson.parse(json.loads(serialized), NegoSettings)
|
---|
| 53 | self.runner = NegoRunner(settings, ClassPathConnectionFactory(),
|
---|
| 54 | self.logger,self.TEST_RUNTIME)
|
---|
| 55 |
|
---|
| 56 | def runTestMainFunction(self) :
|
---|
| 57 | NegoRunner.main([self.filename])
|
---|
| 58 |
|
---|
| 59 | def runTest(self) :
|
---|
| 60 | self.runner.run()
|
---|
| 61 | print("Final state:\n" + str(self.runner.getProtocol().getState()))
|
---|
| 62 | self.assertTrue(self.runner.isProperlyStopped())
|
---|
| 63 | # check no warnings and more severe
|
---|
| 64 | self.asssertEqual([], self.logger.log.call_args_list)
|
---|