source: geniuswebcore/test/geniusweb/protocol/session/saop/SAOPSettingsTest.py@ 100

Last change on this file since 100 was 100, checked in by ruud, 14 months ago

python installs also wheel to avoid error messages

File size: 4.7 KB
Line 
1import json
2from typing import List
3from unittest import mock
4import unittest
5from unittest.mock import Mock
6
7from pyson.ObjectMapper import ObjectMapper
8from tudelft_utilities_logging.ReportToLogger import ReportToLogger
9from unitpy.GeneralTests import GeneralTests
10from uri.uri import URI
11
12from geniusweb.deadline.Deadline import Deadline
13from geniusweb.deadline.DeadlineRounds import DeadlineRounds
14from geniusweb.deadline.DeadlineTime import DeadlineTime
15from geniusweb.protocol.NegoSettings import NegoSettings
16from geniusweb.protocol.session.SessionSettings import SessionSettings
17from geniusweb.protocol.session.TeamInfo import TeamInfo
18from geniusweb.protocol.session.saop.SAOPSettings import SAOPSettings
19from geniusweb.references.Parameters import Parameters
20from geniusweb.references.PartyRef import PartyRef
21from geniusweb.references.PartyWithParameters import PartyWithParameters
22from geniusweb.references.PartyWithProfile import PartyWithProfile
23from geniusweb.references.ProfileRef import ProfileRef
24
25
26class SAOPSettingsTest (unittest.TestCase, GeneralTests[SAOPSettings]):
27
28 partyprof1 = Mock(TeamInfo)
29 partyprof2 = Mock(TeamInfo)
30 partyprof3 = Mock(TeamInfo)
31 participants2:List[TeamInfo] = [partyprof1,partyprof2]
32 participants3:List[TeamInfo] = [partyprof1, partyprof2, partyprof3]
33
34 deadline = Mock(DeadlineTime)
35 deadline2 = Mock(Deadline)
36 settings1 = SAOPSettings(participants2, deadline)
37 settings1a = SAOPSettings(participants2, deadline)
38 settings2 = SAOPSettings(participants3, deadline)
39 settings3 = SAOPSettings(participants2, deadline2)
40 jackson = ObjectMapper()
41
42 serialized = "{\"SAOPSettings\":{\"participants\":[{\"TeamInfo\":{\"parties\":[{\"party\":{\"partyref\":\"http://party1\",\"parameters\":{}},\"profile\":\"http://profile1\"}]}},{\"TeamInfo\":{\"parties\":[{\"party\":{\"partyref\":\"http://party2\",\"parameters\":{}},\"profile\":\"http://profile2\"}]}}],\"deadline\":{\"DeadlineTime\":{\"durationms\":100}}}}";
43
44 deadline.getDuration=Mock(return_value=1000)
45 #work around mypy bug
46 deadline.__repr__=Mock(return_value="deadline") #type:ignore
47 deadline2.__repr__=Mock(return_value="deadline2") #type:ignore
48
49 partyprof1.getSize=Mock(return_value=1)
50 partyprof2.getSize=Mock(return_value=1)
51 partyprof3.getSize=Mock(return_value=1)
52
53 partyprof1.__repr__=Mock(return_value="party and profile 1") #type:ignore
54 partyprof2.__repr__=Mock(return_value="party and profile 2") #type:ignore
55 partyprof3.__repr__=Mock(return_value="party and profile 3") #type:ignore
56
57 # SERIALIZABLE version with REAL objects. Still no workaround for
58 # this...
59 party1 = PartyWithParameters(PartyRef(URI("http://party1")), Parameters())
60 profile1 = ProfileRef(URI("http://profile1"))
61 party2 = PartyWithParameters(PartyRef(URI("http://party2")), Parameters())
62 profile2 = ProfileRef(URI("http://profile2"))
63 partywithprof1 = TeamInfo([PartyWithProfile(party1, profile1)])
64 partywithprof2 = TeamInfo([PartyWithProfile(party2, profile2)])
65 participants = [partywithprof1, partywithprof2]
66
67 deadlinetime = DeadlineTime(100)
68 sersettings = SAOPSettings(participants, deadlinetime)
69
70
71 def getGeneralTestData(self) -> List[List[SAOPSettings]] :
72 return [[self.settings1, self.settings1a],
73 [self.settings2], [self.settings3]]
74
75 def getGeneralTestStrings(self)-> List[str]:
76 return [
77 "SAOPSettings.party and profile 1, party and profile 2.,deadline.",
78 "SAOPSettings.party and profile 1, party and profile 2, party and profile 3.,deadline.",
79 "SAOPSettings.party and profile 1, party and profile 2.,deadline2."]
80
81 def testGetProtocol(self):
82 self.assertEqual("SAOP", str(self.settings1.getProtocol(ReportToLogger("test"))
83 .getRef().getURI()))
84
85 def testConstructorNoDeadline(self):
86 self.assertRaises(ValueError, lambda:SAOPSettings(self.participants2, None))
87
88 def testMaxRuntime(self):
89 self.deadline.getDuration=Mock(return_value=234000)
90 self.assertEqual(234, self.settings1.getMaxRunTime())
91
92 def testMaxRuntimeRounds(self):
93 deadline = Mock(DeadlineRounds)
94 deadline.getDuration=Mock(return_value=12000)
95
96 settings = SAOPSettings(self.participants2, deadline)
97
98 self.assertEqual(12, settings.getMaxRunTime())
99
100 def testDeserialize(self) :
101 obj = self.jackson.parse(json.loads(self.serialized),SessionSettings);
102 print(obj)
103 self.assertEqual(self.sersettings, obj)
104
105 def testDeserializeAsNego(self) :
106 obj = self.jackson.parse(json.loads(self.serialized),NegoSettings);
107 print(obj)
108 self.assertEqual(self.sersettings, obj)
109
110
111 def testSerialize(self):
112 jsonobj = self.jackson.toJson(self.sersettings)
113 print(jsonobj)
114 self.assertEqual(json.loads(self.serialized), jsonobj)
115
116 def testWith(self):
117 saop = SAOPSettings(self.participants2, self.deadline)
118 saop2 = saop.With(self.partyprof3);
119 self.assertEqual(3, len(saop2.getTeams()))
Note: See TracBrowser for help on using the repository browser.