blob: 303db078996fbee05f5ca339e8e6802453676143 [file] [log] [blame]
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +08001/*
Pavlin Radoslavova2626ef2015-02-18 18:33:25 -08002 * Copyright 2014-2015 Open Networking Laboratory
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +08003 *
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 */
Charles M.C. Chanea5aa472015-01-03 13:40:39 +080016package org.onlab.packet.ndp;
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +080017
18import org.junit.BeforeClass;
19import org.junit.Test;
Jonathan Hart2a655752015-04-07 16:46:33 -070020import org.onlab.packet.DeserializationException;
21import org.onlab.packet.Deserializer;
Pavlin Radoslavova2626ef2015-02-18 18:33:25 -080022import org.onlab.packet.MacAddress;
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +080023
24import static org.hamcrest.Matchers.is;
Charles M.C. Chanea5aa472015-01-03 13:40:39 +080025import static org.junit.Assert.assertArrayEquals;
Charles M.C. Chanea5aa472015-01-03 13:40:39 +080026import static org.junit.Assert.assertFalse;
27import static org.junit.Assert.assertThat;
Pavlin Radoslavova2626ef2015-02-18 18:33:25 -080028import static org.junit.Assert.assertTrue;
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +080029
30/**
31 * Tests for class {@link NeighborAdvertisement}.
32 */
33public class NeighborAdvertisementTest {
34 private static final byte[] TARGET_ADDRESS = {
Pavlin Radoslavova2626ef2015-02-18 18:33:25 -080035 (byte) 0x20, (byte) 0x01, (byte) 0x0f, (byte) 0x18,
36 (byte) 0x01, (byte) 0x13, (byte) 0x02, (byte) 0x15,
37 (byte) 0xca, (byte) 0x2a, (byte) 0x14, (byte) 0xff,
38 (byte) 0xfe, (byte) 0x35, (byte) 0x26, (byte) 0xce
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +080039 };
Pavlin Radoslavova2626ef2015-02-18 18:33:25 -080040 private static final MacAddress MAC_ADDRESS =
41 MacAddress.valueOf("11:22:33:44:55:66");
42
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +080043 private static byte[] bytePacket;
44
Jonathan Hart2a655752015-04-07 16:46:33 -070045 private Deserializer<NeighborAdvertisement> deserializer
46 = NeighborAdvertisement.deserializer();
47
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +080048 @BeforeClass
49 public static void setUpBeforeClass() throws Exception {
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +080050 byte[] byteHeader = {
Pavlin Radoslavova2626ef2015-02-18 18:33:25 -080051 (byte) 0xe0, (byte) 0x00, (byte) 0x00, (byte) 0x00,
52 (byte) 0x20, (byte) 0x01, (byte) 0x0f, (byte) 0x18,
53 (byte) 0x01, (byte) 0x13, (byte) 0x02, (byte) 0x15,
54 (byte) 0xca, (byte) 0x2a, (byte) 0x14, (byte) 0xff,
55 (byte) 0xfe, (byte) 0x35, (byte) 0x26, (byte) 0xce,
56 (byte) 0x02, (byte) 0x01, (byte) 0x11, (byte) 0x22,
57 (byte) 0x33, (byte) 0x44, (byte) 0x55, (byte) 0x66
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +080058 };
Pavlin Radoslavova2626ef2015-02-18 18:33:25 -080059 bytePacket = new byte[byteHeader.length];
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +080060 System.arraycopy(byteHeader, 0, bytePacket, 0, byteHeader.length);
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +080061 }
62
63 /**
64 * Tests serialize and setters.
65 */
66 @Test
67 public void testSerialize() {
68 NeighborAdvertisement na = new NeighborAdvertisement();
69 na.setRouterFlag((byte) 1);
70 na.setSolicitedFlag((byte) 1);
71 na.setOverrideFlag((byte) 1);
72 na.setTargetAddress(TARGET_ADDRESS);
Pavlin Radoslavova2626ef2015-02-18 18:33:25 -080073 na.addOption(NeighborDiscoveryOptions.TYPE_TARGET_LL_ADDRESS,
74 MAC_ADDRESS.toBytes());
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +080075
76 assertArrayEquals(na.serialize(), bytePacket);
77 }
78
79 /**
80 * Tests deserialize and getters.
81 */
82 @Test
Jonathan Hart2a655752015-04-07 16:46:33 -070083 public void testDeserialize() throws DeserializationException {
84 NeighborAdvertisement na = deserializer.deserialize(bytePacket, 0, bytePacket.length);
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +080085
86 assertThat(na.getRouterFlag(), is((byte) 1));
87 assertThat(na.getSolicitedFlag(), is((byte) 1));
88 assertThat(na.getOverrideFlag(), is((byte) 1));
89 assertArrayEquals(na.getTargetAddress(), TARGET_ADDRESS);
Pavlin Radoslavova2626ef2015-02-18 18:33:25 -080090
91 // Check the option(s)
92 assertThat(na.getOptions().size(), is(1));
93 NeighborDiscoveryOptions.Option option = na.getOptions().get(0);
94 assertThat(option.type(),
95 is(NeighborDiscoveryOptions.TYPE_TARGET_LL_ADDRESS));
96 assertArrayEquals(option.data(), MAC_ADDRESS.toBytes());
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +080097 }
98
99 /**
100 * Tests comparator.
101 */
102 @Test
103 public void testEqual() {
104 NeighborAdvertisement na1 = new NeighborAdvertisement();
105 na1.setRouterFlag((byte) 1);
106 na1.setSolicitedFlag((byte) 1);
107 na1.setOverrideFlag((byte) 1);
108 na1.setTargetAddress(TARGET_ADDRESS);
Pavlin Radoslavova2626ef2015-02-18 18:33:25 -0800109 na1.addOption(NeighborDiscoveryOptions.TYPE_TARGET_LL_ADDRESS,
110 MAC_ADDRESS.toBytes());
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +0800111
112 NeighborAdvertisement na2 = new NeighborAdvertisement();
113 na2.setRouterFlag((byte) 1);
114 na2.setSolicitedFlag((byte) 1);
115 na2.setOverrideFlag((byte) 0);
116 na2.setTargetAddress(TARGET_ADDRESS);
Pavlin Radoslavova2626ef2015-02-18 18:33:25 -0800117 na2.addOption(NeighborDiscoveryOptions.TYPE_TARGET_LL_ADDRESS,
118 MAC_ADDRESS.toBytes());
Charles M.C. Chan93b7fb02014-12-28 03:59:36 +0800119
120 assertTrue(na1.equals(na1));
121 assertFalse(na1.equals(na2));
122 }
123}