blob: d635382944dcfa80a8993346ba18b2733bc7759f [file] [log] [blame]
Charles Chan928ff8b2017-05-04 12:22:54 -07001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2017-present Open Networking Foundation
Charles Chan928ff8b2017-05-04 12:22:54 -07003 *
4 * 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
7 *
8 * 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.
15 */
16
17package org.onlab.packet;
18
19import org.junit.Test;
20
21import static org.junit.Assert.*;
22
23/**
24 * Tests for class {@link MacAddress}.
25 */
26public class MacAddressTest {
27 private static final MacAddress MAC_NORMAL = MacAddress.valueOf("00:00:00:00:00:01");
28 private static final MacAddress MAC_BCAST = MacAddress.valueOf("ff:ff:ff:ff:ff:ff");
29 private static final MacAddress MAC_MCAST = MacAddress.valueOf("01:00:5e:00:00:00");
30 private static final MacAddress MAC_MCAST_2 = MacAddress.valueOf("01:00:0c:cc:cc:cc");
31 private static final MacAddress MAC_LLDP = MacAddress.valueOf("01:80:c2:00:00:00");
32 private static final MacAddress MAC_LLDP_2 = MacAddress.valueOf("01:80:c2:00:00:03");
33 private static final MacAddress MAC_LLDP_3 = MacAddress.valueOf("01:80:c2:00:00:0e");
34 private static final MacAddress MAC_ONOS = MacAddress.valueOf("a4:23:05:01:02:03");
35 private static final MacAddress MAC_ONOS_EQUAL = MacAddress.valueOf("a4:23:05:01:02:03");
36
37 private static final byte[] OUI_ONOS = {(byte) 0xa4, (byte) 0x23, (byte) 0x05};
38 private static final byte[] MAC_ONOS_BYTE = {
39 (byte) 0xa4, (byte) 0x23, (byte) 0x05, (byte) 0x01, (byte) 0x02, (byte) 0x03
40 };
41 private static final long MAC_ONOS_LONG = 180470314762755L;
42 private static final String MAC_ONOS_STR = "A4:23:05:01:02:03";
43 private static final String MAC_ONOS_STR_NO_COLON = "A42305010203";
44
45 private static final int LENGTH = 6;
46
47 private static final String INVALID_STR = "invalid";
48 private static final byte[] INVALID_BYTE = {(byte) 0xaa};
Dominika Molenda52cc3a92017-06-19 17:08:35 +020049 private static final String INVALID_MAC_ADDITIONAL_COLON = "00:00:00:00:00:00:";
50 private static final String INVALID_MAC_OCTET_TOO_LONG = "000:000:000:000:000:00";
51 private static final String INVALID_MAC_OCTET_TOO_SHORT = "00:0:00:00:00:00";
52
Charles Chan928ff8b2017-05-04 12:22:54 -070053
54 @Test
55 public void testValueOfString() throws Exception {
56 assertArrayEquals(MAC_ONOS_BYTE, MacAddress.valueOf(MAC_ONOS_STR).toBytes());
57 }
58
59 @Test(expected = IllegalArgumentException.class)
60 public void testValueOfInvalidString() throws Exception {
61 MacAddress.valueOf(INVALID_STR);
62 }
63
Dominika Molenda52cc3a92017-06-19 17:08:35 +020064 @Test(expected = IllegalArgumentException.class)
65 public void testValueOfInvalidStringWithAdditionalColon() throws Exception {
66 MacAddress.valueOf(INVALID_MAC_ADDITIONAL_COLON);
67 }
68
69 @Test(expected = IllegalArgumentException.class)
70 public void testValueOfInvalidStringWithTooLongOctet() throws Exception {
71 MacAddress.valueOf(INVALID_MAC_OCTET_TOO_LONG);
72 }
73
74 @Test(expected = IllegalArgumentException.class)
75 public void testValueOfInvalidStringWithTooShortOctet() throws Exception {
76 MacAddress.valueOf(INVALID_MAC_OCTET_TOO_SHORT);
77 }
78
Charles Chan928ff8b2017-05-04 12:22:54 -070079 @Test
80 public void testValueOfByte() throws Exception {
81 assertArrayEquals(MAC_ONOS_BYTE, MacAddress.valueOf(MAC_ONOS_BYTE).toBytes());
82 }
83
84 @Test(expected = IllegalArgumentException.class)
85 public void testValueOfInvalidByte() throws Exception {
86 MacAddress.valueOf(INVALID_BYTE);
87 }
88
89 @Test
90 public void testValueOfLong() throws Exception {
91 assertArrayEquals(MAC_ONOS_BYTE, MacAddress.valueOf(MAC_ONOS_LONG).toBytes());
92 }
93
94 @Test
95 public void testLength() throws Exception {
96 assertEquals(LENGTH, MAC_NORMAL.length());
97 }
98
99 @Test
100 public void testToBytes() throws Exception {
101 assertArrayEquals(MAC_ONOS_BYTE, MAC_ONOS.toBytes());
102 }
103
104 @Test
105 public void testToLong() throws Exception {
106 assertEquals(MAC_ONOS_LONG, MAC_ONOS.toLong());
107 }
108
109 @Test
110 public void testIsBroadcast() throws Exception {
111 assertFalse(MAC_NORMAL.isBroadcast());
112 assertTrue(MAC_BCAST.isBroadcast());
113 assertFalse(MAC_MCAST.isBroadcast());
114 assertFalse(MAC_MCAST_2.isBroadcast());
115 assertFalse(MAC_LLDP.isBroadcast());
116 assertFalse(MAC_LLDP_2.isBroadcast());
117 assertFalse(MAC_LLDP_3.isBroadcast());
118 assertFalse(MAC_ONOS.isBroadcast());
119 }
120
121 @Test
122 public void testIsMulticast() throws Exception {
123 // Note: LLDP MACs are also a multicast MACs
124 assertFalse(MAC_NORMAL.isMulticast());
125 assertFalse(MAC_BCAST.isMulticast());
126 assertTrue(MAC_MCAST.isMulticast());
127 assertTrue(MAC_MCAST_2.isMulticast());
128 assertTrue(MAC_LLDP.isMulticast());
129 assertTrue(MAC_LLDP_2.isMulticast());
130 assertTrue(MAC_LLDP_3.isMulticast());
131 assertFalse(MAC_ONOS.isMulticast());
132 }
133
134 @Test
135 @Deprecated
136 public void testIsLinkLocal() throws Exception {
137 assertFalse(MAC_NORMAL.isLinkLocal());
138 assertFalse(MAC_BCAST.isLinkLocal());
139 assertFalse(MAC_MCAST.isLinkLocal());
140 assertFalse(MAC_MCAST_2.isLinkLocal());
141 assertTrue(MAC_LLDP.isLinkLocal());
142 assertTrue(MAC_LLDP_2.isLinkLocal());
143 assertTrue(MAC_LLDP_3.isLinkLocal());
144 assertFalse(MAC_ONOS.isLinkLocal());
145 }
146
147
148 @Test
149 public void testIsLldp() throws Exception {
150 assertFalse(MAC_NORMAL.isLldp());
151 assertFalse(MAC_BCAST.isLldp());
152 assertFalse(MAC_MCAST.isLldp());
153 assertFalse(MAC_MCAST_2.isLldp());
154 assertTrue(MAC_LLDP.isLldp());
155 assertTrue(MAC_LLDP_2.isLldp());
156 assertTrue(MAC_LLDP_3.isLldp());
157 assertFalse(MAC_ONOS.isLldp());
158 }
159
160 @Test
161 public void testIsOnos() throws Exception {
162 assertFalse(MAC_NORMAL.isOnos());
163 assertFalse(MAC_BCAST.isOnos());
164 assertFalse(MAC_MCAST.isOnos());
165 assertFalse(MAC_MCAST_2.isOnos());
166 assertFalse(MAC_LLDP.isOnos());
167 assertFalse(MAC_LLDP_2.isOnos());
168 assertFalse(MAC_LLDP_3.isOnos());
169 assertTrue(MAC_ONOS.isOnos());
170 }
171
172 @Test
173 public void testOui() throws Exception {
174 assertArrayEquals(MAC_ONOS.oui(), OUI_ONOS);
175 }
176
177 @Test
178 public void testEquals() throws Exception {
179 assertTrue(MAC_ONOS.equals(MAC_ONOS));
180 assertFalse(MAC_ONOS.equals(MAC_ONOS_STR));
181 assertTrue(MAC_ONOS.equals(MAC_ONOS_EQUAL));
182 assertFalse(MAC_ONOS.equals(MAC_NORMAL));
183 assertFalse(MAC_ONOS.equals(MAC_BCAST));
184 assertFalse(MAC_ONOS.equals(MAC_MCAST));
185 assertFalse(MAC_ONOS.equals(MAC_MCAST_2));
186 assertFalse(MAC_ONOS.equals(MAC_LLDP));
187 assertFalse(MAC_ONOS.equals(MAC_LLDP_2));
188 assertFalse(MAC_ONOS.equals(MAC_LLDP_3));
189 }
190
191 @Test
192 public void testHashCode() throws Exception {
193 assertEquals(Long.hashCode(MAC_ONOS_LONG), MAC_ONOS.hashCode());
194 }
195
196 @Test
197 public void testToString() throws Exception {
198 assertEquals(MAC_ONOS_STR, MAC_ONOS.toString());
199 }
200
201 @Test
202 public void testToStringNoColon() throws Exception {
203 assertEquals(MAC_ONOS_STR_NO_COLON, MAC_ONOS.toStringNoColon());
204 }
205
206}