blob: bec9cdeddee4855991bad4fe8db20ee4d2340a30 [file] [log] [blame]
alshabibed0951f2015-10-02 21:39:27 +02001/*
2 * Copyright 2015 Open Networking Laboratory
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.onosproject.incubator.net.mcast.impl;
17
18import com.google.common.collect.Lists;
19import org.junit.After;
20import org.junit.Before;
21import org.junit.Test;
22import org.onlab.junit.TestUtils;
23import org.onlab.packet.IpPrefix;
24import org.onosproject.common.event.impl.TestEventDispatcher;
25import org.onosproject.core.ApplicationId;
Thomas Vachuskac65dd712015-11-04 17:19:10 -080026import org.onosproject.core.CoreServiceAdapter;
alshabibed0951f2015-10-02 21:39:27 +020027import org.onosproject.core.DefaultApplicationId;
alshabibed0951f2015-10-02 21:39:27 +020028import org.onosproject.net.ConnectPoint;
29import org.onosproject.net.PortNumber;
30import org.onosproject.net.mcast.McastEvent;
31import org.onosproject.net.mcast.McastListener;
32import org.onosproject.net.mcast.McastRoute;
33import org.onosproject.store.service.TestStorageService;
34
35import java.util.List;
alshabibed0951f2015-10-02 21:39:27 +020036
37import static junit.framework.Assert.fail;
38import static junit.framework.TestCase.assertEquals;
39import static org.onosproject.net.NetTestTools.did;
40import static org.onosproject.net.NetTestTools.injectEventDispatcher;
41
42/**
43 * Tests for the multicast RIB.
44 */
45public class MulticastRouteManagerTest {
46
47 McastRoute r1 = new McastRoute(IpPrefix.valueOf("1.1.1.1/8"),
Thomas Vachuskac65dd712015-11-04 17:19:10 -080048 IpPrefix.valueOf("1.1.1.2/8"),
49 McastRoute.Type.IGMP);
alshabibed0951f2015-10-02 21:39:27 +020050
51 McastRoute r11 = new McastRoute(IpPrefix.valueOf("1.1.1.1/8"),
Thomas Vachuskac65dd712015-11-04 17:19:10 -080052 IpPrefix.valueOf("1.1.1.2/8"),
53 McastRoute.Type.STATIC);
alshabibed0951f2015-10-02 21:39:27 +020054
55 McastRoute r2 = new McastRoute(IpPrefix.valueOf("2.2.2.1/8"),
Thomas Vachuskac65dd712015-11-04 17:19:10 -080056 IpPrefix.valueOf("2.2.2.2/8"),
57 McastRoute.Type.PIM);
alshabibed0951f2015-10-02 21:39:27 +020058
59 ConnectPoint cp1 = new ConnectPoint(did("1"), PortNumber.portNumber(1));
60
61 ConnectPoint cp2 = new ConnectPoint(did("2"), PortNumber.portNumber(2));
62
63 private TestMulticastListener listener = new TestMulticastListener();
64
65 private MulticastRouteManager manager;
66
67 private List<McastEvent> events;
68
69 @Before
70 public void setUp() throws Exception {
71 manager = new MulticastRouteManager();
72 injectEventDispatcher(manager, new TestEventDispatcher());
73 TestUtils.setField(manager, "storageService", new TestStorageService());
74 TestUtils.setField(manager, "coreService", new TestCoreService());
Thomas Vachuskac65dd712015-11-04 17:19:10 -080075 events = Lists.newArrayList();
alshabibed0951f2015-10-02 21:39:27 +020076 manager.activate();
77 manager.addListener(listener);
78 }
79
80 @After
81 public void tearDown() {
82 manager.removeListener(listener);
83 manager.deactivate();
84 }
85
86 @Test
87 public void testAdd() {
88 manager.add(r1);
89
90 assertEquals("Add failed", manager.mcastRoutes.size(), 1);
91 validateEvents(McastEvent.Type.ROUTE_ADDED);
92 }
93
94 @Test
95 public void testRemove() {
96 manager.add(r1);
97
98 manager.remove(r1);
99
100 assertEquals("Remove failed", manager.mcastRoutes.size(), 0);
101 validateEvents(McastEvent.Type.ROUTE_ADDED, McastEvent.Type.ROUTE_REMOVED);
102 }
103
104 @Test
105 public void testAddSource() {
106 manager.add(r1);
107
108 manager.addSource(r1, cp1);
109
110 validateEvents(McastEvent.Type.ROUTE_ADDED, McastEvent.Type.SOURCE_ADDED);
111 assertEquals("Route is not equal", cp1, manager.fetchSource(r1));
112 }
113
114 @Test
115 public void testAddSink() {
116 manager.add(r1);
117
118 manager.addSource(r1, cp1);
119 manager.addSink(r1, cp1);
120
121 validateEvents(McastEvent.Type.ROUTE_ADDED,
122 McastEvent.Type.SOURCE_ADDED,
123 McastEvent.Type.SINK_ADDED);
124 assertEquals("Route is not equal", Lists.newArrayList(cp1), manager.fetchSinks(r1));
125 }
126
127 @Test
128 public void testRemoveSink() {
129 manager.add(r1);
130
131 manager.addSource(r1, cp1);
132 manager.addSink(r1, cp1);
133 manager.addSink(r1, cp2);
134 manager.removeSink(r1, cp2);
135
136 validateEvents(McastEvent.Type.ROUTE_ADDED,
137 McastEvent.Type.SOURCE_ADDED,
138 McastEvent.Type.SINK_ADDED,
139 McastEvent.Type.SINK_ADDED,
140 McastEvent.Type.SINK_REMOVED);
141 assertEquals("Route is not equal", Lists.newArrayList(cp1), manager.fetchSinks(r1));
142 }
143
144 private void validateEvents(McastEvent.Type... evs) {
145 if (events.size() != evs.length) {
146 fail(String.format("Mismatch number of events# obtained -> %s : expected %s",
147 events, evs));
148 }
149
150 for (int i = 0; i < evs.length; i++) {
151 if (evs[i] != events.get(i).type()) {
Thomas Vachuskac65dd712015-11-04 17:19:10 -0800152 fail(String.format("Mismatched events# obtained -> %s : expected %s",
alshabibed0951f2015-10-02 21:39:27 +0200153 events, evs));
154 }
155 }
156 }
157
158 class TestMulticastListener implements McastListener {
alshabibed0951f2015-10-02 21:39:27 +0200159 @Override
160 public void event(McastEvent event) {
161 events.add(event);
162 }
163 }
164
Thomas Vachuskac65dd712015-11-04 17:19:10 -0800165 private class TestCoreService extends CoreServiceAdapter {
alshabibed0951f2015-10-02 21:39:27 +0200166 @Override
Thomas Vachuskac65dd712015-11-04 17:19:10 -0800167 public ApplicationId registerApplication(String name) {
168 return new DefaultApplicationId(0, name);
alshabibed0951f2015-10-02 21:39:27 +0200169 }
170 }
171}