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 static org.junit.jupiter.api.Assertions.assertArrayEquals;
21 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
22 import static org.junit.jupiter.api.Assertions.assertEquals;
23 import static org.junit.jupiter.api.Assertions.assertFalse;
24 import static org.junit.jupiter.api.Assertions.assertNotNull;
25 import static org.junit.jupiter.api.Assertions.assertThrows;
26 import static org.junit.jupiter.api.Assertions.assertTrue;
27
28 import org.apache.commons.net.util.SubnetUtils;
29 import org.apache.commons.net.util.SubnetUtils.SubnetInfo;
30 import org.junit.jupiter.api.Test;
31
32 @SuppressWarnings("deprecation")
33 public class SubnetUtilsTest {
34
35 @Test
36 public void testAddresses() {
37 final SubnetUtils utils = new SubnetUtils("192.168.0.1/29");
38 final SubnetInfo info = utils.getInfo();
39 assertTrue(info.isInRange("192.168.0.1"));
40 assertTrue(info.isInRange("192.168.0.2"));
41 assertTrue(info.isInRange("192.168.0.3"));
42 assertTrue(info.isInRange("192.168.0.4"));
43 assertTrue(info.isInRange("192.168.0.5"));
44 assertTrue(info.isInRange("192.168.0.6"));
45
46 assertFalse(info.isInRange("192.168.0.7"));
47 assertFalse(info.isInRange("192.168.0.8"));
48 assertFalse(info.isInRange("10.10.2.1"));
49 assertFalse(info.isInRange("192.168.1.1"));
50 assertFalse(info.isInRange("192.168.0.255"));
51
52 assertEquals(-1062731775, info.asInteger("192.168.0.1"));
53 assertThrows(IllegalArgumentException.class, () -> info.asInteger("bad"));
54
55 assertArrayEquals(new String[] { "192.168.0.1", "192.168.0.2", "192.168.0.3", "192.168.0.4", "192.168.0.5", "192.168.0.6" }, info.getAllAddresses());
56 }
57
58 @Test
59 public void testAddressIllegalArgument() {
60 assertThrows(IllegalArgumentException.class, () -> new SubnetUtils("bad"));
61 }
62
63
64
65
66 @Test
67 public void testCidrAddresses() {
68 SubnetUtils utils = new SubnetUtils("192.168.0.1/8");
69 utils.setInclusiveHostCount(true);
70 SubnetInfo info = utils.getInfo();
71 assertEquals("255.0.0.0", info.getNetmask());
72 assertEquals(16777216, info.getAddressCount());
73
74 utils = new SubnetUtils("192.168.0.1/0");
75 utils.setInclusiveHostCount(true);
76 info = utils.getInfo();
77 assertEquals("0.0.0.0", info.getNetmask());
78 assertEquals(4294967296L, info.getAddressCountLong());
79
80 utils = new SubnetUtils("192.168.0.1/1");
81 utils.setInclusiveHostCount(true);
82 info = utils.getInfo();
83 assertEquals("128.0.0.0", info.getNetmask());
84 assertEquals(2147483648L, info.getAddressCountLong());
85
86 utils = new SubnetUtils("192.168.0.1/9");
87 utils.setInclusiveHostCount(true);
88 info = utils.getInfo();
89 assertEquals("255.128.0.0", info.getNetmask());
90 assertEquals(8388608, info.getAddressCount());
91
92 utils = new SubnetUtils("192.168.0.1/10");
93 utils.setInclusiveHostCount(true);
94 info = utils.getInfo();
95 assertEquals("255.192.0.0", info.getNetmask());
96 assertEquals(4194304, info.getAddressCount());
97
98 utils = new SubnetUtils("192.168.0.1/11");
99 utils.setInclusiveHostCount(true);
100 info = utils.getInfo();
101 assertEquals("255.224.0.0", info.getNetmask());
102 assertEquals(2097152, info.getAddressCount());
103
104 utils = new SubnetUtils("192.168.0.1/12");
105 utils.setInclusiveHostCount(true);
106 info = utils.getInfo();
107 assertEquals("255.240.0.0", info.getNetmask());
108 assertEquals(1048576, info.getAddressCount());
109
110 utils = new SubnetUtils("192.168.0.1/13");
111 utils.setInclusiveHostCount(true);
112 info = utils.getInfo();
113 assertEquals("255.248.0.0", info.getNetmask());
114 assertEquals(524288, info.getAddressCount());
115
116 utils = new SubnetUtils("192.168.0.1/14");
117 utils.setInclusiveHostCount(true);
118 info = utils.getInfo();
119 assertEquals("255.252.0.0", info.getNetmask());
120 assertEquals(262144, info.getAddressCount());
121
122 utils = new SubnetUtils("192.168.0.1/15");
123 utils.setInclusiveHostCount(true);
124 info = utils.getInfo();
125 assertEquals("255.254.0.0", info.getNetmask());
126 assertEquals(131072, info.getAddressCount());
127
128 utils = new SubnetUtils("192.168.0.1/16");
129 utils.setInclusiveHostCount(true);
130 info = utils.getInfo();
131 assertEquals("255.255.0.0", info.getNetmask());
132 assertEquals(65536, info.getAddressCount());
133
134 utils = new SubnetUtils("192.168.0.1/17");
135 utils.setInclusiveHostCount(true);
136 info = utils.getInfo();
137 assertEquals("255.255.128.0", info.getNetmask());
138 assertEquals(32768, info.getAddressCount());
139
140 utils = new SubnetUtils("192.168.0.1/18");
141 utils.setInclusiveHostCount(true);
142 info = utils.getInfo();
143 assertEquals("255.255.192.0", info.getNetmask());
144 assertEquals(16384, info.getAddressCount());
145
146 utils = new SubnetUtils("192.168.0.1/19");
147 utils.setInclusiveHostCount(true);
148 info = utils.getInfo();
149 assertEquals("255.255.224.0", info.getNetmask());
150 assertEquals(8192, info.getAddressCount());
151
152 utils = new SubnetUtils("192.168.0.1/20");
153 utils.setInclusiveHostCount(true);
154 info = utils.getInfo();
155 assertEquals("255.255.240.0", info.getNetmask());
156 assertEquals(4096, info.getAddressCount());
157
158 utils = new SubnetUtils("192.168.0.1/21");
159 utils.setInclusiveHostCount(true);
160 info = utils.getInfo();
161 assertEquals("255.255.248.0", info.getNetmask());
162 assertEquals(2048, info.getAddressCount());
163
164 utils = new SubnetUtils("192.168.0.1/22");
165 utils.setInclusiveHostCount(true);
166 info = utils.getInfo();
167 assertEquals("255.255.252.0", info.getNetmask());
168 assertEquals(1024, info.getAddressCount());
169
170 utils = new SubnetUtils("192.168.0.1/23");
171 utils.setInclusiveHostCount(true);
172 info = utils.getInfo();
173 assertEquals("255.255.254.0", info.getNetmask());
174 assertEquals(512, info.getAddressCount());
175
176 utils = new SubnetUtils("192.168.0.1/24");
177 utils.setInclusiveHostCount(true);
178 info = utils.getInfo();
179 assertEquals("255.255.255.0", info.getNetmask());
180 assertEquals(256, info.getAddressCount());
181
182 utils = new SubnetUtils("192.168.0.1/25");
183 utils.setInclusiveHostCount(true);
184 info = utils.getInfo();
185 assertEquals("255.255.255.128", info.getNetmask());
186 assertEquals(128, info.getAddressCount());
187
188 utils = new SubnetUtils("192.168.0.1/26");
189 utils.setInclusiveHostCount(true);
190 info = utils.getInfo();
191 assertEquals("255.255.255.192", info.getNetmask());
192 assertEquals(64, info.getAddressCount());
193
194 utils = new SubnetUtils("192.168.0.1/27");
195 utils.setInclusiveHostCount(true);
196 info = utils.getInfo();
197 assertEquals("255.255.255.224", info.getNetmask());
198 assertEquals(32, info.getAddressCount());
199
200 utils = new SubnetUtils("192.168.0.1/28");
201 utils.setInclusiveHostCount(true);
202 info = utils.getInfo();
203 assertEquals("255.255.255.240", info.getNetmask());
204 assertEquals(16, info.getAddressCount());
205
206 utils = new SubnetUtils("192.168.0.1/29");
207 utils.setInclusiveHostCount(true);
208 info = utils.getInfo();
209 assertEquals("255.255.255.248", info.getNetmask());
210 assertEquals(8, info.getAddressCount());
211
212 utils = new SubnetUtils("192.168.0.1/30");
213 utils.setInclusiveHostCount(true);
214 info = utils.getInfo();
215 assertEquals("255.255.255.252", info.getNetmask());
216 assertEquals(4, info.getAddressCount());
217
218 utils = new SubnetUtils("192.168.0.1/31");
219 utils.setInclusiveHostCount(true);
220 info = utils.getInfo();
221 assertEquals("255.255.255.254", info.getNetmask());
222 assertEquals(2, info.getAddressCount());
223
224 utils = new SubnetUtils("192.168.0.1/32");
225 utils.setInclusiveHostCount(true);
226 info = utils.getInfo();
227 assertEquals("255.255.255.255", info.getNetmask());
228 assertEquals(1, info.getAddressCount());
229
230 }
231
232 @Test
233 public void testInvalidMasks() {
234 assertThrows(IllegalArgumentException.class, () -> new SubnetUtils("192.168.0.1/"));
235 assertThrows(IllegalArgumentException.class, () -> new SubnetUtils("192.168.0.1/33"));
236 assertThrows(IllegalArgumentException.class, () -> new SubnetUtils("192.168.0.1/111"));
237 assertThrows(IllegalArgumentException.class, () -> new SubnetUtils("192.168.0.1/032"));
238 }
239
240 @Test
241 public void testNET428_31() {
242 final SubnetUtils subnetUtils = new SubnetUtils("1.2.3.4/31");
243 assertEquals(0, subnetUtils.getInfo().getAddressCount());
244 final String[] address = subnetUtils.getInfo().getAllAddresses();
245 assertNotNull(address);
246 assertEquals(0, address.length);
247 }
248
249 @Test
250 public void testNET428_32() {
251 final SubnetUtils subnetUtils = new SubnetUtils("1.2.3.4/32");
252 assertEquals(0, subnetUtils.getInfo().getAddressCount());
253 final String[] address = subnetUtils.getInfo().getAllAddresses();
254 assertNotNull(address);
255 assertEquals(0, address.length);
256 }
257
258 @Test
259 public void testNET520() {
260 final SubnetUtils utils = new SubnetUtils("0.0.0.0/0");
261 utils.setInclusiveHostCount(true);
262 final SubnetInfo info = utils.getInfo();
263 assertEquals("0.0.0.0", info.getNetworkAddress());
264 assertEquals("255.255.255.255", info.getBroadcastAddress());
265 assertTrue(info.isInRange("127.0.0.0"));
266 utils.setInclusiveHostCount(false);
267 assertTrue(info.isInRange("127.0.0.0"));
268 }
269
270 @Test
271 public void testNET521() {
272 SubnetUtils utils;
273 SubnetInfo info;
274
275 utils = new SubnetUtils("0.0.0.0/0");
276 utils.setInclusiveHostCount(true);
277 info = utils.getInfo();
278 assertEquals("0.0.0.0", info.getNetmask());
279 assertEquals(4294967296L, info.getAddressCountLong());
280 assertThrows(RuntimeException.class, info::getAddressCount);
281 utils = new SubnetUtils("128.0.0.0/1");
282 utils.setInclusiveHostCount(true);
283 info = utils.getInfo();
284 assertEquals("128.0.0.0", info.getNetmask());
285 assertEquals(2147483648L, info.getAddressCountLong());
286 assertThrows(RuntimeException.class, info::getAddressCount);
287
288 utils.setInclusiveHostCount(false);
289 info = utils.getInfo();
290 assertEquals(2147483646, info.getAddressCount());
291 }
292
293 @Test
294 public void testNET624() {
295 assertDoesNotThrow(() -> new SubnetUtils("0.0.0.0/0"));
296 assertDoesNotThrow(() -> new SubnetUtils("0.0.0.0", "0.0.0.0"));
297 assertDoesNotThrow(() -> new SubnetUtils("0.0.0.0", "128.0.0.0"));
298 assertThrows(IllegalArgumentException.class, () -> new SubnetUtils("0.0.0.0", "64.0.0.0"));
299 assertThrows(IllegalArgumentException.class, () -> new SubnetUtils("0.0.0.0", "0.0.0.1"));
300 }
301
302 @Test
303 public void testNET641() {
304 assertFalse(new SubnetUtils("192.168.1.0/00").getInfo().isInRange("0.0.0.0"));
305 assertFalse(new SubnetUtils("192.168.1.0/30").getInfo().isInRange("0.0.0.0"));
306 assertFalse(new SubnetUtils("192.168.1.0/31").getInfo().isInRange("0.0.0.0"));
307 assertFalse(new SubnetUtils("192.168.1.0/32").getInfo().isInRange("0.0.0.0"));
308 }
309
310 @Test
311 public void testNET675() {
312 final SubnetUtils utils = new SubnetUtils("192.168.0.15/32");
313 utils.setInclusiveHostCount(true);
314 final SubnetInfo info = utils.getInfo();
315 assertTrue(info.isInRange("192.168.0.15"));
316 }
317
318 @Test
319 public void testNET679() {
320 final SubnetUtils utils = new SubnetUtils("10.213.160.0/16");
321 utils.setInclusiveHostCount(true);
322 final SubnetInfo info = utils.getInfo();
323 assertTrue(info.isInRange("10.213.0.0"));
324 assertTrue(info.isInRange("10.213.255.255"));
325 }
326
327 @Test
328 public void testNext() {
329 final SubnetUtils utils = new SubnetUtils("192.168.0.1/29");
330 assertEquals("192.168.0.2", utils.getNext().getInfo().getAddress());
331 }
332
333 @Test
334 public void testParseSimpleNetmask() {
335 final String address = "192.168.0.1";
336 final String[] masks = { "255.0.0.0", "255.255.0.0", "255.255.255.0", "255.255.255.248" };
337 final String[] bcastAddresses = { "192.255.255.255", "192.168.255.255", "192.168.0.255", "192.168.0.7" };
338 final String[] lowAddresses = { "192.0.0.1", "192.168.0.1", "192.168.0.1", "192.168.0.1" };
339 final String[] highAddresses = { "192.255.255.254", "192.168.255.254", "192.168.0.254", "192.168.0.6" };
340 final String[] nextAddresses = { "192.168.0.2", "192.168.0.2", "192.168.0.2", "192.168.0.2" };
341 final String[] previousAddresses = { "192.168.0.0", "192.168.0.0", "192.168.0.0", "192.168.0.0" };
342 final String[] networkAddresses = { "192.0.0.0", "192.168.0.0", "192.168.0.0", "192.168.0.0" };
343 final String[] cidrSignatures = { "192.168.0.1/8", "192.168.0.1/16", "192.168.0.1/24", "192.168.0.1/29" };
344 final int[] usableAddresses = { 16777214, 65534, 254, 6 };
345
346 for (int i = 0; i < masks.length; ++i) {
347 final SubnetUtils utils = new SubnetUtils(address, masks[i]);
348 final SubnetInfo info = utils.getInfo();
349 assertEquals(address, info.getAddress());
350 assertEquals(bcastAddresses[i], info.getBroadcastAddress());
351 assertEquals(cidrSignatures[i], info.getCidrSignature());
352 assertEquals(lowAddresses[i], info.getLowAddress());
353 assertEquals(highAddresses[i], info.getHighAddress());
354 assertEquals(nextAddresses[i], info.getNextAddress());
355 assertEquals(previousAddresses[i], info.getPreviousAddress());
356 assertEquals(networkAddresses[i], info.getNetworkAddress());
357 assertEquals(usableAddresses[i], info.getAddressCount());
358 }
359 }
360
361 @Test
362 public void testParseSimpleNetmaskExclusive() {
363 final String address = "192.168.15.7";
364 final String[] masks = { "255.255.255.252", "255.255.255.254", "255.255.255.255" };
365 final String[] bcast = { "192.168.15.7", "192.168.15.7", "192.168.15.7" };
366 final String[] netwk = { "192.168.15.4", "192.168.15.6", "192.168.15.7" };
367 final String[] lowAd = { "192.168.15.5", "0.0.0.0", "0.0.0.0" };
368 final String[] highA = { "192.168.15.6", "0.0.0.0", "0.0.0.0" };
369 final String[] cidrS = { "192.168.15.7/30", "192.168.15.7/31", "192.168.15.7/32" };
370 final int[] usableAd = { 2, 0, 0 };
371
372
373 for (int i = 0; i < masks.length; ++i) {
374 final SubnetUtils utils = new SubnetUtils(address, masks[i]);
375 utils.setInclusiveHostCount(false);
376 final SubnetInfo info = utils.getInfo();
377 assertEquals(cidrS[i], info.getCidrSignature(), "ci " + masks[i]);
378 assertEquals(bcast[i], info.getBroadcastAddress(), "bc " + masks[i]);
379 assertEquals(netwk[i], info.getNetworkAddress(), "nw " + masks[i]);
380 assertEquals(usableAd[i], info.getAddressCount(), "ac " + masks[i]);
381 assertEquals(lowAd[i], info.getLowAddress(), "lo " + masks[i]);
382 assertEquals(highA[i], info.getHighAddress(), "hi " + masks[i]);
383 }
384 }
385
386 @Test
387 public void testParseSimpleNetmaskInclusive() {
388 final String address = "192.168.15.7";
389 final String[] masks = { "255.255.255.252", "255.255.255.254", "255.255.255.255" };
390 final String[] bcast = { "192.168.15.7", "192.168.15.7", "192.168.15.7" };
391 final String[] netwk = { "192.168.15.4", "192.168.15.6", "192.168.15.7" };
392 final String[] lowAd = { "192.168.15.4", "192.168.15.6", "192.168.15.7" };
393 final String[] highA = { "192.168.15.7", "192.168.15.7", "192.168.15.7" };
394 final String[] cidrS = { "192.168.15.7/30", "192.168.15.7/31", "192.168.15.7/32" };
395 final int[] usableAd = { 4, 2, 1 };
396
397 for (int i = 0; i < masks.length; ++i) {
398 final SubnetUtils utils = new SubnetUtils(address, masks[i]);
399 utils.setInclusiveHostCount(true);
400 final SubnetInfo info = utils.getInfo();
401 assertEquals(cidrS[i], info.getCidrSignature(), "ci " + masks[i]);
402 assertEquals(bcast[i], info.getBroadcastAddress(), "bc " + masks[i]);
403 assertEquals(usableAd[i], info.getAddressCount(), "ac " + masks[i]);
404 assertEquals(netwk[i], info.getNetworkAddress(), "nw " + masks[i]);
405 assertEquals(lowAd[i], info.getLowAddress(), "lo " + masks[i]);
406 assertEquals(highA[i], info.getHighAddress(), "hi " + masks[i]);
407 }
408 }
409
410 @Test
411 public void testPrevious() {
412 final SubnetUtils utils = new SubnetUtils("192.168.0.1/29");
413 assertEquals("192.168.0.0", utils.getPrevious().getInfo().getAddress());
414 }
415
416 @Test
417 public void testToString() {
418 final SubnetUtils utils = new SubnetUtils("192.168.0.1/29");
419 assertDoesNotThrow(() -> utils.toString());
420 final SubnetInfo info = utils.getInfo();
421 assertDoesNotThrow(() -> info.toString());
422 }
423
424 @Test
425 public void testZeroAddressAndCidr() {
426 final SubnetUtils snu = new SubnetUtils("0.0.0.0/0");
427 assertNotNull(snu);
428 }
429 }