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.COPSClientSI.CSIType;
9 import org.umu.cops.stack.COPSContext.RType;
10 import org.umu.cops.stack.COPSDecision.Command;
11 import org.umu.cops.stack.COPSDecision.DecisionFlag;
12 import org.umu.cops.stack.COPSError.ErrorTypes;
13 import org.umu.cops.stack.COPSHeader.Flag;
14 import org.umu.cops.stack.COPSHeader.OPCode;
15 import org.umu.cops.stack.COPSObjHeader.CType;
17 import java.io.ByteArrayOutputStream;
18 import java.net.InetAddress;
19 import java.net.Socket;
20 import java.util.HashMap;
21 import java.util.HashSet;
26 * Tests for the first constructor of the COPSDecisionMsg class.
27 * Should any of these tests be inaccurate it is due to the fact that they have been written after COPSDecisionMsg had been
28 * released and my assumptions may be incorrect.
30 public class COPSDecisionMsgTest {
32 TestCOPSServer server;
35 final static Map<COPSContext, Set<COPSDecision>> staticDecisions = new HashMap<>();
37 final Set<COPSDecision> decisions1 = new HashSet<>();
38 decisions1.add(new COPSDecision(CType.CSI, Command.INSTALL, DecisionFlag.REQERROR, new COPSData("12345")));
39 staticDecisions.put(new COPSContext(RType.CONFIG, (short)1), decisions1);
43 public void setup() throws Exception {
44 server = new TestCOPSServer();
46 outSocket = new Socket(InetAddress.getLocalHost(), server.getPort());
50 public void tearDown() throws Exception {
55 @Test(expected = IllegalArgumentException.class)
56 public void version0WithError() {
57 new COPSDecisionMsg(0, Flag.SOLICITED, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()),
58 new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA), null, null);
61 @Test(expected = IllegalArgumentException.class)
62 public void version0WithDecisions() {
63 new COPSDecisionMsg(0, Flag.SOLICITED, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()),
64 staticDecisions, null, null);
67 @Test(expected = IllegalArgumentException.class)
68 public void nullFlagWithError() {
69 new COPSDecisionMsg(1, null, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()),
70 new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA), null, null);
73 @Test(expected = IllegalArgumentException.class)
74 public void nullFlagWithDecisions() {
75 new COPSDecisionMsg(1, null, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()),
76 staticDecisions, null, null);
79 @Test(expected = IllegalArgumentException.class)
80 public void nullHandleDeprecatedWithError() {
81 new COPSDecisionMsg(IPCMMClient.CLIENT_TYPE, null,
82 new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA), null, null);
85 @Test(expected = IllegalArgumentException.class)
86 public void nullHandleDeprecatedWithDecisions() {
87 new COPSDecisionMsg(IPCMMClient.CLIENT_TYPE, null, staticDecisions, null, null);
90 @Test(expected = IllegalArgumentException.class)
91 public void nullHandleWithError() {
92 new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE, null,
93 new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA), null, null);
96 @Test(expected = IllegalArgumentException.class)
97 public void nullHandleWithDecisions() {
98 new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE, null, staticDecisions, null, null);
101 @Test(expected = IllegalArgumentException.class)
102 public void nullErrorDeprecated() {
103 final COPSError error = null;
104 new COPSDecisionMsg(IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), error, null, null);
107 @Test(expected = IllegalArgumentException.class)
108 public void nullError() {
109 final COPSError error = null;
110 new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), error,
114 @Test(expected = IllegalArgumentException.class)
115 public void nullDecisionsDeprecated() {
116 final Map<COPSContext, Set<COPSDecision>> decisions = null;
117 new COPSDecisionMsg(IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), decisions, null, null);
120 @Test(expected = IllegalArgumentException.class)
121 public void nullDecisions() {
122 final Map<COPSContext, Set<COPSDecision>> decisions = null;
123 new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), decisions,
127 @Test(expected = IllegalArgumentException.class)
128 public void emptyDecisionsMapDeprecated() {
129 final Map<COPSContext, Set<COPSDecision>> decisions = new HashMap<>();
130 new COPSDecisionMsg(IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), decisions, null, null);
133 @Test(expected = IllegalArgumentException.class)
134 public void emptyDecisionsMap() {
135 final Map<COPSContext, Set<COPSDecision>> decisions = new HashMap<>();
136 new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), decisions,
140 @Test(expected = IllegalArgumentException.class)
141 public void nullDecisionsSetDeprecated() {
142 final Map<COPSContext, Set<COPSDecision>> decisions = new HashMap<>();
143 decisions.put(new COPSContext(RType.CONFIG, (short)1), null);
144 new COPSDecisionMsg(IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), decisions, null, null);
147 @Test(expected = IllegalArgumentException.class)
148 public void nullDecisionsSet() {
149 final Map<COPSContext, Set<COPSDecision>> decisions = new HashMap<>();
150 decisions.put(new COPSContext(RType.CONFIG, (short)1), null);
151 new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), decisions,
155 @Test(expected = IllegalArgumentException.class)
156 public void emptyDecisionsSetDeprecated() {
157 final Map<COPSContext, Set<COPSDecision>> decisions = new HashMap<>();
158 decisions.put(new COPSContext(RType.CONFIG, (short)1), new HashSet<COPSDecision>());
159 new COPSDecisionMsg(IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), decisions, null, null);
162 @Test(expected = IllegalArgumentException.class)
163 public void emptyDecisionsSet() {
164 final Map<COPSContext, Set<COPSDecision>> decisions = new HashMap<>();
165 decisions.put(new COPSContext(RType.CONFIG, (short)1), new HashSet<COPSDecision>());
166 new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE, new COPSHandle(new COPSData()), decisions,
170 @Test(expected = IllegalArgumentException.class)
171 public void nullHeaderErrorOnly() {
172 final COPSHeader hdr = null;
173 new COPSDecisionMsg(hdr, new COPSHandle(new COPSData()), new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA),
177 @Test(expected = IllegalArgumentException.class)
178 public void nullHeaderDecisionsOnly() {
179 final COPSHeader hdr = null;
180 new COPSDecisionMsg(hdr, new COPSHandle(new COPSData()), null, staticDecisions, null, null);
183 @Test(expected = IllegalArgumentException.class)
184 public void invalidHdrErrorOnly() {
185 final COPSHeader hdr = new COPSHeader(1, Flag.UNSOLICITED, OPCode.CC, IPCMMClient.CLIENT_TYPE);
186 new COPSDecisionMsg(hdr, new COPSHandle(new COPSData()), new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA),
190 @Test(expected = IllegalArgumentException.class)
191 public void invalidHdrDecisionsOnly() {
192 final COPSHeader hdr = new COPSHeader(1, Flag.UNSOLICITED, OPCode.CC, IPCMMClient.CLIENT_TYPE);
193 new COPSDecisionMsg(hdr, new COPSHandle(new COPSData()), null, staticDecisions, null, null);
196 @Test(expected = IllegalArgumentException.class)
197 public void withErrorAndDecisions() {
198 final COPSHeader hdr = new COPSHeader(1, Flag.UNSOLICITED, OPCode.DEC, IPCMMClient.CLIENT_TYPE);
199 new COPSDecisionMsg(hdr, new COPSHandle(new COPSData()), new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA),
200 staticDecisions, null, null);
203 @Test(expected = IllegalArgumentException.class)
204 public void nullErrorAndDecisions() {
205 final COPSHeader hdr = new COPSHeader(1, Flag.UNSOLICITED, OPCode.DEC, IPCMMClient.CLIENT_TYPE);
206 new COPSDecisionMsg(hdr, new COPSHandle(new COPSData()), null, null, null, null);
210 public void validProtectedError() {
211 final COPSHeader hdr = new COPSHeader(1, Flag.UNSOLICITED, OPCode.DEC, IPCMMClient.CLIENT_TYPE);
212 final COPSDecisionMsg msg = new COPSDecisionMsg(hdr, new COPSHandle(new COPSData()),
213 new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA), null, null, null);
214 Assert.assertEquals(OPCode.DEC, msg.getHeader().getOpCode());
215 Assert.assertEquals(IPCMMClient.CLIENT_TYPE, msg.getHeader().getClientType());
216 Assert.assertEquals(hdr, msg.getHeader());
217 Assert.assertEquals(new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA), msg.getError());
218 Assert.assertNotNull(msg.getDecisions());
219 Assert.assertTrue(msg.getDecisions().isEmpty());
220 Assert.assertNull(msg.getIntegrity());
224 public void validProtectedDecisions() {
225 final COPSHeader hdr = new COPSHeader(1, Flag.UNSOLICITED, OPCode.DEC, IPCMMClient.CLIENT_TYPE);
226 final COPSDecisionMsg msg = new COPSDecisionMsg(hdr, new COPSHandle(new COPSData()),
227 null, staticDecisions, null, null);
228 Assert.assertEquals(OPCode.DEC, msg.getHeader().getOpCode());
229 Assert.assertEquals(IPCMMClient.CLIENT_TYPE, msg.getHeader().getClientType());
230 Assert.assertEquals(hdr, msg.getHeader());
231 Assert.assertNull(msg.getError());
232 Assert.assertNotNull(msg.getDecisions());
233 Assert.assertFalse(msg.getDecisions().isEmpty());
234 Assert.assertNotSame(staticDecisions, msg.getDecisions());
235 Assert.assertEquals(staticDecisions, msg.getDecisions());
236 Assert.assertNull(msg.getIntegrity());
240 * This test is responsible for creating a COPSDecisionMsg object with error and no decisions
241 * and then is dumped to an OutputStream.
242 * @throws Exception - Test should fail if any exception is thrown
245 public void testDumpErrorAll() throws Exception {
246 final COPSDecisionMsg msg = new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE,
247 new COPSHandle(new COPSData()), new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.NA),
248 new COPSIntegrity(), new COPSClientSI(CSIType.NAMED, new COPSData()));
250 final ByteArrayOutputStream os = new ByteArrayOutputStream();
253 final String out = new String(os.toByteArray());
254 System.out.println(out);
255 final String[] lines = out.split("\n");
256 Assert.assertEquals(25, lines.length);
258 // Only checking COPSMsg elements as the COPSObjectMsg elements have already been validated in their own tests
259 Assert.assertEquals("**MSG HEADER**", lines[0]);
260 Assert.assertEquals("Version: 1", lines[1]);
261 Assert.assertEquals("Flags: UNSOLICITED", lines[2]);
262 Assert.assertEquals("OpCode: DEC", lines[3]);
263 Assert.assertEquals("Client-type: -32758", lines[4]);
267 * This test is responsible for creating a COPSDecisionMsg object with error and no decisions
268 * and then is dumped to an OutputStream.
269 * @throws Exception - Test should fail if any exception is thrown
272 public void testDumpDecisionsAll() throws Exception {
273 final COPSDecisionMsg msg = new COPSDecisionMsg(1, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE,
274 new COPSHandle(new COPSData()), staticDecisions, new COPSIntegrity(),
275 new COPSClientSI(CSIType.NAMED, new COPSData()));
277 final ByteArrayOutputStream os = new ByteArrayOutputStream();
280 final String out = new String(os.toByteArray());
281 System.out.println(out);
282 final String[] lines = out.split("\n");
283 Assert.assertEquals(29, lines.length);
285 // Only checking COPSMsg elements as the COPSObjectMsg elements have already been validated in their own tests
286 Assert.assertEquals("**MSG HEADER**", lines[0]);
287 Assert.assertEquals("Version: 1", lines[1]);
288 Assert.assertEquals("Flags: UNSOLICITED", lines[2]);
289 Assert.assertEquals("OpCode: DEC", lines[3]);
290 Assert.assertEquals("Client-type: -32758", lines[4]);
294 * This test is responsible for creating a COPSDecisionMsg error object with the minimal necessary attributes.
295 * It is then streamed over a socket (unmarshalled) then reassembled (marshalled).
296 * @throws Exception - Test should fail if any exception is thrown
299 public void testWriteErrorMin() throws Exception {
300 final COPSDecisionMsg msg = new COPSDecisionMsg(2, Flag.SOLICITED, IPCMMClient.CLIENT_TYPE,
301 new COPSHandle(new COPSData("12345")), new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.COMM_FAILURE),
304 msg.writeData(outSocket);
306 final long start = System.currentTimeMillis();
307 while (server.copsMsgs.size() < 1) {
309 if (System.currentTimeMillis() - start > 2000) break;
312 Assert.assertEquals(1, server.copsMsgs.size());
313 Assert.assertEquals(msg, server.copsMsgs.get(0));
317 * This test is responsible for creating a COPSDecisionMsg error object with all valid attributes.
318 * It is then streamed over a socket (unmarshalled) then reassembled (marshalled).
319 * @throws Exception - Test should fail if any exception is thrown
322 public void testWriteErrorWithIntegrity() throws Exception {
323 final COPSDecisionMsg msg = new COPSDecisionMsg(2, Flag.SOLICITED, IPCMMClient.CLIENT_TYPE,
324 new COPSHandle(new COPSData("12345")), new COPSError(ErrorTypes.AUTH_FAILURE, ErrorTypes.COMM_FAILURE),
325 new COPSIntegrity(2, 3, new COPSData("123456")), new COPSClientSI(CSIType.NAMED, new COPSData("123")));
327 msg.writeData(outSocket);
329 final long start = System.currentTimeMillis();
330 while (server.copsMsgs.size() < 1) {
332 if (System.currentTimeMillis() - start > 2000) break;
335 Assert.assertEquals(1, server.copsMsgs.size());
336 Assert.assertEquals(msg, server.copsMsgs.get(0));
340 * This test is responsible for creating a COPSDecisionMsg error object with all valid attributes.
341 * It is then streamed over a socket (unmarshalled) then reassembled (marshalled).
342 * @throws Exception - Test should fail if any exception is thrown
345 public void testWriteDecisionsWithIntegrity() throws Exception {
346 final Map<COPSContext, Set<COPSDecision>> decisions = new HashMap<>();
347 final COPSContext context1 = new COPSContext(RType.CONFIG, (short)1);
348 final Set<COPSDecision> decisions1 = new HashSet<>();
349 decisions1.add(new COPSDecision(CType.CSI, Command.INSTALL, DecisionFlag.REQERROR, new COPSData("12345")));
350 decisions1.add(new COPSDecision(CType.NAMED, Command.NULL, DecisionFlag.REQSTATE, new COPSData("123456")));
351 decisions.put(context1, decisions1);
353 final COPSContext context2 = new COPSContext(RType.IN_ADMIN, (short)2);
354 final Set<COPSDecision> decisions2 = new HashSet<>();
355 decisions2.add(new COPSDecision(CType.STATELESS, Command.REMOVE, DecisionFlag.REQERROR, new COPSData("1234567")));
356 decisions.put(context2, decisions2);
358 final COPSDecisionMsg msg = new COPSDecisionMsg(2, Flag.UNSOLICITED, IPCMMClient.CLIENT_TYPE,
359 new COPSHandle(new COPSData("12345")), decisions, new COPSIntegrity(4, 5, new COPSData("123456")),
360 new COPSClientSI(CSIType.NAMED, new COPSData("123")));
362 msg.writeData(outSocket);
364 final long start = System.currentTimeMillis();
365 while (server.copsMsgs.size() < 1) {
367 if (System.currentTimeMillis() - start > 2000) break;
370 Assert.assertEquals(1, server.copsMsgs.size());
371 Assert.assertEquals(msg, server.copsMsgs.get(0));