blob: 90ebafd6d0320ea898aca8fa22d94457e199d3b1 [file] [log] [blame]
Thomas Vachuska24c849c2014-10-27 09:53:05 -07001/*
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07002 * Copyright 2014 Open Networking Laboratory
Thomas Vachuska24c849c2014-10-27 09:53:05 -07003 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07004 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
Thomas Vachuska24c849c2014-10-27 09:53:05 -07007 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07008 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
Thomas Vachuska24c849c2014-10-27 09:53:05 -070015 */
Ayaka Koshibe16698a32014-09-13 22:19:02 -070016package org.onlab.packet;
17
18import static org.junit.Assert.assertEquals;
Jonathan Hartb7a2ac32014-09-19 10:42:27 -070019import static org.junit.Assert.assertFalse;
Ayaka Koshibe40e7fec2014-09-16 22:32:19 -070020import static org.junit.Assert.assertTrue;
Ayaka Koshibe16698a32014-09-13 22:19:02 -070021
22import java.util.Arrays;
23
24import org.junit.Test;
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070025import org.onlab.packet.IpPrefix.Version;
Ayaka Koshibe16698a32014-09-13 22:19:02 -070026
27import com.google.common.testing.EqualsTester;
28
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070029public class IpPrefixTest {
Ayaka Koshibe16698a32014-09-13 22:19:02 -070030
Ayaka Koshibe40e7fec2014-09-16 22:32:19 -070031 private static final byte [] BYTES1 = new byte [] {0xa, 0x0, 0x0, 0xa};
32 private static final byte [] BYTES2 = new byte [] {0xa, 0x0, 0x0, 0xb};
33 private static final int INTVAL1 = 167772170;
34 private static final int INTVAL2 = 167772171;
Pavlin Radoslavov52307e62014-10-29 15:07:37 -070035 private static final String STRVAL = "10.0.0.12/16";
36 private static final int MASK_LENGTH = 16;
Ayaka Koshibe16698a32014-09-13 22:19:02 -070037
38 @Test
39 public void testEquality() {
Pavlin Radoslavov52307e62014-10-29 15:07:37 -070040 IpPrefix ip1 = IpPrefix.valueOf(BYTES1, IpPrefix.MAX_INET_MASK_LENGTH);
41 IpPrefix ip2 = IpPrefix.valueOf(INTVAL1, IpPrefix.MAX_INET_MASK_LENGTH);
42 IpPrefix ip3 = IpPrefix.valueOf(BYTES2, IpPrefix.MAX_INET_MASK_LENGTH);
43 IpPrefix ip4 = IpPrefix.valueOf(INTVAL2, IpPrefix.MAX_INET_MASK_LENGTH);
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070044 IpPrefix ip5 = IpPrefix.valueOf(STRVAL);
Ayaka Koshibe16698a32014-09-13 22:19:02 -070045
Ayaka Koshibe40e7fec2014-09-16 22:32:19 -070046 new EqualsTester().addEqualityGroup(ip1, ip2)
47 .addEqualityGroup(ip3, ip4)
48 .addEqualityGroup(ip5)
Ayaka Koshibe16698a32014-09-13 22:19:02 -070049 .testEquals();
Ayaka Koshibe40e7fec2014-09-16 22:32:19 -070050
51 // string conversions
Pavlin Radoslavov52307e62014-10-29 15:07:37 -070052 IpPrefix ip6 = IpPrefix.valueOf(BYTES1, MASK_LENGTH);
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070053 IpPrefix ip7 = IpPrefix.valueOf("10.0.0.10/16");
Pavlin Radoslavov52307e62014-10-29 15:07:37 -070054 IpPrefix ip8 = IpPrefix.valueOf(new byte [] {0xa, 0x0, 0x0, 0xc}, 16);
Ayaka Koshibe40e7fec2014-09-16 22:32:19 -070055 assertEquals("incorrect address conversion", ip6, ip7);
56 assertEquals("incorrect address conversion", ip5, ip8);
Ayaka Koshibe16698a32014-09-13 22:19:02 -070057 }
58
59 @Test
60 public void basics() {
Pavlin Radoslavov52307e62014-10-29 15:07:37 -070061 IpPrefix ip1 = IpPrefix.valueOf(BYTES1, MASK_LENGTH);
Ayaka Koshibe40e7fec2014-09-16 22:32:19 -070062 final byte [] bytes = new byte [] {0xa, 0x0, 0x0, 0xa};
63
64 //check fields
65 assertEquals("incorrect IP Version", Version.INET, ip1.version());
Pavlin Radoslavov52307e62014-10-29 15:07:37 -070066 assertEquals("incorrect netmask", 16, ip1.prefixLength());
Ayaka Koshibe40e7fec2014-09-16 22:32:19 -070067 assertTrue("faulty toOctets()", Arrays.equals(bytes, ip1.toOctets()));
68 assertEquals("faulty toInt()", INTVAL1, ip1.toInt());
69 assertEquals("faulty toString()", "10.0.0.10/16", ip1.toString());
70 }
71
72 @Test
73 public void netmasks() {
74 // masked
Pavlin Radoslavov52307e62014-10-29 15:07:37 -070075 IpPrefix ip1 = IpPrefix.valueOf(BYTES1, MASK_LENGTH);
Ayaka Koshibe40e7fec2014-09-16 22:32:19 -070076
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070077 IpPrefix host = IpPrefix.valueOf("0.0.0.10/16");
78 IpPrefix network = IpPrefix.valueOf("10.0.0.0/16");
Ayaka Koshibe40e7fec2014-09-16 22:32:19 -070079 assertEquals("incorrect host address", host, ip1.host());
80 assertEquals("incorrect network address", network, ip1.network());
81 assertEquals("incorrect netmask", "255.255.0.0", ip1.netmask().toString());
82
Ayaka Koshibe16698a32014-09-13 22:19:02 -070083 }
Jonathan Hartb7a2ac32014-09-19 10:42:27 -070084
85 @Test
Jonathan Hart70da5122014-10-01 16:37:42 -070086 public void testContainsIpPrefix() {
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070087 IpPrefix slash31 = IpPrefix.valueOf(BYTES1, 31);
88 IpPrefix slash32 = IpPrefix.valueOf(BYTES1, 32);
89 IpPrefix differentSlash32 = IpPrefix.valueOf(BYTES2, 32);
Jonathan Hartb7a2ac32014-09-19 10:42:27 -070090
91 assertTrue(slash31.contains(differentSlash32));
92 assertFalse(differentSlash32.contains(slash31));
93
94 assertTrue(slash31.contains(slash32));
95 assertFalse(slash32.contains(differentSlash32));
96 assertFalse(differentSlash32.contains(slash32));
97
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070098 IpPrefix zero = IpPrefix.valueOf("0.0.0.0/0");
Jonathan Hartb7a2ac32014-09-19 10:42:27 -070099 assertTrue(zero.contains(differentSlash32));
100 assertFalse(differentSlash32.contains(zero));
101
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -0700102 IpPrefix slash8 = IpPrefix.valueOf("10.0.0.0/8");
Jonathan Hartb7a2ac32014-09-19 10:42:27 -0700103 assertTrue(slash8.contains(slash31));
104 assertFalse(slash31.contains(slash8));
105 }
Jonathan Hart70da5122014-10-01 16:37:42 -0700106
107 @Test
108 public void testContainsIpAddress() {
109 IpPrefix slash31 = IpPrefix.valueOf(BYTES1, 31);
Pavlin Radoslavove7b5bd72014-10-27 20:17:24 -0700110 IpAddress addr32 = IpAddress.valueOf(BYTES1);
Jonathan Hart70da5122014-10-01 16:37:42 -0700111
Pavlin Radoslavove7b5bd72014-10-27 20:17:24 -0700112 assertTrue(slash31.contains(addr32));
Jonathan Hart70da5122014-10-01 16:37:42 -0700113
114 IpPrefix intf = IpPrefix.valueOf("192.168.10.101/24");
115 IpAddress addr = IpAddress.valueOf("192.168.10.1");
116
117 assertTrue(intf.contains(addr));
Jonathan Hartdbdbdbb2014-10-06 18:35:30 -0700118
119 IpPrefix intf1 = IpPrefix.valueOf("10.0.0.101/24");
120 IpAddress addr1 = IpAddress.valueOf("10.0.0.4");
121
122 assertTrue(intf1.contains(addr1));
Jonathan Hart70da5122014-10-01 16:37:42 -0700123 }
Ayaka Koshibe16698a32014-09-13 22:19:02 -0700124}