source: geniuswebcore/test/geniusweb/protocol/session/learn/LearnSettingsTest.py@ 73

Last change on this file since 73 was 73, checked in by Bart Vastenhouw, 3 years ago

Fix for IssueValue hashcode.

File size: 6.2 KB
Line 
1import json
2from typing import List
3import unittest
4from unittest.mock import Mock
5
6from pyson.ObjectMapper import ObjectMapper
7from tudelft_utilities_logging.Reporter import Reporter
8from unitpy.GeneralTests import GeneralTests
9from uri.uri import URI
10
11from geniusweb.deadline.DeadlineRounds import DeadlineRounds
12from geniusweb.protocol.session.SessionSettings import SessionSettings
13from geniusweb.protocol.session.TeamInfo import TeamInfo
14from geniusweb.protocol.session.learn.LearnSettings import LearnSettings
15from geniusweb.references.Parameters import Parameters
16from geniusweb.references.PartyRef import PartyRef
17from geniusweb.references.PartyWithParameters import PartyWithParameters
18from geniusweb.references.PartyWithProfile import PartyWithProfile
19from geniusweb.references.ProfileRef import ProfileRef
20
21
22class LearnSettingsTest (unittest.TestCase, GeneralTests[LearnSettings]):
23 jackson = ObjectMapper()
24
25 serialized = "{\"LearnSettings\":{\"participants\":[{\"TeamInfo\":{\"parties\":[{\"party\":{\"partyref\":\"party1\",\"parameters\":{\"persistentstate\":\"6bb5f909-0079-43ac-a8ac-a31794391074\",\"negotiationdata\":[\"12b5f909-0079-43ac-a8ac-a31794391012\"]}},\"profile\":\"http://prof1\"}]}}],\"deadline\":{\"DeadlineRounds\":{\"rounds\":10,\"durationms\":10000}}}}"
26
27 def setUp(self):
28 self.params = Parameters()
29 self.params = self.params.With("persistentstate",
30 "6bb5f909-0079-43ac-a8ac-a31794391074")
31 self.params = self.params.With("negotiationdata",
32 ["12b5f909-0079-43ac-a8ac-a31794391012"])
33
34 # define participants
35 self.participants = self.createTeam(self.params, 1)
36
37 # participants2
38# ProfileRef profile2 = new ProfileRef("http://prof2");
39# PartyWithProfile partywithp2 = new PartyWithProfile(party1, profile2);
40# List<PartyWithProfile> team2pp = Arrays.asList(partywithp2);
41# TeamInfo team2 = new TeamInfo(team2pp);
42 self.participants2 = self.createTeam(self.params, 2)
43
44 self.deadline = DeadlineRounds(10, 10000)
45 self.deadline2 = DeadlineRounds(20, 10000)
46
47 self.settings1 = LearnSettings(self.participants, self.deadline)
48 self.settings1a = LearnSettings(self.participants, self.deadline)
49 self.settings2 = LearnSettings(self.participants2, self.deadline)
50 self.settings3 = LearnSettings(self.participants, self.deadline2)
51
52
53 def createTeam(self, params:Parameters, partynr:int) -> List[TeamInfo] :
54 '''
55 @param params the parameters for the party
56 @param partynr the serialnr for the party, eg 1 or 2.
57 @return a List of TeamInfo with just 1 team.
58 '''
59 party1ref = PartyRef(URI("party" + str(partynr)))
60 party1 = PartyWithParameters(party1ref, params)
61 profile1 = ProfileRef(URI("http://prof" + str(partynr)))
62 partywithp1 = PartyWithProfile(party1, profile1)
63 team1pp = [partywithp1]
64 team1 = TeamInfo(team1pp)
65 return [team1]
66
67 def getGeneralTestData(self) ->List[List[LearnSettings]]:
68 return [[self.settings1, self.settings1a],[self.settings2], [self.settings3]]
69
70 def getGeneralTestStrings(self)->List[str]:
71 return [
72 "LearnSettings.TeamInfo.*PartyWithProfile.*PartyRef.*party1.*persistentstate=6b.*, negotiationdata=\\[12.*..*ProfileRef.*prof1.*,DeadlineRounds.*10,10000.*",
73 "LearnSettings.TeamInfo.*PartyWithProfile.*PartyRef.*party2.*persistentstate=6b.*, negotiationdata=\\[12.*..*ProfileRef.*prof2.*,DeadlineRounds.*10,10000.*",
74 "LearnSettings.TeamInfo.*PartyWithProfile.*PartyRef.*party1.*persistentstate=6b.*, negotiationdata=\\[12.*..*ProfileRef.*prof1.*,DeadlineRounds.*20,10000.*"]
75
76 def testNullParticipants(self):
77 self.assertRaises(ValueError, lambda:LearnSettings(None, self.deadline))
78
79 def testNullDeadline(self):
80 self.assertRaises(ValueError, lambda:LearnSettings(self.participants, None))
81
82 def testgetMaxRuntimeTest(self):
83 self.assertEqual(10, self.settings1.getMaxRunTime(), 0.00000001)
84
85 def testgetProtocolTest(self):
86 # this will throw if not Learn protocol or another problem.
87 protocol = self.settings1.getProtocol(Mock(Reporter))
88
89
90 def testbadPersistentTest(self):
91 # hack. #1933.
92 newparams = self.params.With("persistentstate",
93 "\"notproperUUID\"")
94 participants = self.createTeam(newparams, 1)
95
96 self.assertRaises(ValueError, lambda:LearnSettings(participants, self.deadline))
97
98 def testpersistentNotStringTest(self):
99 newparams = self.params.With("persistentstate", 32)
100 participants = self.createTeam(newparams, 1)
101
102 self.assertRaises(ValueError, lambda: LearnSettings(participants, self.deadline))
103
104 def testpersistentWithoutQuotesTest(self) :
105 newparams = self.params.With("persistentstate",
106 "6bb5f909-0079-43ac-a8ac-a31794391074")
107 participants = self.createTeam(newparams, 1)
108
109 LearnSettings(participants, self.deadline)
110
111 def testpersistentExtraQuoteTest(self) :
112 newparams = self.params.With("persistentstate",
113 "\"6bb5f909-0079-43ac-a8ac-a31794391074\"")
114 participants = self.createTeam(newparams, 1)
115
116 self.assertRaises(ValueError, lambda:LearnSettings(participants, self.deadline))
117
118 def testnegotiationDataNotList(self):
119 newparams = self.params.With("negotiationdata",
120 "\"12b5f909-0079-43ac-a8ac-a31794391012\"")
121 participants = self.createTeam(newparams, 1)
122 self.assertRaises(ValueError, lambda:LearnSettings(participants, self.deadline))
123
124 def testnegotiationDataBadContents(self):
125 newparams = self.params.With("negotiationdata", "\"bad\"")
126 participants = self.createTeam(newparams, 1)
127 self.assertRaises(ValueError, lambda: LearnSettings(participants, self.deadline))
128
129 def testnegotiationDataNotString(self):
130 newparams = self.params.With("negotiationdata", 12)
131 participants = self.createTeam(newparams, 1)
132 self.assertRaises(ValueError, lambda:LearnSettings(participants,self.deadline))
133
134 def testgetTeamsTest(self):
135 self.assertEqual(self.participants, self.settings1.getTeams())
136 self.assertEqual(1, self.settings1.getTeamSize())
137
138 def testgetDeadlineTest(self):
139 self.assertEqual(self.deadline, self.settings1.getDeadline())
140
141 def testwithTeamTest(self):
142 newset = self.settings1.With(self.participants2[0])
143 self.assertEqual(2, len(newset.getTeams()))
144
145 def testDeserialize(self) :
146 obj = self.jackson.parse(json.loads(self.serialized), SessionSettings)
147 print(obj)
148 self.assertEqual(self.settings1, obj)
149
150 def testSerialize(self):
151 jsonobj = self.jackson.toJson(self.settings1);
152 print(jsonobj)
153 self.assertEqual(json.loads(self.serialized), jsonobj)
154
Note: See TracBrowser for help on using the repository browser.