blob: 66471b345eff2d3a2c7f7375b51fa9162187469a [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;
35 private static final String STRVAL = "10.0.0.12";
36 private static final int MASK = 16;
Ayaka Koshibe16698a32014-09-13 22:19:02 -070037
38 @Test
39 public void testEquality() {
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070040 IpPrefix ip1 = IpPrefix.valueOf(BYTES1);
41 IpPrefix ip2 = IpPrefix.valueOf(INTVAL1);
42 IpPrefix ip3 = IpPrefix.valueOf(BYTES2);
43 IpPrefix ip4 = IpPrefix.valueOf(INTVAL2);
44 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
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070052 IpPrefix ip6 = IpPrefix.valueOf(BYTES1, MASK);
53 IpPrefix ip7 = IpPrefix.valueOf("10.0.0.10/16");
54 IpPrefix ip8 = IpPrefix.valueOf(new byte [] {0xa, 0x0, 0x0, 0xc});
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() {
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070061 IpPrefix ip1 = IpPrefix.valueOf(BYTES1, MASK);
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());
66 assertEquals("incorrect netmask", 16, ip1.netmask);
67 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
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070075 IpPrefix ip1 = IpPrefix.valueOf(BYTES1, MASK);
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
83 //unmasked
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070084 IpPrefix ip2 = IpPrefix.valueOf(BYTES1);
85 IpPrefix umhost = IpPrefix.valueOf("10.0.0.10/0");
86 IpPrefix umnet = IpPrefix.valueOf("0.0.0.0/0");
Ayaka Koshibe40e7fec2014-09-16 22:32:19 -070087 assertEquals("incorrect host address", umhost, ip2.host());
88 assertEquals("incorrect host address", umnet, ip2.network());
89 assertTrue("incorrect netmask",
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070090 Arrays.equals(IpPrefix.ANY, ip2.netmask().toOctets()));
Ayaka Koshibe16698a32014-09-13 22:19:02 -070091 }
Jonathan Hartb7a2ac32014-09-19 10:42:27 -070092
93 @Test
Jonathan Hart70da5122014-10-01 16:37:42 -070094 public void testContainsIpPrefix() {
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070095 IpPrefix slash31 = IpPrefix.valueOf(BYTES1, 31);
96 IpPrefix slash32 = IpPrefix.valueOf(BYTES1, 32);
97 IpPrefix differentSlash32 = IpPrefix.valueOf(BYTES2, 32);
Jonathan Hartb7a2ac32014-09-19 10:42:27 -070098
99 assertTrue(slash31.contains(differentSlash32));
100 assertFalse(differentSlash32.contains(slash31));
101
102 assertTrue(slash31.contains(slash32));
103 assertFalse(slash32.contains(differentSlash32));
104 assertFalse(differentSlash32.contains(slash32));
105
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -0700106 IpPrefix zero = IpPrefix.valueOf("0.0.0.0/0");
Jonathan Hartb7a2ac32014-09-19 10:42:27 -0700107 assertTrue(zero.contains(differentSlash32));
108 assertFalse(differentSlash32.contains(zero));
109
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -0700110 IpPrefix slash8 = IpPrefix.valueOf("10.0.0.0/8");
Jonathan Hartb7a2ac32014-09-19 10:42:27 -0700111 assertTrue(slash8.contains(slash31));
112 assertFalse(slash31.contains(slash8));
113 }
Jonathan Hart70da5122014-10-01 16:37:42 -0700114
115 @Test
116 public void testContainsIpAddress() {
117 IpPrefix slash31 = IpPrefix.valueOf(BYTES1, 31);
Pavlin Radoslavove7b5bd72014-10-27 20:17:24 -0700118 IpAddress addr32 = IpAddress.valueOf(BYTES1);
Jonathan Hart70da5122014-10-01 16:37:42 -0700119
Pavlin Radoslavove7b5bd72014-10-27 20:17:24 -0700120 assertTrue(slash31.contains(addr32));
Jonathan Hart70da5122014-10-01 16:37:42 -0700121
122 IpPrefix intf = IpPrefix.valueOf("192.168.10.101/24");
123 IpAddress addr = IpAddress.valueOf("192.168.10.1");
124
125 assertTrue(intf.contains(addr));
Jonathan Hartdbdbdbb2014-10-06 18:35:30 -0700126
127 IpPrefix intf1 = IpPrefix.valueOf("10.0.0.101/24");
128 IpAddress addr1 = IpAddress.valueOf("10.0.0.4");
129
130 assertTrue(intf1.contains(addr1));
Jonathan Hart70da5122014-10-01 16:37:42 -0700131 }
Ayaka Koshibe16698a32014-09-13 22:19:02 -0700132}