blob: 122afaa22b48477ef825dd643d803065ac05a478 [file] [log] [blame]
Rusty Eddy1da61a22015-09-01 00:48:58 +00001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2015-present Open Networking Laboratory
Rusty Eddy1da61a22015-09-01 00:48:58 +00003 *
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 */
16package org.onlab.packet;
17
18import org.junit.Before;
19import org.junit.Test;
20
Luca Pretec8ec4b52016-09-22 16:40:13 -070021import static junit.framework.Assert.assertEquals;
Rusty Eddy1da61a22015-09-01 00:48:58 +000022import static junit.framework.Assert.assertTrue;
23
24/**
25 * Unit tests for IGMP class.
26 */
27public class IGMPTest {
28 private Deserializer<IGMP> deserializer;
29
30 private IGMP igmpQuery;
31 private IGMP igmpMembership;
32
33 private Ip4Address gaddr1;
34 private Ip4Address gaddr2;
35 private Ip4Address saddr1;
36 private Ip4Address saddr2;
37
38 @Before
39 public void setUp() throws Exception {
40 gaddr1 = Ip4Address.valueOf(0xe1010101);
41 gaddr2 = Ip4Address.valueOf(0xe2020202);
42 saddr1 = Ip4Address.valueOf(0x0a010101);
43 saddr2 = Ip4Address.valueOf(0x0b020202);
44
45 deserializer = IGMP.deserializer();
46
47 // Create an IGMP Query object
Luca Pretec8ec4b52016-09-22 16:40:13 -070048 igmpQuery = new IGMP.IGMPv3();
Rusty Eddy1da61a22015-09-01 00:48:58 +000049 igmpQuery.setIgmpType(IGMP.TYPE_IGMPV3_MEMBERSHIP_QUERY);
50 igmpQuery.setMaxRespCode((byte) 0x7f);
51 IGMPQuery q = new IGMPQuery(gaddr1, (byte) 0x7f);
52 q.addSource(saddr1);
53 q.addSource(saddr2);
54 q.setSbit(false);
55 igmpQuery.groups.add(q);
56
57 // Create an IGMP Membership Object
Luca Pretec8ec4b52016-09-22 16:40:13 -070058 igmpMembership = new IGMP.IGMPv3();
Rusty Eddy1da61a22015-09-01 00:48:58 +000059 igmpMembership.setIgmpType(IGMP.TYPE_IGMPV3_MEMBERSHIP_REPORT);
60 IGMPMembership g1 = new IGMPMembership(gaddr1);
61 g1.addSource(saddr1);
62 g1.addSource(saddr2);
63 igmpMembership.groups.add(g1);
64 IGMPMembership g2 = new IGMPMembership(gaddr2);
65 g2.addSource(saddr1);
66 g2.addSource(saddr2);
67 igmpMembership.groups.add(g2);
68 }
69
70 @Test
71 public void testDeserializeBadInput() throws Exception {
72 PacketTestUtils.testDeserializeBadInput(deserializer);
73 }
74
75 @Test
76 public void testDeserializeTruncated() throws Exception {
Jian Li68c4fc42016-01-11 16:07:03 -080077 byte[] bits = igmpQuery.serialize();
Rusty Eddy1da61a22015-09-01 00:48:58 +000078 PacketTestUtils.testDeserializeTruncated(deserializer, bits);
79
80 bits = igmpMembership.serialize();
81 PacketTestUtils.testDeserializeTruncated(deserializer, bits);
82 }
83
84 @Test
85 public void testDeserializeQuery() throws Exception {
Jian Li68c4fc42016-01-11 16:07:03 -080086 byte[] data = igmpQuery.serialize();
Rusty Eddy1da61a22015-09-01 00:48:58 +000087 IGMP igmp = deserializer.deserialize(data, 0, data.length);
88 assertTrue(igmp.equals(igmpQuery));
89 }
90
91 @Test
92 public void testDeserializeMembership() throws Exception {
Jian Li68c4fc42016-01-11 16:07:03 -080093 byte[] data = igmpMembership.serialize();
Rusty Eddy1da61a22015-09-01 00:48:58 +000094 IGMP igmp = deserializer.deserialize(data, 0, data.length);
95 assertTrue(igmp.equals(igmpMembership));
96 }
Jian Li5fc14292015-12-04 11:30:46 -080097
Luca Pretec8ec4b52016-09-22 16:40:13 -070098 @Test
99 public void testIGMPv2() throws Exception {
100 IGMP igmp = new IGMP.IGMPv2();
101 igmp.setIgmpType((byte) 0x11);
102 igmp.setMaxRespCode((byte) 0x64);
103 igmp.addGroup(new IGMPQuery(IpAddress.valueOf(0), 0));
104
105 byte[] data = igmp.serialize();
106 assertEquals("Packet length is not 8 bytes", data.length, IGMP.IGMPv2.HEADER_LENGTH);
107 IGMP deserialized = deserializer.deserialize(data, 0, data.length);
108 assertTrue(igmp.equals(deserialized));
109 }
110
Jian Li5fc14292015-12-04 11:30:46 -0800111 /**
112 * Tests toString.
113 */
114 @Test
115 public void testToStringIgmp() throws Exception {
116 // TODO: add toString unit test
117 }
Rusty Eddy1da61a22015-09-01 00:48:58 +0000118}