Removed the requirement that the COPSData member (aka. _data) cannot be null. Found...
[packetcable.git] / packetcable-driver / src / test / java / org / umu / cops / stack / COPSDecisionTest.java
1 package org.umu.cops.stack;
2
3 import org.junit.Assert;
4 import org.junit.Test;
5 import org.umu.cops.stack.COPSDecision.Command;
6 import org.umu.cops.stack.COPSDecision.DecisionFlag;
7 import org.umu.cops.stack.COPSObjHeader.CNum;
8 import org.umu.cops.stack.COPSObjHeader.CType;
9
10 import java.io.ByteArrayOutputStream;
11
12 /**
13  * Tests for the first constructor of the COPSDecision class.
14  * Should any of these tests be inaccurate it is due to the fact that they have been written after COPSAcctTimer had been
15  * released and my assumptions may be incorrect.
16  */
17 public class COPSDecisionTest {
18
19     @Test(expected = IllegalArgumentException.class)
20     public void constructor1NullCommand() {
21         new COPSDecision(null);
22     }
23
24     @Test(expected = IllegalArgumentException.class)
25     public void constructor2NullCType() {
26         new COPSDecision(null, new COPSData());
27     }
28
29     @Test(expected = IllegalArgumentException.class)
30     public void constructor2NaCType() {
31         new COPSDecision(CType.NA, new COPSData());
32     }
33
34     @Test(expected = IllegalArgumentException.class)
35     public void constructor3NullCommand() {
36         new COPSDecision(null, DecisionFlag.NA);
37     }
38
39     @Test(expected = IllegalArgumentException.class)
40     public void constructor3NullDecisionFlag() {
41         new COPSDecision(Command.INSTALL, null);
42     }
43
44     @Test(expected = IllegalArgumentException.class)
45     public void constructor4NullCType() {
46         new COPSDecision(null, Command.INSTALL, DecisionFlag.NA);
47     }
48
49     @Test(expected = IllegalArgumentException.class)
50     public void constructor4NaCType() {
51         new COPSDecision(CType.NA, Command.INSTALL, DecisionFlag.NA);
52     }
53
54     @Test(expected = IllegalArgumentException.class)
55     public void constructor4NullCommand() {
56         new COPSDecision(CType.CSI, null, DecisionFlag.NA);
57     }
58
59     @Test(expected = IllegalArgumentException.class)
60     public void constructor4NullFlags() {
61         new COPSDecision(CType.CSI, Command.INSTALL, null);
62     }
63
64     @Test(expected = IllegalArgumentException.class)
65     public void constructor5NullCType() {
66         final CType cType = null;
67         new COPSDecision(cType, Command.INSTALL, DecisionFlag.NA, new COPSData());
68     }
69
70     @Test(expected = IllegalArgumentException.class)
71     public void constructor5NaCType() {
72         new COPSDecision(CType.NA, Command.INSTALL, DecisionFlag.NA, new COPSData());
73     }
74
75     @Test(expected = IllegalArgumentException.class)
76     public void constructor5NullCommand() {
77         new COPSDecision(CType.CSI, null, DecisionFlag.NA, new COPSData());
78     }
79
80     @Test(expected = IllegalArgumentException.class)
81     public void constructor5NullFlags() {
82         new COPSDecision(CType.CSI, Command.INSTALL, null, new COPSData());
83     }
84
85     @Test(expected = IllegalArgumentException.class)
86     public void constructor6NullHeader() {
87         final COPSObjHeader hdr = null;
88         new COPSDecision(hdr, Command.INSTALL, DecisionFlag.NA, new COPSData());
89     }
90
91     @Test(expected = IllegalArgumentException.class)
92     public void constructor6InvalidCNum() {
93         new COPSDecision(new COPSObjHeader(CNum.ACCT_TIMER, CType.CSI), Command.INSTALL, DecisionFlag.NA,
94                 new COPSData());
95     }
96
97     @Test(expected = IllegalArgumentException.class)
98     public void constructor6NullCommand() {
99         new COPSDecision(new COPSObjHeader(CNum.DEC, CType.CSI), null, DecisionFlag.NA, new COPSData());
100     }
101
102     @Test(expected = IllegalArgumentException.class)
103     public void constructor6NullDecison() {
104         new COPSDecision(new COPSObjHeader(CNum.DEC, CType.CSI), Command.INSTALL, null, new COPSData());
105     }
106
107     @Test(expected = IllegalArgumentException.class)
108     public void constructor6NullData() {
109         new COPSDecision(new COPSObjHeader(CNum.CSI, CType.CSI), Command.INSTALL, DecisionFlag.NA, null);
110     }
111
112     @Test
113     public void cNumDECAndNullData() {
114         final COPSDecision decision = new COPSDecision(CType.DEF, null);
115         Assert.assertNotNull(decision.getData());
116         Assert.assertEquals(0, decision.getData().getData().length);
117     }
118
119     @Test
120     public void constructor1CommandInstall() throws Exception {
121         final COPSDecision decision = new COPSDecision(Command.INSTALL);
122         Assert.assertEquals(Command.INSTALL, decision.getCommand());
123         Assert.assertEquals(4, decision.getDataLength());
124         Assert.assertEquals(new COPSData(), decision.getData());
125         Assert.assertEquals(DecisionFlag.NA, decision.getFlag());
126         Assert.assertEquals("Default", decision.getTypeStr());
127
128         final ByteArrayOutputStream os = new ByteArrayOutputStream();
129         decision.dump(os);
130
131         final String out = new String(os.toByteArray());
132         System.out.println(out);
133         final String[] lines = out.split("\n");
134         Assert.assertEquals(6, lines.length);
135         Assert.assertEquals("**Decision**", lines[0]);
136         Assert.assertEquals("C-num: DEC", lines[1]);
137         Assert.assertEquals("C-type: DEF", lines[2]);
138         Assert.assertEquals("Decision (Default)", lines[3]);
139         Assert.assertEquals("Command code: INSTALL", lines[4]);
140         Assert.assertEquals("Command flags: NA", lines[5]);
141     }
142
143     @Test
144     public void constructor1CommandRemove() throws Exception {
145         final COPSDecision decision = new COPSDecision(Command.REMOVE);
146         Assert.assertEquals(Command.REMOVE, decision.getCommand());
147         Assert.assertEquals(4, decision.getDataLength());
148         Assert.assertEquals(new COPSData(), decision.getData());
149         Assert.assertEquals(DecisionFlag.NA, decision.getFlag());
150         Assert.assertEquals("Default", decision.getTypeStr());
151
152         final ByteArrayOutputStream os = new ByteArrayOutputStream();
153         decision.dump(os);
154
155         final String out = new String(os.toByteArray());
156         System.out.println(out);
157         final String[] lines = out.split("\n");
158         Assert.assertEquals(6, lines.length);
159         Assert.assertEquals("**Decision**", lines[0]);
160         Assert.assertEquals("C-num: DEC", lines[1]);
161         Assert.assertEquals("C-type: DEF", lines[2]);
162         Assert.assertEquals("Decision (Default)", lines[3]);
163         Assert.assertEquals("Command code: REMOVE", lines[4]);
164         Assert.assertEquals("Command flags: NA", lines[5]);
165     }
166
167     @Test
168     public void constructor2ValidCTypeEmptyData() throws Exception {
169         final COPSDecision decision = new COPSDecision(CType.DEF, new COPSData());
170         Assert.assertEquals(Command.NULL, decision.getCommand());
171         Assert.assertEquals(4, decision.getDataLength());
172         Assert.assertEquals(new COPSData(), decision.getData());
173         Assert.assertEquals(DecisionFlag.NA, decision.getFlag());
174         Assert.assertEquals("Default", decision.getTypeStr());
175
176         final ByteArrayOutputStream os = new ByteArrayOutputStream();
177         decision.dump(os);
178
179         final String out = new String(os.toByteArray());
180         System.out.println(out);
181         final String[] lines = out.split("\n");
182         Assert.assertEquals(6, lines.length);
183         Assert.assertEquals("**Decision**", lines[0]);
184         Assert.assertEquals("C-num: DEC", lines[1]);
185         Assert.assertEquals("C-type: DEF", lines[2]);
186         Assert.assertEquals("Decision (Default)", lines[3]);
187         Assert.assertEquals("Command code: NULL", lines[4]);
188         Assert.assertEquals("Command flags: NA", lines[5]);
189     }
190
191     @Test
192     public void constructor2ValidCTypeDefUnpaddedData() throws Exception {
193         final COPSDecision decision = new COPSDecision(CType.DEF, new COPSData("1234"));
194         Assert.assertEquals(Command.NULL, decision.getCommand());
195         Assert.assertEquals(8, decision.getDataLength());
196         Assert.assertEquals(new COPSData("1234"), decision.getData());
197         Assert.assertEquals(DecisionFlag.NA, decision.getFlag());
198         Assert.assertEquals("Default", decision.getTypeStr());
199
200         final ByteArrayOutputStream os = new ByteArrayOutputStream();
201         decision.dump(os);
202
203         final String out = new String(os.toByteArray());
204         System.out.println(out);
205         final String[] lines = out.split("\n");
206         Assert.assertEquals(6, lines.length);
207         Assert.assertEquals("**Decision**", lines[0]);
208         Assert.assertEquals("C-num: DEC", lines[1]);
209         Assert.assertEquals("C-type: DEF", lines[2]);
210         Assert.assertEquals("Decision (Default)", lines[3]);
211         Assert.assertEquals("Command code: NULL", lines[4]);
212         Assert.assertEquals("Command flags: NA", lines[5]);
213     }
214
215     @Test
216     public void constructor2ValidCTypeDefPaddedData() throws Exception {
217         final COPSDecision decision = new COPSDecision(CType.DEF, new COPSData("12345"));
218         Assert.assertEquals(Command.NULL, decision.getCommand());
219         Assert.assertEquals(12, decision.getDataLength());
220         Assert.assertEquals(new COPSData("12345"), decision.getData());
221         Assert.assertEquals(DecisionFlag.NA, decision.getFlag());
222         Assert.assertEquals("Default", decision.getTypeStr());
223
224         final ByteArrayOutputStream os = new ByteArrayOutputStream();
225         decision.dump(os);
226
227         final String out = new String(os.toByteArray());
228         System.out.println(out);
229         final String[] lines = out.split("\n");
230         Assert.assertEquals(6, lines.length);
231         Assert.assertEquals("**Decision**", lines[0]);
232         Assert.assertEquals("C-num: DEC", lines[1]);
233         Assert.assertEquals("C-type: DEF", lines[2]);
234         Assert.assertEquals("Decision (Default)", lines[3]);
235         Assert.assertEquals("Command code: NULL", lines[4]);
236         Assert.assertEquals("Command flags: NA", lines[5]);
237     }
238
239     @Test
240     public void constructor2ValidCTypeNamedPaddedData() throws Exception {
241         final COPSDecision decision = new COPSDecision(CType.NAMED, new COPSData("12345"));
242         Assert.assertEquals(Command.NULL, decision.getCommand());
243         Assert.assertEquals(12, decision.getDataLength());
244         Assert.assertEquals(new COPSData("12345"), decision.getData());
245         Assert.assertEquals(DecisionFlag.NA, decision.getFlag());
246         Assert.assertEquals("Named decision data", decision.getTypeStr());
247
248         final ByteArrayOutputStream os = new ByteArrayOutputStream();
249         decision.dump(os);
250
251         final String out = new String(os.toByteArray());
252         System.out.println(out);
253         final String[] lines = out.split("\n");
254         Assert.assertEquals(5, lines.length);
255         Assert.assertEquals("**Decision**", lines[0]);
256         Assert.assertEquals("C-num: DEC", lines[1]);
257         Assert.assertEquals("C-type: NAMED", lines[2]);
258         Assert.assertEquals("Decision (Named decision data)", lines[3]);
259         Assert.assertEquals("Data: 12345", lines[4]);
260     }
261
262     @Test
263     public void constructor3Valid() throws Exception {
264         final COPSDecision decision = new COPSDecision(Command.INSTALL, DecisionFlag.REQERROR);
265         Assert.assertEquals(Command.INSTALL, decision.getCommand());
266         Assert.assertEquals(4, decision.getDataLength());
267         Assert.assertEquals(new COPSData(), decision.getData());
268         Assert.assertEquals(DecisionFlag.REQERROR, decision.getFlag());
269         Assert.assertEquals("Default", decision.getTypeStr());
270
271         final ByteArrayOutputStream os = new ByteArrayOutputStream();
272         decision.dump(os);
273
274         final String out = new String(os.toByteArray());
275         System.out.println(out);
276         final String[] lines = out.split("\n");
277         Assert.assertEquals(6, lines.length);
278         Assert.assertEquals("**Decision**", lines[0]);
279         Assert.assertEquals("C-num: DEC", lines[1]);
280         Assert.assertEquals("C-type: DEF", lines[2]);
281         Assert.assertEquals("Decision (Default)", lines[3]);
282         Assert.assertEquals("Command code: INSTALL", lines[4]);
283         Assert.assertEquals("Command flags: REQERROR", lines[5]);
284     }
285
286     @Test
287     public void constructor4Valid() throws Exception {
288         final COPSDecision decision = new COPSDecision(CType.NAMED, Command.REMOVE, DecisionFlag.REQSTATE);
289         Assert.assertEquals(Command.REMOVE, decision.getCommand());
290         Assert.assertEquals(4, decision.getDataLength());
291         Assert.assertEquals(new COPSData(), decision.getData());
292         Assert.assertEquals(DecisionFlag.REQSTATE, decision.getFlag());
293         Assert.assertEquals("Named decision data", decision.getTypeStr());
294
295         final ByteArrayOutputStream os = new ByteArrayOutputStream();
296         decision.dump(os);
297
298         final String out = new String(os.toByteArray());
299         System.out.println(out);
300         final String[] lines = out.split("\n");
301         Assert.assertEquals(5, lines.length);
302         Assert.assertEquals("**Decision**", lines[0]);
303         Assert.assertEquals("C-num: DEC", lines[1]);
304         Assert.assertEquals("C-type: NAMED", lines[2]);
305         Assert.assertEquals("Decision (Named decision data)", lines[3]);
306         Assert.assertEquals("Data: ", lines[4]);
307     }
308
309     @Test
310     public void constructor5Valid() throws Exception {
311         final COPSDecision decision = new COPSDecision(CType.CSI, Command.REMOVE, DecisionFlag.REQSTATE,
312                 new COPSData("1234"));
313         Assert.assertEquals(Command.REMOVE, decision.getCommand());
314         Assert.assertEquals(8, decision.getDataLength());
315         Assert.assertEquals(new COPSData("1234"), decision.getData());
316         Assert.assertEquals(DecisionFlag.REQSTATE, decision.getFlag());
317         Assert.assertEquals("Client specific decision data", decision.getTypeStr());
318
319         final ByteArrayOutputStream os = new ByteArrayOutputStream();
320         decision.dump(os);
321
322         final String out = new String(os.toByteArray());
323         System.out.println(out);
324         final String[] lines = out.split("\n");
325         Assert.assertEquals(5, lines.length);
326         Assert.assertEquals("**Decision**", lines[0]);
327         Assert.assertEquals("C-num: DEC", lines[1]);
328         Assert.assertEquals("C-type: CSI", lines[2]);
329         Assert.assertEquals("Decision (Client specific decision data)", lines[3]);
330         Assert.assertEquals("Data: 1234", lines[4]);
331     }
332
333     @Test
334     public void constructor6Valid() throws Exception {
335         final COPSDecision decision = new COPSDecision(new COPSObjHeader(CNum.DEC, CType.STATELESS), Command.INSTALL,
336                 DecisionFlag.REQERROR, new COPSData("1234"));
337         Assert.assertEquals(Command.INSTALL, decision.getCommand());
338         Assert.assertEquals(8, decision.getDataLength());
339         Assert.assertEquals(new COPSData("1234"), decision.getData());
340         Assert.assertEquals(DecisionFlag.REQERROR, decision.getFlag());
341         Assert.assertEquals("Stateless data", decision.getTypeStr());
342
343         final ByteArrayOutputStream os = new ByteArrayOutputStream();
344         decision.dump(os);
345
346         final String out = new String(os.toByteArray());
347         System.out.println(out);
348         final String[] lines = out.split("\n");
349         Assert.assertEquals(5, lines.length);
350         Assert.assertEquals("**Decision**", lines[0]);
351         Assert.assertEquals("C-num: DEC", lines[1]);
352         Assert.assertEquals("C-type: STATELESS", lines[2]);
353         Assert.assertEquals("Decision (Stateless data)", lines[3]);
354         Assert.assertEquals("Data: 1234", lines[4]);
355     }
356
357     // The writeData() method will be tested implicitly via any of the COPSMsg tests
358 }