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/33"));
235 }
236
237 @Test
238 public void testNET428_31() {
239 final SubnetUtils subnetUtils = new SubnetUtils("1.2.3.4/31");
240 assertEquals(0, subnetUtils.getInfo().getAddressCount());
241 final String[] address = subnetUtils.getInfo().getAllAddresses();
242 assertNotNull(address);
243 assertEquals(0, address.length);
244 }
245
246 @Test
247 public void testNET428_32() {
248 final SubnetUtils subnetUtils = new SubnetUtils("1.2.3.4/32");
249 assertEquals(0, subnetUtils.getInfo().getAddressCount());
250 final String[] address = subnetUtils.getInfo().getAllAddresses();
251 assertNotNull(address);
252 assertEquals(0, address.length);
253 }
254
255 @Test
256 public void testNET520() {
257 final SubnetUtils utils = new SubnetUtils("0.0.0.0/0");
258 utils.setInclusiveHostCount(true);
259 final SubnetInfo info = utils.getInfo();
260 assertEquals("0.0.0.0", info.getNetworkAddress());
261 assertEquals("255.255.255.255", info.getBroadcastAddress());
262 assertTrue(info.isInRange("127.0.0.0"));
263 utils.setInclusiveHostCount(false);
264 assertTrue(info.isInRange("127.0.0.0"));
265 }
266
267 @Test
268 public void testNET521() {
269 SubnetUtils utils;
270 SubnetInfo info;
271
272 utils = new SubnetUtils("0.0.0.0/0");
273 utils.setInclusiveHostCount(true);
274 info = utils.getInfo();
275 assertEquals("0.0.0.0", info.getNetmask());
276 assertEquals(4294967296L, info.getAddressCountLong());
277 assertThrows(RuntimeException.class, info::getAddressCount);
278 utils = new SubnetUtils("128.0.0.0/1");
279 utils.setInclusiveHostCount(true);
280 info = utils.getInfo();
281 assertEquals("128.0.0.0", info.getNetmask());
282 assertEquals(2147483648L, info.getAddressCountLong());
283 assertThrows(RuntimeException.class, info::getAddressCount);
284
285 utils.setInclusiveHostCount(false);
286 info = utils.getInfo();
287 assertEquals(2147483646, info.getAddressCount());
288 }
289
290 @Test
291 public void testNET624() {
292 assertDoesNotThrow(() -> new SubnetUtils("0.0.0.0/0"));
293 assertDoesNotThrow(() -> new SubnetUtils("0.0.0.0", "0.0.0.0"));
294 assertDoesNotThrow(() -> new SubnetUtils("0.0.0.0", "128.0.0.0"));
295 assertThrows(IllegalArgumentException.class, () -> new SubnetUtils("0.0.0.0", "64.0.0.0"));
296 assertThrows(IllegalArgumentException.class, () -> new SubnetUtils("0.0.0.0", "0.0.0.1"));
297 }
298
299 @Test
300 public void testNET641() {
301 assertFalse(new SubnetUtils("192.168.1.0/00").getInfo().isInRange("0.0.0.0"));
302 assertFalse(new SubnetUtils("192.168.1.0/30").getInfo().isInRange("0.0.0.0"));
303 assertFalse(new SubnetUtils("192.168.1.0/31").getInfo().isInRange("0.0.0.0"));
304 assertFalse(new SubnetUtils("192.168.1.0/32").getInfo().isInRange("0.0.0.0"));
305 }
306
307 @Test
308 public void testNET675() {
309 final SubnetUtils utils = new SubnetUtils("192.168.0.15/32");
310 utils.setInclusiveHostCount(true);
311 final SubnetInfo info = utils.getInfo();
312 assertTrue(info.isInRange("192.168.0.15"));
313 }
314
315 @Test
316 public void testNET679() {
317 final SubnetUtils utils = new SubnetUtils("10.213.160.0/16");
318 utils.setInclusiveHostCount(true);
319 final SubnetInfo info = utils.getInfo();
320 assertTrue(info.isInRange("10.213.0.0"));
321 assertTrue(info.isInRange("10.213.255.255"));
322 }
323
324 @Test
325 public void testNext() {
326 final SubnetUtils utils = new SubnetUtils("192.168.0.1/29");
327 assertEquals("192.168.0.2", utils.getNext().getInfo().getAddress());
328 }
329
330 @Test
331 public void testParseSimpleNetmask() {
332 final String address = "192.168.0.1";
333 final String[] masks = { "255.0.0.0", "255.255.0.0", "255.255.255.0", "255.255.255.248" };
334 final String[] bcastAddresses = { "192.255.255.255", "192.168.255.255", "192.168.0.255", "192.168.0.7" };
335 final String[] lowAddresses = { "192.0.0.1", "192.168.0.1", "192.168.0.1", "192.168.0.1" };
336 final String[] highAddresses = { "192.255.255.254", "192.168.255.254", "192.168.0.254", "192.168.0.6" };
337 final String[] nextAddresses = { "192.168.0.2", "192.168.0.2", "192.168.0.2", "192.168.0.2" };
338 final String[] previousAddresses = { "192.168.0.0", "192.168.0.0", "192.168.0.0", "192.168.0.0" };
339 final String[] networkAddresses = { "192.0.0.0", "192.168.0.0", "192.168.0.0", "192.168.0.0" };
340 final String[] cidrSignatures = { "192.168.0.1/8", "192.168.0.1/16", "192.168.0.1/24", "192.168.0.1/29" };
341 final int[] usableAddresses = { 16777214, 65534, 254, 6 };
342
343 for (int i = 0; i < masks.length; ++i) {
344 final SubnetUtils utils = new SubnetUtils(address, masks[i]);
345 final SubnetInfo info = utils.getInfo();
346 assertEquals(address, info.getAddress());
347 assertEquals(bcastAddresses[i], info.getBroadcastAddress());
348 assertEquals(cidrSignatures[i], info.getCidrSignature());
349 assertEquals(lowAddresses[i], info.getLowAddress());
350 assertEquals(highAddresses[i], info.getHighAddress());
351 assertEquals(nextAddresses[i], info.getNextAddress());
352 assertEquals(previousAddresses[i], info.getPreviousAddress());
353 assertEquals(networkAddresses[i], info.getNetworkAddress());
354 assertEquals(usableAddresses[i], info.getAddressCount());
355 }
356 }
357
358 @Test
359 public void testParseSimpleNetmaskExclusive() {
360 final String address = "192.168.15.7";
361 final String[] masks = { "255.255.255.252", "255.255.255.254", "255.255.255.255" };
362 final String[] bcast = { "192.168.15.7", "192.168.15.7", "192.168.15.7" };
363 final String[] netwk = { "192.168.15.4", "192.168.15.6", "192.168.15.7" };
364 final String[] lowAd = { "192.168.15.5", "0.0.0.0", "0.0.0.0" };
365 final String[] highA = { "192.168.15.6", "0.0.0.0", "0.0.0.0" };
366 final String[] cidrS = { "192.168.15.7/30", "192.168.15.7/31", "192.168.15.7/32" };
367 final int[] usableAd = { 2, 0, 0 };
368
369
370 for (int i = 0; i < masks.length; ++i) {
371 final SubnetUtils utils = new SubnetUtils(address, masks[i]);
372 utils.setInclusiveHostCount(false);
373 final SubnetInfo info = utils.getInfo();
374 assertEquals(cidrS[i], info.getCidrSignature(), "ci " + masks[i]);
375 assertEquals(bcast[i], info.getBroadcastAddress(), "bc " + masks[i]);
376 assertEquals(netwk[i], info.getNetworkAddress(), "nw " + masks[i]);
377 assertEquals(usableAd[i], info.getAddressCount(), "ac " + masks[i]);
378 assertEquals(lowAd[i], info.getLowAddress(), "lo " + masks[i]);
379 assertEquals(highA[i], info.getHighAddress(), "hi " + masks[i]);
380 }
381 }
382
383 @Test
384 public void testParseSimpleNetmaskInclusive() {
385 final String address = "192.168.15.7";
386 final String[] masks = { "255.255.255.252", "255.255.255.254", "255.255.255.255" };
387 final String[] bcast = { "192.168.15.7", "192.168.15.7", "192.168.15.7" };
388 final String[] netwk = { "192.168.15.4", "192.168.15.6", "192.168.15.7" };
389 final String[] lowAd = { "192.168.15.4", "192.168.15.6", "192.168.15.7" };
390 final String[] highA = { "192.168.15.7", "192.168.15.7", "192.168.15.7" };
391 final String[] cidrS = { "192.168.15.7/30", "192.168.15.7/31", "192.168.15.7/32" };
392 final int[] usableAd = { 4, 2, 1 };
393
394 for (int i = 0; i < masks.length; ++i) {
395 final SubnetUtils utils = new SubnetUtils(address, masks[i]);
396 utils.setInclusiveHostCount(true);
397 final SubnetInfo info = utils.getInfo();
398 assertEquals(cidrS[i], info.getCidrSignature(), "ci " + masks[i]);
399 assertEquals(bcast[i], info.getBroadcastAddress(), "bc " + masks[i]);
400 assertEquals(usableAd[i], info.getAddressCount(), "ac " + masks[i]);
401 assertEquals(netwk[i], info.getNetworkAddress(), "nw " + masks[i]);
402 assertEquals(lowAd[i], info.getLowAddress(), "lo " + masks[i]);
403 assertEquals(highA[i], info.getHighAddress(), "hi " + masks[i]);
404 }
405 }
406
407 @Test
408 public void testPrevious() {
409 final SubnetUtils utils = new SubnetUtils("192.168.0.1/29");
410 assertEquals("192.168.0.0", utils.getPrevious().getInfo().getAddress());
411 }
412
413 @Test
414 public void testToString() {
415 final SubnetUtils utils = new SubnetUtils("192.168.0.1/29");
416 assertDoesNotThrow(() -> utils.toString());
417 final SubnetInfo info = utils.getInfo();
418 assertDoesNotThrow(() -> info.toString());
419 }
420
421 @Test
422 public void testZeroAddressAndCidr() {
423 final SubnetUtils snu = new SubnetUtils("0.0.0.0/0");
424 assertNotNull(snu);
425 }
426 }