blob: e0daa14c756064f981d19434dca44cca0df4dd62 [file] [log] [blame]
Sonal Kasliwalddc3ff22019-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 */
developere400c582020-03-24 19:42:08 +010016package org.opencord.igmpproxy.impl;
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +000017
Ilayda Ozdemir4c5947c2020-05-05 13:14:32 +000018import com.google.common.collect.Maps;
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +000019import org.junit.After;
20import org.junit.Before;
21import org.junit.Test;
Shubham Sharma47f2caf2020-02-18 12:13:40 +000022import org.onlab.junit.TestUtils;
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +000023import org.onlab.packet.Ethernet;
24import org.onosproject.core.CoreServiceAdapter;
25import org.onosproject.net.flow.FlowRuleServiceAdapter;
26import org.onosproject.net.flowobjective.FlowObjectiveServiceAdapter;
27
28import static org.junit.Assert.*;
29
Shubham Sharma47f2caf2020-02-18 12:13:40 +000030/**
31 * Set of tests of the ONOS application component.
32 */
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +000033public class IgmpManagerTest extends IgmpManagerBase {
34
35 private static final int WAIT_TIMEOUT = 1000;
36
37 private IgmpManager igmpManager;
38
Shubham Sharma47f2caf2020-02-18 12:13:40 +000039 private IgmpStatisticsManager igmpStatisticsManager;
40
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +000041 // Set up the IGMP application.
42 @Before
43 public void setUp() {
44 igmpManager = new IgmpManager();
Ilayda Ozdemir4c5947c2020-05-05 13:14:32 +000045 igmpManager.igmpLeadershipService = new TestIgmpLeaderShipService();
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +000046 igmpManager.coreService = new CoreServiceAdapter();
47 igmpManager.mastershipService = new MockMastershipService();
48 igmpManager.flowObjectiveService = new FlowObjectiveServiceAdapter();
49 igmpManager.deviceService = new MockDeviceService();
50 igmpManager.packetService = new MockPacketService();
51 igmpManager.flowRuleService = new FlowRuleServiceAdapter();
52 igmpManager.multicastService = new TestMulticastRouteService();
Matteo Scandolo7482bbe2020-02-12 14:37:09 -080053 igmpManager.sadisService = new MockSadisService();
Shubham Sharma47f2caf2020-02-18 12:13:40 +000054 igmpStatisticsManager = new IgmpStatisticsManager();
55 igmpStatisticsManager.cfgService = new MockCfgService();
56 TestUtils.setField(igmpStatisticsManager, "eventDispatcher", new TestEventDispatcher());
57 igmpStatisticsManager.activate(new MockComponentContext());
58 igmpManager.igmpStatisticsManager = this.igmpStatisticsManager;
Ilayda Ozdemir4c5947c2020-05-05 13:14:32 +000059
60 igmpManager.groupMemberStore = new TestGroupMemberStoreService();
61 StateMachineManager stateMachineManager = new StateMachineManager();
62 stateMachineManager.stateMachineStore = new TestStateMachineStoreService(Maps.newConcurrentMap());
63 stateMachineManager.activate(new MockComponentContext());
64 igmpManager.stateMachineService = stateMachineManager;
65
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +000066 // By default - we send query messages
Ilayda Ozdemir4c5947c2020-05-05 13:14:32 +000067 StateMachineManager.sendQuery = true;
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +000068 }
69
70 // Tear Down the IGMP application.
71 @After
72 public void tearDown() {
73 igmpManager.deactivate();
Ilayda Ozdemir4c5947c2020-05-05 13:14:32 +000074 igmpManager.stateMachineService.clearAllMaps();
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +000075 }
76
77 // Checking the Default value of IGMP_ON_POD_BASIS.
78 @Test
79 public void testIsIgmpOnPodBasisDefaultValue() {
80 igmpManager.networkConfig = new TestNetworkConfigRegistry(false);
81 igmpManager.activate();
82 assertFalse(IgmpManager.isIgmpOnPodBasis());
83 }
84
85
86 // Checking the value of IGMP_ON_POD_BASIS.
87 @Test
88 public void testIsIgmpOnPodBasisTrueValue() {
89 igmpManager.networkConfig = new TestNetworkConfigRegistry(true);
90 igmpManager.activate();
91 assertTrue(IgmpManager.isIgmpOnPodBasis());
92 }
93
94 // Testing the flow of packet when isIgmpOnPodBasis value is false.
95 @Test
96 public void testIgmpOnPodBasisDefaultValue() throws InterruptedException {
97 // We need to count join messages sent on the upstream
Ilayda Ozdemir4c5947c2020-05-05 13:14:32 +000098 StateMachineManager.sendQuery = false;
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +000099
100 igmpManager.networkConfig = new TestNetworkConfigRegistry(false);
101 igmpManager.activate();
102
103 Ethernet firstPacket = IgmpSender.getInstance().buildIgmpV3Join(GROUP_IP, SOURCE_IP_OF_A);
104 Ethernet secondPacket = IgmpSender.getInstance().buildIgmpV3Join(GROUP_IP, SOURCE_IP_OF_B);
105 // Sending first packet and here shouldSendjoin flag will be true
Sonal Kasliwalf11c0672020-03-18 11:11:50 +0000106 sendPacket(firstPacket);
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +0000107 // Emitted packet is stored in list savedPackets
108 assertNotNull(savedPackets);
109 synchronized (savedPackets) {
110 savedPackets.wait(WAIT_TIMEOUT);
111 }
Shubham Sharma47f2caf2020-02-18 12:13:40 +0000112
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +0000113 assertNotNull(savedPackets);
114 assertEquals(1, savedPackets.size());
115 // Sending the second packet with same group ip address
Sonal Kasliwalf11c0672020-03-18 11:11:50 +0000116 sendPacket(secondPacket);
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +0000117 synchronized (savedPackets) {
118 savedPackets.wait(WAIT_TIMEOUT);
119 }
120 // Emitted packet is stored in list savedPackets as shouldSendJoin flag is true
121 assertEquals(2, savedPackets.size());
122 }
123
124 // Testing IGMP_ON_POD_BASIS value by sending two packets.
125 @Test
126 public void testIgmpOnPodBasisTrueValue() throws InterruptedException {
127 // We need to count join messages
Ilayda Ozdemir4c5947c2020-05-05 13:14:32 +0000128 StateMachineManager.sendQuery = false;
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +0000129
130 igmpManager.networkConfig = new TestNetworkConfigRegistry(true);
131 igmpManager.activate();
132
133 Ethernet firstPacket = IgmpSender.getInstance().buildIgmpV3Join(GROUP_IP, SOURCE_IP_OF_A);
134 Ethernet secondPacket = IgmpSender.getInstance().buildIgmpV3Join(GROUP_IP, SOURCE_IP_OF_B);
135 // Sending first packet and here shouldSendjoin flag will be true
Sonal Kasliwalf11c0672020-03-18 11:11:50 +0000136 sendPacket(firstPacket);
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +0000137 // Emitted packet is stored in list savedPackets
138 synchronized (savedPackets) {
Ilayda Ozdemir4c5947c2020-05-05 13:14:32 +0000139 savedPackets.wait(WAIT_TIMEOUT);
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +0000140 }
141 assertNotNull(savedPackets);
142 assertEquals(1, savedPackets.size());
143 // Sending the second packet with same group ip address which will not be emitted
144 // shouldSendJoin flag will be false.
Sonal Kasliwalf11c0672020-03-18 11:11:50 +0000145 sendPacket(secondPacket);
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +0000146 synchronized (savedPackets) {
147 savedPackets.wait(WAIT_TIMEOUT);
148 }
149 assertEquals(1, savedPackets.size());
150 }
Shubham Sharma47f2caf2020-02-18 12:13:40 +0000151
Sonal Kasliwalddc3ff22019-11-18 11:52:49 +0000152}