1 package org.umu.cops.stack;
3 import org.junit.After;
4 import org.junit.Assert;
5 import org.junit.Before;
7 import org.pcmm.rcd.IPCMMClient;
8 import org.umu.cops.stack.COPSContext.RType;
9 import org.umu.cops.stack.COPSDecision.Command;
10 import org.umu.cops.stack.COPSDecision.DecisionFlag;
11 import org.umu.cops.stack.COPSError.ErrorTypes;
12 import org.umu.cops.stack.COPSHeader.Flag;
13 import org.umu.cops.stack.COPSHeader.OPCode;
14 import org.umu.cops.stack.COPSObjHeader.CType;
16 import java.io.ByteArrayOutputStream;
17 import java.net.InetAddress;
18 import java.net.Socket;
19 import java.util.HashMap;
20 import java.util.HashSet;
25 * Tests for the first constructor of the COPSDecisionMsg class.
26 * Should any of these tests be inaccurate it is due to the fact that they have been written after COPSDecisionMsg had been
27 * released and my assumptions may be incorrect.
29 public class COPSDecisionMsgTest {
31 TestCOPSServer server;
34 final static Map<COPSContext, Set<COPSDecision>> staticDecisions = new HashMap<>();
36 final Set<COPSDecision> decisions1 = new HashSet<>();
37 decisions1.add(new COPSDecision(CType.CSI, Command.INSTALL, DecisionFlag.REQERROR, new COPSData("12345")));
38 staticDecisions.put(new COPSContext(RType.CONFIG, (short)1), decisions1);
42 public void setup() throws Exception {
43 server = new TestCOPSServer();
45 outSocket = new Socket(InetAddress.getLocalHost(), server.getPort());
49 public void tearDown() throws Exception {
54 @Test(expected = IllegalArgumentException.class)
55 public void version0WithError() {
56 new COPSDecisionMsg(0, Flag.SOLICITED, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()),
57 new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA), null);
60 @Test(expected = IllegalArgumentException.class)
61 public void version0WithDecisions() {
62 new COPSDecisionMsg(0, Flag.SOLICITED, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()),
63 staticDecisions, null);
66 @Test(expected = IllegalArgumentException.class)
67 public void nullFlagWithError() {
68 new COPSDecisionMsg(1, null, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()),
69 new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA), null);
72 @Test(expected = IllegalArgumentException.class)
73 public void nullFlagWithDecisions() {
74 new COPSDecisionMsg(1, null, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()),
75 staticDecisions, null);
78 @Test(expected = IllegalArgumentException.class)
79 public void nullHandleDeprecatedWithError() {
80 new COPSDecisionMsg(IPCMMClient.CLIENT_TYPE, null,
81 new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA), null);
84 @Test(expected = IllegalArgumentException.class)
85 public void nullHandleDeprecatedWithDecisions() {
86 new COPSDecisionMsg(IPCMMClient.CLIENT_TYPE, null, staticDecisions, null);
89 @Test(expected = IllegalArgumentException.class)
90 public void nullHandleWithError() {
91 new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE, null,
92 new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA), null);
95 @Test(expected = IllegalArgumentException.class)
96 public void nullHandleWithDecisions() {
97 new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE, null, staticDecisions, null);
100 @Test(expected = IllegalArgumentException.class)
101 public void nullErrorDeprecated() {
102 final COPSError error = null;
103 new COPSDecisionMsg(IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), error, null);
106 @Test(expected = IllegalArgumentException.class)
107 public void nullError() {
108 final COPSError error = null;
109 new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), error, null);
112 @Test(expected = IllegalArgumentException.class)
113 public void nullDecisionsDeprecated() {
114 final Map<COPSContext, Set<COPSDecision>> decisions = null;
115 new COPSDecisionMsg(IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), decisions, null);
118 @Test(expected = IllegalArgumentException.class)
119 public void nullDecisions() {
120 final Map<COPSContext, Set<COPSDecision>> decisions = null;
121 new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), decisions, null);
124 @Test(expected = IllegalArgumentException.class)
125 public void emptyDecisionsMapDeprecated() {
126 final Map<COPSContext, Set<COPSDecision>> decisions = new HashMap<>();
127 new COPSDecisionMsg(IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), decisions, null);
130 @Test(expected = IllegalArgumentException.class)
131 public void emptyDecisionsMap() {
132 final Map<COPSContext, Set<COPSDecision>> decisions = new HashMap<>();
133 new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), decisions, null);
136 @Test(expected = IllegalArgumentException.class)
137 public void nullDecisionsSetDeprecated() {
138 final Map<COPSContext, Set<COPSDecision>> decisions = new HashMap<>();
139 decisions.put(new COPSContext(RType.CONFIG, (short)1), null);
140 new COPSDecisionMsg(IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), decisions, null);
143 @Test(expected = IllegalArgumentException.class)
144 public void nullDecisionsSet() {
145 final Map<COPSContext, Set<COPSDecision>> decisions = new HashMap<>();
146 decisions.put(new COPSContext(RType.CONFIG, (short)1), null);
147 new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), decisions, null);
150 @Test(expected = IllegalArgumentException.class)
151 public void emptyDecisionsSetDeprecated() {
152 final Map<COPSContext, Set<COPSDecision>> decisions = new HashMap<>();
153 decisions.put(new COPSContext(RType.CONFIG, (short)1), new HashSet<COPSDecision>());
154 new COPSDecisionMsg(IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), decisions, null);
157 @Test(expected = IllegalArgumentException.class)
158 public void emptyDecisionsSet() {
159 final Map<COPSContext, Set<COPSDecision>> decisions = new HashMap<>();
160 decisions.put(new COPSContext(RType.CONFIG, (short)1), new HashSet<COPSDecision>());
161 new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), decisions, null);
164 @Test(expected = IllegalArgumentException.class)
165 public void nullHeaderErrorOnly() {
166 final COPSHeader hdr = null;
167 new COPSDecisionMsg(hdr, new COPSHandle(new COPSData()), new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA),
171 @Test(expected = IllegalArgumentException.class)
172 public void nullHeaderDecisionsOnly() {
173 final COPSHeader hdr = null;
174 new COPSDecisionMsg(hdr, new COPSHandle(new COPSData()), null, staticDecisions, null);
177 @Test(expected = IllegalArgumentException.class)
178 public void invalidHdrErrorOnly() {
179 final COPSHeader hdr = new COPSHeader(1, Flag.UNSOLICITED, OPCode.CC, IPCMMClient.CLIENT_TYPE);
180 new COPSDecisionMsg(hdr, new COPSHandle(new COPSData()), new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA),
184 @Test(expected = IllegalArgumentException.class)
185 public void invalidHdrDecisionsOnly() {
186 final COPSHeader hdr = new COPSHeader(1, Flag.UNSOLICITED, OPCode.CC, IPCMMClient.CLIENT_TYPE);
187 new COPSDecisionMsg(hdr, new COPSHandle(new COPSData()), null, staticDecisions, null);
190 @Test(expected = IllegalArgumentException.class)
191 public void withErrorAndDecisions() {
192 final COPSHeader hdr = new COPSHeader(1, Flag.UNSOLICITED, OPCode.DEC, IPCMMClient.CLIENT_TYPE);
193 new COPSDecisionMsg(hdr, new COPSHandle(new COPSData()), new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA),
194 staticDecisions, null);
197 @Test(expected = IllegalArgumentException.class)
198 public void nullErrorAndDecisions() {
199 final COPSHeader hdr = new COPSHeader(1, Flag.UNSOLICITED, OPCode.DEC, IPCMMClient.CLIENT_TYPE);
200 new COPSDecisionMsg(hdr, new COPSHandle(new COPSData()), null, null, null);
204 public void validProtectedError() {
205 final COPSHeader hdr = new COPSHeader(1, Flag.UNSOLICITED, OPCode.DEC, IPCMMClient.CLIENT_TYPE);
206 final COPSDecisionMsg msg = new COPSDecisionMsg(hdr, new COPSHandle(new COPSData()),
207 new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA), null, null);
208 Assert.assertEquals(OPCode.DEC, msg.getHeader().getOpCode());
209 Assert.assertEquals(IPCMMClient.CLIENT_TYPE, msg.getHeader().getClientType());
210 Assert.assertEquals(hdr, msg.getHeader());
211 Assert.assertEquals(new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA), msg.getError());
212 Assert.assertNotNull(msg.getDecisions());
213 Assert.assertTrue(msg.getDecisions().isEmpty());
214 Assert.assertNull(msg.getIntegrity());
218 public void validProtectedDecisions() {
219 final COPSHeader hdr = new COPSHeader(1, Flag.UNSOLICITED, OPCode.DEC, IPCMMClient.CLIENT_TYPE);
220 final COPSDecisionMsg msg = new COPSDecisionMsg(hdr, new COPSHandle(new COPSData()),
221 null, staticDecisions, null);
222 Assert.assertEquals(OPCode.DEC, msg.getHeader().getOpCode());
223 Assert.assertEquals(IPCMMClient.CLIENT_TYPE, msg.getHeader().getClientType());
224 Assert.assertEquals(hdr, msg.getHeader());
225 Assert.assertNull(msg.getError());
226 Assert.assertNotNull(msg.getDecisions());
227 Assert.assertFalse(msg.getDecisions().isEmpty());
228 Assert.assertNotSame(staticDecisions, msg.getDecisions());
229 Assert.assertEquals(staticDecisions, msg.getDecisions());
230 Assert.assertNull(msg.getIntegrity());
234 * This test is responsible for creating a COPSDecisionMsg object with error and no decisions
235 * and then is dumped to an OutputStream.
236 * @throws Exception - Test should fail if any exception is thrown
239 public void testDumpErrorAll() throws Exception {
240 final COPSDecisionMsg msg = new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE,
241 new COPSHandle(new COPSData()), new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA),
242 new COPSIntegrity());
244 final ByteArrayOutputStream os = new ByteArrayOutputStream();
247 final String out = new String(os.toByteArray());
248 System.out.println(out);
249 final String[] lines = out.split("\n");
250 Assert.assertEquals(20, lines.length);
252 // Only checking COPSMsg elements as the COPSObjectMsg elements have already been validated in their own tests
253 Assert.assertEquals("**MSG HEADER**", lines[0]);
254 Assert.assertEquals("Version: 1", lines[1]);
255 Assert.assertEquals("Flags: UNSOLICITED", lines[2]);
256 Assert.assertEquals("OpCode: DEC", lines[3]);
257 Assert.assertEquals("Client-type: -32758", lines[4]);
261 * This test is responsible for creating a COPSDecisionMsg object with error and no decisions
262 * and then is dumped to an OutputStream.
263 * @throws Exception - Test should fail if any exception is thrown
266 public void testDumpDecisionsAll() throws Exception {
267 final COPSDecisionMsg msg = new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE,
268 new COPSHandle(new COPSData()), staticDecisions, new COPSIntegrity());
270 final ByteArrayOutputStream os = new ByteArrayOutputStream();
273 final String out = new String(os.toByteArray());
274 System.out.println(out);
275 final String[] lines = out.split("\n");
276 Assert.assertEquals(24, lines.length);
278 // Only checking COPSMsg elements as the COPSObjectMsg elements have already been validated in their own tests
279 Assert.assertEquals("**MSG HEADER**", lines[0]);
280 Assert.assertEquals("Version: 1", lines[1]);
281 Assert.assertEquals("Flags: UNSOLICITED", lines[2]);
282 Assert.assertEquals("OpCode: DEC", lines[3]);
283 Assert.assertEquals("Client-type: -32758", lines[4]);
287 * This test is responsible for creating a COPSDecisionMsg error object with the minimal necessary attributes.
288 * It is then streamed over a socket (unmarshalled) then reassembled (marshalled).
289 * @throws Exception - Test should fail if any exception is thrown
292 public void testWriteErrorMin() throws Exception {
293 final COPSDecisionMsg msg = new COPSDecisionMsg(2, Flag.SOLICITED, IPCMMClient.CLIENT_TYPE,
294 new COPSHandle(new COPSData("12345")), new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.COMM_FAILURE),
297 msg.writeData(outSocket);
299 final long start = System.currentTimeMillis();
300 while (server.copsMsgs.size() < 1) {
302 if (System.currentTimeMillis() - start > 2000) break;
305 Assert.assertEquals(1, server.copsMsgs.size());
306 Assert.assertEquals(msg, server.copsMsgs.get(0));
310 * This test is responsible for creating a COPSDecisionMsg error object with all valid attributes.
311 * It is then streamed over a socket (unmarshalled) then reassembled (marshalled).
312 * @throws Exception - Test should fail if any exception is thrown
315 public void testWriteErrorWithIntegrity() throws Exception {
316 final COPSDecisionMsg msg = new COPSDecisionMsg(2, Flag.SOLICITED, IPCMMClient.CLIENT_TYPE,
317 new COPSHandle(new COPSData("12345")), new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.COMM_FAILURE),
318 new COPSIntegrity(2, 3, new COPSData("123456")));
320 msg.writeData(outSocket);
322 final long start = System.currentTimeMillis();
323 while (server.copsMsgs.size() < 1) {
325 if (System.currentTimeMillis() - start > 2000) break;
328 Assert.assertEquals(1, server.copsMsgs.size());
329 Assert.assertEquals(msg, server.copsMsgs.get(0));
333 * This test is responsible for creating a COPSDecisionMsg error object with all valid attributes.
334 * It is then streamed over a socket (unmarshalled) then reassembled (marshalled).
335 * @throws Exception - Test should fail if any exception is thrown
338 public void testWriteDecisionsWithIntegrity() throws Exception {
339 final Map<COPSContext, Set<COPSDecision>> decisions = new HashMap<>();
340 final COPSContext context1 = new COPSContext(RType.CONFIG, (short)1);
341 final Set<COPSDecision> decisions1 = new HashSet<>();
342 decisions1.add(new COPSDecision(CType.CSI, Command.INSTALL, DecisionFlag.REQERROR, new COPSData("12345")));
343 decisions1.add(new COPSDecision(CType.NAMED, Command.NULL, DecisionFlag.REQSTATE, new COPSData("123456")));
344 decisions.put(context1, decisions1);
346 final COPSContext context2 = new COPSContext(RType.IN_ADMIN, (short)2);
347 final Set<COPSDecision> decisions2 = new HashSet<>();
348 decisions2.add(new COPSDecision(CType.STATELESS, Command.REMOVE, DecisionFlag.REQERROR, new COPSData("1234567")));
349 decisions.put(context2, decisions2);
351 final COPSDecisionMsg msg = new COPSDecisionMsg(2, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE,
352 new COPSHandle(new COPSData("12345")), decisions, new COPSIntegrity(4, 5, new COPSData("123456")));
354 msg.writeData(outSocket);
356 final long start = System.currentTimeMillis();
357 while (server.copsMsgs.size() < 1) {
359 if (System.currentTimeMillis() - start > 2000) break;
362 Assert.assertEquals(1, server.copsMsgs.size());
363 Assert.assertEquals(msg, server.copsMsgs.get(0));