Refactor classes designed to hold data to be more immutable, and reducing the probabi...
[packetcable.git] / packetcable-driver / src / test / java / org / umu / cops / stack / COPSDataSecondConstructorTest.java
1 package org.umu.cops.stack;
2
3 import org.junit.Assert;
4 import org.junit.Test;
5
6 import java.util.Arrays;
7
8 /**
9  * Tests for the second constructor of the COPSData class.
10  * Should any of these tests be inaccurate it is due to the fact that they have been written after COPSHandle had been
11  * released and my assumptions may be incorrect.
12  */
13 public class COPSDataSecondConstructorTest {
14
15     final byte[] bytes = ("hello world").getBytes();
16
17     @Test(expected = IllegalArgumentException.class)
18     public void nullBytes() {
19         new COPSData(null, 0, 0);
20     }
21
22     @Test(expected = IllegalArgumentException.class)
23     public void emptyBytesWithNegOffsetZeroLength() {
24         new COPSData(new byte[]{}, -1, 0);
25     }
26
27     @Test
28     public void emptyBytesWithZeroOffsetZeroLength() {
29         final COPSData data = new COPSData(new byte[]{}, 0, 0);
30         Assert.assertEquals(0, data.length());
31         Assert.assertEquals(0, data.getData().length);
32         Assert.assertEquals("", data.str());
33
34         final COPSData eqHash = new COPSData(bytes, 1, 0);
35         final COPSData neHash = new COPSData(bytes, 2, 2);
36
37         Assert.assertTrue(data.equals(eqHash));
38         Assert.assertEquals(data.hashCode(), eqHash.hashCode());
39         Assert.assertFalse(data.equals(neHash));
40         Assert.assertNotEquals(data.hashCode(), neHash.hashCode());
41     }
42
43     @Test(expected = IllegalArgumentException.class)
44     public void emptyBytesWithPosOffsetZeroLength() {
45         new COPSData(new byte[]{}, 1, 0);
46     }
47
48     @Test(expected = IllegalArgumentException.class)
49     public void validBytesWithNegOffsetZeroLength() {
50         new COPSData(bytes, -1, 0);
51     }
52
53     @Test
54     public void validBytesWithZeroOffsetZeroLength() {
55         final COPSData data = new COPSData(bytes, 0, 0);
56         Assert.assertEquals(0, data.length());
57         Assert.assertEquals(0, data.getData().length);
58         Assert.assertEquals("", data.str());
59
60         final COPSData eqHash = new COPSData(bytes, 1, 0);
61         final COPSData neHash = new COPSData(bytes, 2, 2);
62
63         Assert.assertTrue(data.equals(eqHash));
64         Assert.assertEquals(data.hashCode(), eqHash.hashCode());
65         Assert.assertFalse(data.equals(neHash));
66         Assert.assertNotEquals(data.hashCode(), neHash.hashCode());
67     }
68
69     @Test(expected = IllegalArgumentException.class)
70     public void validBytesWithPosOffsetNegLength() {
71         new COPSData(bytes, 1, -1);
72     }
73
74     @Test
75     public void validBytesWithPosOffsetZeroLength() {
76         final COPSData data = new COPSData(bytes, 1, 0);
77         Assert.assertEquals(0, data.length());
78         Assert.assertEquals(0, data.getData().length);
79         Assert.assertEquals("", data.str());
80
81         final COPSData eqHash = new COPSData(bytes, 1, 0);
82         final COPSData neHash = new COPSData(bytes, 2, 2);
83
84         Assert.assertTrue(data.equals(eqHash));
85         Assert.assertEquals(data.hashCode(), eqHash.hashCode());
86         Assert.assertFalse(data.equals(neHash));
87         Assert.assertNotEquals(data.hashCode(), neHash.hashCode());
88     }
89
90     @Test
91     public void validBytesWithPosOffsetPosLength() {
92         final COPSData data = new COPSData(bytes, 1, 1);
93         Assert.assertEquals(1, data.length());
94         Assert.assertEquals(1, data.getData().length);
95         Assert.assertEquals(bytes[1], data.getData()[0]);
96         Assert.assertEquals("e", data.str());
97
98         final COPSData eqHash = new COPSData(bytes, 1, 1);
99         final COPSData neHash = new COPSData(bytes, 2, 2);
100
101         Assert.assertTrue(data.equals(eqHash));
102         Assert.assertEquals(data.hashCode(), eqHash.hashCode());
103         Assert.assertFalse(data.equals(neHash));
104         Assert.assertNotEquals(data.hashCode(), neHash.hashCode());
105     }
106
107     @Test(expected = IllegalArgumentException.class)
108     public void validBytesWithPosOffsetLengthTooLarge() {
109         new COPSData(bytes, 5, 8);
110     }
111
112     @Test
113     public void likelyScenario() {
114         final String expectedData = "lo wo";
115
116         final COPSData data = new COPSData(bytes, 3, 5);
117         Assert.assertTrue(Arrays.equals(expectedData.getBytes(), data.getData()));
118         Assert.assertEquals(expectedData.length(), data.length());
119         Assert.assertEquals(expectedData, data.str());
120
121         final COPSData eqHash = new COPSData(bytes, 3, 5);
122         final COPSData neHash = new COPSData(bytes, 2, 4);
123
124         Assert.assertTrue(data.equals(eqHash));
125         Assert.assertEquals(data.hashCode(), eqHash.hashCode());
126         Assert.assertFalse(data.equals(neHash));
127         Assert.assertNotEquals(data.hashCode(), neHash.hashCode());
128     }
129 }