1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.net;
19
20 import org.apache.commons.net.util.SubnetUtils;
21 import org.apache.commons.net.util.SubnetUtils.SubnetInfo;
22
23 import junit.framework.TestCase;
24
25 public class SubnetUtilsTest extends TestCase {
26
27 public void testParseSimpleNetmask() {
28 final String address = "192.168.0.1";
29 final String masks[] = new String[] { "255.0.0.0", "255.255.0.0", "255.255.255.0", "255.255.255.248"};
30 final String bcastAddresses[] = new String[] { "192.255.255.255", "192.168.255.255", "192.168.0.255", "192.168.0.7"};
31 final String lowAddresses[] = new String[] { "192.0.0.1", "192.168.0.1", "192.168.0.1", "192.168.0.1" };
32 final String highAddresses[] = new String[] { "192.255.255.254", "192.168.255.254", "192.168.0.254", "192.168.0.6" };
33 final String networkAddresses[] = new String[] { "192.0.0.0", "192.168.0.0", "192.168.0.0", "192.168.0.0" };
34 final String cidrSignatures[] = new String[] { "192.168.0.1/8", "192.168.0.1/16", "192.168.0.1/24", "192.168.0.1/29" };
35 final int usableAddresses[] = new int[] { 16777214, 65534, 254, 6 };
36
37 for (int i = 0; i < masks.length; ++i) {
38 SubnetUtils utils = new SubnetUtils(address, masks[i]);
39 SubnetInfo info = utils.getInfo();
40 assertEquals(bcastAddresses[i], info.getBroadcastAddress());
41 assertEquals(cidrSignatures[i], info.getCidrSignature());
42 assertEquals(lowAddresses[i], info.getLowAddress());
43 assertEquals(highAddresses[i], info.getHighAddress());
44 assertEquals(networkAddresses[i], info.getNetworkAddress());
45 assertEquals(usableAddresses[i], info.getAddressCount());
46 }
47 }
48
49 public void testParseSimpleNetmaskInclusive() {
50 String address = "192.168.15.7";
51 String masks[]=new String[]{ "255.255.255.252", "255.255.255.254", "255.255.255.255"};
52 String bcast[]=new String[]{ "192.168.15.7", "192.168.15.7", "192.168.15.7"};
53 String netwk[]=new String[]{ "192.168.15.4", "192.168.15.6", "192.168.15.7" };
54 String lowAd[]=new String[]{ "192.168.15.4", "192.168.15.6", "192.168.15.7" };
55 String highA[]=new String[]{ "192.168.15.7", "192.168.15.7", "192.168.15.7" };
56 String cidrS[]=new String[]{ "192.168.15.7/30", "192.168.15.7/31", "192.168.15.7/32"};
57 int usableAd[]=new int[] { 4 , 2, 1};
58
59 for (int i = 0; i < masks.length; ++i) {
60 SubnetUtils utils = new SubnetUtils(address, masks[i]);
61 utils.setInclusiveHostCount(true);
62 SubnetInfo info = utils.getInfo();
63 assertEquals("ci "+masks[i], cidrS[i], info.getCidrSignature());
64 assertEquals("bc "+masks[i], bcast[i], info.getBroadcastAddress());
65 assertEquals("ac "+masks[i], usableAd[i], info.getAddressCount());
66 assertEquals("nw "+masks[i], netwk[i], info.getNetworkAddress());
67 assertEquals("lo "+masks[i], lowAd[i], info.getLowAddress());
68 assertEquals("hi "+masks[i], highA[i], info.getHighAddress());
69 }
70 }
71
72 public void testParseSimpleNetmaskExclusive() {
73 String address = "192.168.15.7";
74 String masks[]=new String[]{ "255.255.255.252", "255.255.255.254", "255.255.255.255"};
75 String bcast[]=new String[]{ "192.168.15.7", "192.168.15.7", "192.168.15.7"};
76 String netwk[]=new String[]{ "192.168.15.4", "192.168.15.6", "192.168.15.7" };
77 String lowAd[]=new String[]{ "192.168.15.5", "0.0.0.0", "0.0.0.0" };
78 String highA[]=new String[]{ "192.168.15.6", "0.0.0.0", "0.0.0.0" };
79 String cidrS[]=new String[]{ "192.168.15.7/30", "192.168.15.7/31", "192.168.15.7/32"};
80 int usableAd[]=new int[] { 2 , 0, 0};
81
82
83 for (int i = 0; i < masks.length; ++i) {
84 SubnetUtils utils = new SubnetUtils(address, masks[i]);
85 utils.setInclusiveHostCount(false);
86 SubnetInfo info = utils.getInfo();
87 assertEquals("ci "+masks[i], cidrS[i], info.getCidrSignature());
88 assertEquals("bc "+masks[i], bcast[i], info.getBroadcastAddress());
89 assertEquals("nw "+masks[i], netwk[i], info.getNetworkAddress());
90 assertEquals("ac "+masks[i], usableAd[i], info.getAddressCount());
91 assertEquals("lo "+masks[i], lowAd[i], info.getLowAddress());
92 assertEquals("hi "+masks[i], highA[i], info.getHighAddress());
93 }
94 }
95
96
97 public void testAddresses() {
98 SubnetUtils utils = new SubnetUtils("192.168.0.1/29");
99 SubnetInfo info = utils.getInfo();
100 assertTrue(info.isInRange("192.168.0.1"));
101
102 assertFalse(info.isInRange("192.168.0.7"));
103 assertFalse(info.isInRange("192.168.0.8"));
104 assertFalse(info.isInRange("10.10.2.1"));
105 assertFalse(info.isInRange("192.168.1.1"));
106 assertFalse(info.isInRange("192.168.0.255"));
107 }
108
109 public void testZeroNetmaskBits() {
110 try {
111 new SubnetUtils("192.168.0.1/0");
112 fail("Mask /0 should have generated an IllegalArgumentException");
113 }
114 catch (IllegalArgumentException expected) {
115 }
116 }
117
118
119
120
121
122 public void testCidrAddresses() {
123 SubnetUtils utils = new SubnetUtils("192.168.0.1/8");
124 utils.setInclusiveHostCount(true);
125 SubnetInfo info = utils.getInfo();
126 assertEquals("255.0.0.0",info.getNetmask());
127 assertEquals(16777216, info.getAddressCount());
128
129 utils = new SubnetUtils("192.168.0.1/9");
130 utils.setInclusiveHostCount(true);
131 info = utils.getInfo();
132 assertEquals("255.128.0.0",info.getNetmask());
133 assertEquals(8388608, info.getAddressCount());
134
135 utils = new SubnetUtils("192.168.0.1/10");
136 utils.setInclusiveHostCount(true);
137 info = utils.getInfo();
138 assertEquals("255.192.0.0",info.getNetmask());
139 assertEquals(4194304, info.getAddressCount());
140
141 utils = new SubnetUtils("192.168.0.1/11");
142 utils.setInclusiveHostCount(true);
143 info = utils.getInfo();
144 assertEquals("255.224.0.0",info.getNetmask());
145 assertEquals(2097152, info.getAddressCount());
146
147 utils = new SubnetUtils("192.168.0.1/12");
148 utils.setInclusiveHostCount(true);
149 info = utils.getInfo();
150 assertEquals("255.240.0.0",info.getNetmask());
151 assertEquals(1048576, info.getAddressCount());
152
153 utils = new SubnetUtils("192.168.0.1/13");
154 utils.setInclusiveHostCount(true);
155 info = utils.getInfo();
156 assertEquals("255.248.0.0",info.getNetmask());
157 assertEquals(524288, info.getAddressCount());
158
159 utils = new SubnetUtils("192.168.0.1/14");
160 utils.setInclusiveHostCount(true);
161 info = utils.getInfo();
162 assertEquals("255.252.0.0",info.getNetmask());
163 assertEquals(262144, info.getAddressCount());
164
165 utils = new SubnetUtils("192.168.0.1/15");
166 utils.setInclusiveHostCount(true);
167 info = utils.getInfo();
168 assertEquals("255.254.0.0",info.getNetmask());
169 assertEquals(131072, info.getAddressCount());
170
171 utils = new SubnetUtils("192.168.0.1/16");
172 utils.setInclusiveHostCount(true);
173 info = utils.getInfo();
174 assertEquals("255.255.0.0",info.getNetmask());
175 assertEquals(65536, info.getAddressCount());
176
177 utils = new SubnetUtils("192.168.0.1/17");
178 utils.setInclusiveHostCount(true);
179 info = utils.getInfo();
180 assertEquals("255.255.128.0",info.getNetmask());
181 assertEquals(32768, info.getAddressCount());
182
183 utils = new SubnetUtils("192.168.0.1/18");
184 utils.setInclusiveHostCount(true);
185 info = utils.getInfo();
186 assertEquals("255.255.192.0",info.getNetmask());
187 assertEquals(16384, info.getAddressCount());
188
189 utils = new SubnetUtils("192.168.0.1/19");
190 utils.setInclusiveHostCount(true);
191 info = utils.getInfo();
192 assertEquals("255.255.224.0",info.getNetmask());
193 assertEquals(8192, info.getAddressCount());
194
195 utils = new SubnetUtils("192.168.0.1/20");
196 utils.setInclusiveHostCount(true);
197 info = utils.getInfo();
198 assertEquals("255.255.240.0",info.getNetmask());
199 assertEquals(4096, info.getAddressCount());
200
201 utils = new SubnetUtils("192.168.0.1/21");
202 utils.setInclusiveHostCount(true);
203 info = utils.getInfo();
204 assertEquals("255.255.248.0",info.getNetmask());
205 assertEquals(2048, info.getAddressCount());
206
207 utils = new SubnetUtils("192.168.0.1/22");
208 utils.setInclusiveHostCount(true);
209 info = utils.getInfo();
210 assertEquals("255.255.252.0",info.getNetmask());
211 assertEquals(1024, info.getAddressCount());
212
213 utils = new SubnetUtils("192.168.0.1/23");
214 utils.setInclusiveHostCount(true);
215 info = utils.getInfo();
216 assertEquals("255.255.254.0",info.getNetmask());
217 assertEquals(512, info.getAddressCount());
218
219 utils = new SubnetUtils("192.168.0.1/24");
220 utils.setInclusiveHostCount(true);
221 info = utils.getInfo();
222 assertEquals("255.255.255.0",info.getNetmask());
223 assertEquals(256, info.getAddressCount());
224
225 utils = new SubnetUtils("192.168.0.1/25");
226 utils.setInclusiveHostCount(true);
227 info = utils.getInfo();
228 assertEquals("255.255.255.128",info.getNetmask());
229 assertEquals(128, info.getAddressCount());
230
231 utils = new SubnetUtils("192.168.0.1/26");
232 utils.setInclusiveHostCount(true);
233 info = utils.getInfo();
234 assertEquals("255.255.255.192",info.getNetmask());
235 assertEquals(64, info.getAddressCount());
236
237 utils = new SubnetUtils("192.168.0.1/27");
238 utils.setInclusiveHostCount(true);
239 info = utils.getInfo();
240 assertEquals("255.255.255.224",info.getNetmask());
241 assertEquals(32, info.getAddressCount());
242
243 utils = new SubnetUtils("192.168.0.1/28");
244 utils.setInclusiveHostCount(true);
245 info = utils.getInfo();
246 assertEquals("255.255.255.240",info.getNetmask());
247 assertEquals(16, info.getAddressCount());
248
249 utils = new SubnetUtils("192.168.0.1/29");
250 utils.setInclusiveHostCount(true);
251 info = utils.getInfo();
252 assertEquals("255.255.255.248",info.getNetmask());
253 assertEquals(8, info.getAddressCount());
254
255 utils = new SubnetUtils("192.168.0.1/30");
256 utils.setInclusiveHostCount(true);
257 info = utils.getInfo();
258 assertEquals("255.255.255.252",info.getNetmask());
259 assertEquals(4, info.getAddressCount());
260
261 utils = new SubnetUtils("192.168.0.1/31");
262 utils.setInclusiveHostCount(true);
263 info = utils.getInfo();
264 assertEquals("255.255.255.254",info.getNetmask());
265 assertEquals(2, info.getAddressCount());
266
267 utils = new SubnetUtils("192.168.0.1/32");
268 utils.setInclusiveHostCount(true);
269 info = utils.getInfo();
270 assertEquals("255.255.255.255",info.getNetmask());
271 assertEquals(1, info.getAddressCount());
272
273 new SubnetUtils("192.168.0.1/1");
274 }
275
276 public void testInvalidMasks(){
277 try {
278 new SubnetUtils("192.168.0.1/33");
279 fail("Should have thrown IllegalArgumentException");
280 } catch (IllegalArgumentException expected) {
281 }
282 try {
283 new SubnetUtils("192.168.0.1/0");
284 fail("Should have thrown IllegalArgumentException");
285 } catch (IllegalArgumentException expected) {
286 }
287 try {
288 new SubnetUtils("192.168.0.1","0.0.0.0");
289 fail("Should have thrown IllegalArgumentException");
290 } catch (IllegalArgumentException expected) {
291 }
292 }
293
294 public void testNET428_31() throws Exception {
295 final SubnetUtils subnetUtils = new SubnetUtils("1.2.3.4/31");
296 assertEquals(0,subnetUtils.getInfo().getAddressCount());
297 String[] address = subnetUtils.getInfo().getAllAddresses();
298 assertNotNull(address);
299 assertEquals(0,address.length);
300 }
301
302 public void testNET428_32() throws Exception {
303 final SubnetUtils subnetUtils = new SubnetUtils("1.2.3.4/32");
304 assertEquals(0,subnetUtils.getInfo().getAddressCount());
305 String[] address = subnetUtils.getInfo().getAllAddresses();
306 assertNotNull(address);
307 assertEquals(0,address.length);
308 }
309 }