blob: 21a83fe795321609f9b835fb87d4dec235e3bfcd [file] [log] [blame]
Vignesh Ethirajd1957c92019-11-18 11:52:49 +00001/*
2 * Copyright 2017-present Open Networking Foundation
3 *
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.opencord.igmpproxy;
17
18import org.junit.After;
19import org.junit.Before;
20import org.junit.Test;
21import org.onlab.packet.Ethernet;
22import org.onosproject.core.CoreServiceAdapter;
23import org.onosproject.net.flow.FlowRuleServiceAdapter;
24import org.onosproject.net.flowobjective.FlowObjectiveServiceAdapter;
25
26import static org.junit.Assert.*;
27
28public class IgmpManagerTest extends IgmpManagerBase {
29
30 private static final int WAIT_TIMEOUT = 1000;
31
32 private IgmpManager igmpManager;
33
34 // Set up the IGMP application.
35 @Before
36 public void setUp() {
37 igmpManager = new IgmpManager();
38 igmpManager.coreService = new CoreServiceAdapter();
39 igmpManager.mastershipService = new MockMastershipService();
40 igmpManager.flowObjectiveService = new FlowObjectiveServiceAdapter();
41 igmpManager.deviceService = new MockDeviceService();
42 igmpManager.packetService = new MockPacketService();
43 igmpManager.flowRuleService = new FlowRuleServiceAdapter();
44 igmpManager.multicastService = new TestMulticastRouteService();
Esin Karaman305908c2020-02-24 14:42:52 +000045 igmpManager.sadisService = new MockSadisService();
Vignesh Ethirajd1957c92019-11-18 11:52:49 +000046 // By default - we send query messages
47 SingleStateMachine.sendQuery = true;
48 }
49
50 // Tear Down the IGMP application.
51 @After
52 public void tearDown() {
53 igmpManager.deactivate();
54 IgmpManager.groupMemberMap.clear();
55 StateMachine.clearMap();
56 }
57
58 // Checking the Default value of IGMP_ON_POD_BASIS.
59 @Test
60 public void testIsIgmpOnPodBasisDefaultValue() {
61 igmpManager.networkConfig = new TestNetworkConfigRegistry(false);
62 igmpManager.activate();
63 assertFalse(IgmpManager.isIgmpOnPodBasis());
64 }
65
66
67 // Checking the value of IGMP_ON_POD_BASIS.
68 @Test
69 public void testIsIgmpOnPodBasisTrueValue() {
70 igmpManager.networkConfig = new TestNetworkConfigRegistry(true);
71 igmpManager.activate();
72 assertTrue(IgmpManager.isIgmpOnPodBasis());
73 }
74
75 // Testing the flow of packet when isIgmpOnPodBasis value is false.
76 @Test
77 public void testIgmpOnPodBasisDefaultValue() throws InterruptedException {
78 // We need to count join messages sent on the upstream
79 SingleStateMachine.sendQuery = false;
80
81 igmpManager.networkConfig = new TestNetworkConfigRegistry(false);
82 igmpManager.activate();
83
84 Ethernet firstPacket = IgmpSender.getInstance().buildIgmpV3Join(GROUP_IP, SOURCE_IP_OF_A);
85 Ethernet secondPacket = IgmpSender.getInstance().buildIgmpV3Join(GROUP_IP, SOURCE_IP_OF_B);
86 // Sending first packet and here shouldSendjoin flag will be true
87 sendPacket(firstPacket);
88 // Emitted packet is stored in list savedPackets
89 assertNotNull(savedPackets);
90 synchronized (savedPackets) {
91 savedPackets.wait(WAIT_TIMEOUT);
92 }
93 assertNotNull(savedPackets);
94 assertEquals(1, savedPackets.size());
95 // Sending the second packet with same group ip address
96 sendPacket(secondPacket);
97 synchronized (savedPackets) {
98 savedPackets.wait(WAIT_TIMEOUT);
99 }
100 // Emitted packet is stored in list savedPackets as shouldSendJoin flag is true
101 assertEquals(2, savedPackets.size());
102 }
103
104 // Testing IGMP_ON_POD_BASIS value by sending two packets.
105 @Test
106 public void testIgmpOnPodBasisTrueValue() throws InterruptedException {
107 // We need to count join messages
108 SingleStateMachine.sendQuery = false;
109
110 igmpManager.networkConfig = new TestNetworkConfigRegistry(true);
111 igmpManager.activate();
112
113 Ethernet firstPacket = IgmpSender.getInstance().buildIgmpV3Join(GROUP_IP, SOURCE_IP_OF_A);
114 Ethernet secondPacket = IgmpSender.getInstance().buildIgmpV3Join(GROUP_IP, SOURCE_IP_OF_B);
115 // Sending first packet and here shouldSendjoin flag will be true
116 sendPacket(firstPacket);
117 // Emitted packet is stored in list savedPackets
118 synchronized (savedPackets) {
119 savedPackets.wait(WAIT_TIMEOUT);
120 }
121 assertNotNull(savedPackets);
122 assertEquals(1, savedPackets.size());
123 // Sending the second packet with same group ip address which will not be emitted
124 // shouldSendJoin flag will be false.
125 sendPacket(secondPacket);
126 synchronized (savedPackets) {
127 savedPackets.wait(WAIT_TIMEOUT);
128 }
129 assertEquals(1, savedPackets.size());
130 }
Vignesh Ethirajd1957c92019-11-18 11:52:49 +0000131}