source: protocol/src/test/java/geniusweb/protocol/session/mopac/phase/OptInPhaseTest.java@ 52

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

Fixed small issues in domaineditor.

File size: 7.4 KB
Line 
1package geniusweb.protocol.session.mopac.phase;
2
3import static org.junit.Assert.assertEquals;
4import static org.junit.Assert.assertFalse;
5import static org.junit.Assert.assertTrue;
6import static org.mockito.Mockito.mock;
7import static org.mockito.Mockito.when;
8
9import java.io.IOException;
10import java.net.URISyntaxException;
11import java.util.Arrays;
12import java.util.Collections;
13import java.util.HashMap;
14import java.util.List;
15import java.util.Map;
16
17import org.junit.Test;
18
19import com.fasterxml.jackson.core.JsonProcessingException;
20import com.fasterxml.jackson.databind.ObjectMapper;
21
22import geniusweb.actions.EndNegotiation;
23import geniusweb.actions.PartyId;
24import geniusweb.actions.Vote;
25import geniusweb.actions.Votes;
26import geniusweb.inform.OptIn;
27import geniusweb.issuevalue.Bid;
28import geniusweb.issuevalue.DiscreteValue;
29import geniusweb.protocol.ProtocolException;
30import geniusweb.protocol.session.mopac.PartyStates;
31import geniusweb.voting.VotingEvaluator;
32import geniusweb.voting.votingevaluators.LargestAgreement;
33import geniusweb.voting.votingevaluators.LargestAgreementsLoop;
34import tudelft.utilities.junit.GeneralTests;
35
36/**
37 * We also test defaultPhase here.
38 */
39public class OptInPhaseTest extends GeneralTests<OptInPhase> {
40 private final ObjectMapper jackson = new ObjectMapper();
41
42 private static final long DEADLINE = 10l;
43 private final PartyId party1 = new PartyId("party1");
44 private final PartyId party2 = new PartyId("party2");
45 private final PartyId party3 = new PartyId("party3");
46
47 // private final VotingPhase prevPhase = mock(VotingPhase.class);
48
49 private final Map<PartyId, Integer> powers = new HashMap<>();
50 private final PartyStates states, states2;
51 private final VotingEvaluator evaluator = new LargestAgreement();
52 private final VotingEvaluator evaluator2 = new LargestAgreementsLoop();
53 private final OptInPhase phase, phase1, phase1a, phase2, phase3, phase4;
54
55 // just a test bid
56 private final Bid bid = new Bid("issue", new DiscreteValue("yes"));
57 private final Vote vote = new Vote(party1, bid, 2, 3);
58 private final Votes votes = new Votes(party1, Collections.singleton(vote));
59
60 private final List<Votes> prevVotes = Arrays.asList(votes);
61
62 private final String serialized = "{\"OptInPhase\":{\"votes\":[],\"partyStates\":{\"powers\":{\"party2\":3,\"party1\":2,\"party3\":3},\"notYetActed\":[\"party2\",\"party1\",\"party3\"],\"actions\":[],\"agreements\":{},\"walkedAway\":[],\"exceptions\":{}},\"deadline\":10,\"evaluator\":{\"LargestAgreement\":{}}}}";
63
64 public OptInPhaseTest() {
65 powers.put(party1, 2);
66 powers.put(party2, 3);
67 states2 = new PartyStates(powers);
68 powers.put(party3, 3);
69 states = new PartyStates(powers);
70
71 phase = new OptInPhase(prevVotes, states, DEADLINE, evaluator);
72
73 // in these phases we just don't set prevPhase.
74 // this to avoid serialization troubles.
75 phase1 = new OptInPhase(Collections.emptyList(), states, 10l,
76 evaluator);
77 phase1a = new OptInPhase(Collections.emptyList(), states, 10l,
78 evaluator);
79 phase2 = new OptInPhase(Collections.emptyList(), states2, 10l,
80 evaluator);
81 phase3 = new OptInPhase(Collections.emptyList(), states, 20l,
82 evaluator);
83 phase4 = new OptInPhase(Collections.emptyList(), states, 10l,
84 evaluator2);
85
86 }
87
88 @Override
89 public List<List<OptInPhase>> getGeneralTestData() {
90 return Arrays.asList(Arrays.asList(phase1, phase1a),
91 Arrays.asList(phase2), Arrays.asList(phase3),
92 Arrays.asList(phase4));
93 }
94
95 @Override
96 public List<String> getGeneralTestStrings() {
97 return Arrays.asList(
98 "OptInPhase.*PartyStates.*party2, party1, party3.*\\[\\],Agreements.*\\[\\],\\{\\}.*],10,LargestAgreement.*",
99 "OptInPhase.*PartyStates.*party2, party1.*\\[\\],Agreements.*\\[\\],\\{\\}.*],10,LargestAgreement.*",
100 "OptInPhase.*PartyStates.*party2, party1, party3.*\\[\\],Agreements.*\\[\\],\\{\\}.*],20,LargestAgreement.*",
101 "OptInPhase.*PartyStates.*party2, party1, party3.*\\[\\],Agreements.*\\[\\],\\{\\}.*],10,LargestAgreementsLoop.*");
102 }
103
104 @Test
105 public void smokeTest() {
106 }
107
108 @Test
109 public void testInitState() {
110 assertEquals(3, phase.getPartyStates().getNotYetActed().size());
111 }
112
113 @Test
114 public void testInform() {
115 // when(prevPhase.getVotes()).thenReturn(Arrays.asList(votes));
116 assertEquals(new OptIn(Arrays.asList(votes)), phase.getInform());
117
118 }
119
120 @Test
121 public void isFinalTest() {
122 assertFalse(phase.isFinal(1l));
123 assertTrue(phase.isFinal(10l));
124 }
125
126 @Test
127 public void isFinalTestActorNotYetActed() {
128 PartyStates actedstate = mock(PartyStates.class);
129 when(actedstate.getNotYetActed())
130 .thenReturn(Collections.singleton(party1));
131 OfferPhase testphase = new OfferPhase(actedstate, 10l, evaluator);
132 assertFalse(testphase.isFinal(1l));
133 }
134
135 @Test
136 public void isFinalTestAllActorsActed() {
137 PartyStates actedstate = mock(PartyStates.class);
138 when(actedstate.getNotYetActed()).thenReturn(Collections.emptySet());
139 OfferPhase testphase = new OfferPhase(actedstate, 10l, evaluator);
140 assertTrue(testphase.isFinal(1l));
141 }
142
143 @Test(expected = ProtocolException.class)
144 public void checkIncorrectActorTest() throws ProtocolException {
145 phase.checkAction(party1, new EndNegotiation(party2), 1);
146 }
147
148 @Test(expected = ProtocolException.class)
149 public void checkNotAllowedActionTest() throws ProtocolException {
150 phase.checkAction(party1, new Votes(party2, Collections.emptySet()), 1);
151 }
152
153 @Test
154 public void testFinish() {
155 Phase ph = phase.finish();
156 assertTrue(ph.getPartyStates().getNotYetActed().isEmpty());
157 assertEquals(3, ph.getPartyStates().getExceptions().size());
158 assertTrue(phase.getPartyStates().getAgreements().getMap().isEmpty());
159 }
160
161 @Test(expected = IllegalStateException.class)
162 public void testNextWrong() {
163 // state is not final, should not work
164 phase.next(1, 1000);
165 }
166
167 @Test
168 public void testNextNoParties() {
169 Phase ph = phase.finish();
170 // no parties are left now, all failed
171 // but this is not part of the next() check.
172 Phase next = ph.next(1, 1000);
173 assertTrue(next instanceof OfferPhase);
174 // no remaining parties, since finish kicked all
175 assertTrue(next.getPartyStates().getNotYetActed().isEmpty());
176 }
177
178 @Test
179 public void testAllowed() {
180 // when(prevPhase.getVotes()).thenReturn(Arrays.asList(votes));
181 phase.with(party1, votes, 1l);
182 }
183
184 @Test
185 public void testAllowedNarrowingVote() {
186 // the previous vote was maxPower=3,
187 // so this is an illegal narrowing of the previous vote
188 Vote newVote = new Vote(party1, bid, 2, 2);
189 Votes newVotes = new Votes(party1, Collections.singleton(newVote));
190
191 // when(prevPhase.getVotes()).thenReturn(Arrays.asList(votes));
192
193 // check that party1 was kicked
194 Phase newphase = phase.with(party1, newVotes, 1l);
195 assertTrue(
196 newphase.getPartyStates().getExceptions().containsKey(party1));
197
198 }
199
200 @Test(expected = IllegalArgumentException.class)
201 public void testNextTooShortDuration() {
202 phase.next(1, Phase.PHASE_MINTIME - 1);
203 }
204
205 @Test(expected = IllegalStateException.class)
206 public void testNextNotFinished() {
207 phase.next(1, Phase.PHASE_MINTIME + 1);
208 }
209
210 @Test(expected = IllegalStateException.class)
211 public void testNext() {
212 phase.next(11, Phase.PHASE_MINTIME + 1);
213 }
214
215 @Test
216 public void testDeserialize() throws IOException {
217 Phase obj = jackson.readValue(serialized, Phase.class);
218 System.out.println(obj);
219 assertEquals(phase1, obj);
220 }
221
222 @Test
223 public void testSerialize()
224 throws JsonProcessingException, URISyntaxException {
225
226 String string = jackson.writeValueAsString(phase1);
227 System.out.println(string);
228 assertEquals(serialized, string);
229 }
230
231}
Note: See TracBrowser for help on using the repository browser.