blob: 770b2c9b7372a5878fcfee86627f6c8aa9cb4df7 [file] [log] [blame]
Yixiao Chen68bfab22016-11-11 11:04:10 -05001/**
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
Yixiao Chen68bfab22016-11-11 11:04:10 -05003 *
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.tetopology.management;
17
18import static org.junit.Assert.assertEquals;
19import static org.junit.Assert.assertFalse;
20import static org.junit.Assert.assertNotNull;
21import static org.junit.Assert.assertTrue;
22import static org.onosproject.net.NetTestTools.injectEventDispatcher;
23import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.NETWORK_ADDED;
24import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.NETWORK_REMOVED;
25import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.TE_TOPOLOGY_ADDED;
26import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.TE_TOPOLOGY_REMOVED;
27
28import java.util.List;
29
30import org.junit.After;
31import org.junit.Before;
32import org.junit.Test;
33import org.onosproject.common.event.impl.TestEventDispatcher;
34import org.onosproject.event.Event;
35import org.onosproject.net.provider.AbstractProvider;
36import org.onosproject.net.provider.ProviderId;
37import org.onosproject.tetopology.management.api.Network;
38import org.onosproject.tetopology.management.api.TeTopology;
39import org.onosproject.tetopology.management.api.TeTopologyEvent;
40import org.onosproject.tetopology.management.api.TeTopologyListener;
41import org.onosproject.tetopology.management.api.TeTopologyProvider;
42import org.onosproject.tetopology.management.api.TeTopologyProviderRegistry;
43import org.onosproject.tetopology.management.api.TeTopologyProviderService;
44import org.onosproject.tetopology.management.api.TeTopologyService;
45import org.onosproject.tetopology.management.api.link.TeLink;
46import org.onosproject.tetopology.management.api.link.TeLinkTpGlobalKey;
47import org.onosproject.tetopology.management.api.node.TeNode;
48import org.onosproject.tetopology.management.api.node.TeNodeKey;
49import org.onosproject.tetopology.management.impl.TeMgrUtil;
50import org.onosproject.tetopology.management.impl.TeTopologyManager;
51
52import com.google.common.collect.Lists;
53
54/**
55 * Test TeTopology service and TeTopologyProvider service.
56 */
57public class TeTopologyManagerTest {
58 private static final ProviderId PID = new ProviderId("test", "TeTopologyManagerTest");
59
60 private TeTopologyManager mgr;
61 protected TeTopologyService service;
62 protected TeTopologyProviderRegistry registry;
63 protected TeTopologyProviderService providerService;
64 protected TestProvider provider;
65 protected TestListener listener = new TestListener();
66
67 @Before
68 public void setUp() {
69 mgr = new TeTopologyManager();
70 service = mgr;
71 registry = mgr;
72 mgr.store = new SimpleTeTopologyStore();
73
74 injectEventDispatcher(mgr, new TestEventDispatcher());
75
76 mgr.activateBasics();
77 service.addListener(listener);
78
79 provider = new TestProvider();
80 providerService = registry.register(provider);
81 assertTrue("providerService should not be null", providerService != null);
82 assertTrue("Provider should be registered",
83 registry.getProviders().contains(provider.id()));
84 }
85
86 @After
87 public void tearDown() {
88 registry.unregister(provider);
89 assertFalse("provider should not be registered",
90 registry.getProviders().contains(provider.id()));
91 service.removeListener(listener);
92 mgr.deactivateBasics();
93 }
94
95 private void createNetwork() {
96 Network originNetwork = DefaultBuilder.buildSampleAbstractNetwork();
97 providerService.networkUpdated(originNetwork);
98 Network network = service
99 .network(TeMgrUtil.toNetworkId(DefaultBuilder.teTopologyKey()));
100 assertNotNull("Network should be found", network);
101 }
102
103 /**
104 * Checks the right events are received when a network with TE topology is
105 * added.
106 */
107 @Test
108 public void networkAdded() {
109 createNetwork();
110 validateEvents(TE_TOPOLOGY_ADDED, NETWORK_ADDED);
111 }
112
113 /**
114 * Checks the TE topology components are set properly in Manager and Store
115 * when a network is added.
116 */
117 @Test
118 public void teTopologyVerify() {
119 createNetwork();
120 TeTopology teTopology = service
121 .teTopology(DefaultBuilder.teTopologyKey());
122 assertNotNull("TeTopology should be found", teTopology);
123 assertTrue("Number of TE nodes should be 1",
124 teTopology.teNodes().size() == 1);
125 assertTrue("Number of TE links should be 1",
126 teTopology.teLinks().size() == 1);
127 TeNode teNode = service
128 .teNode(new TeNodeKey(DefaultBuilder.teTopologyKey(),
129 DefaultBuilder.teNode().teNodeId()));
130 assertNotNull("TeNode should be found", teNode);
Yixiao Chen265b3bb2017-01-13 10:17:03 -0500131 assertTrue("TE node should be identical", teNode.equals(DefaultBuilder.teNode()));
Yixiao Chen68bfab22016-11-11 11:04:10 -0500132 assertTrue("Number of TTPs should be 1",
133 teNode.tunnelTerminationPoints().size() == 1);
134 TeLink teLink = service
135 .teLink(new TeLinkTpGlobalKey(DefaultBuilder
136 .teTopologyKey(), DefaultBuilder.teLink().teLinkKey()));
137 assertNotNull("TeLink should be found", teLink);
138 }
139
140 /**
141 * Checks the right events are received when a network with TE topology is
142 * added and then removed.
143 */
144 @Test
145 public void networkRemoved() {
146 createNetwork();
147 providerService.networkRemoved(TeMgrUtil
148 .toNetworkId(DefaultBuilder.teTopologyKey()));
149 validateEvents(TE_TOPOLOGY_ADDED, NETWORK_ADDED, NETWORK_REMOVED,
150 TE_TOPOLOGY_REMOVED);
151 }
152
153 /**
154 * Validates whether the manager receives the right events.
155 *
156 * @param types a set of types of control message event
157 */
158 protected void validateEvents(Enum... types) {
159 int i = 0;
160 assertEquals("wrong events received", types.length, listener.events.size());
161 for (Event event : listener.events) {
162 assertEquals("incorrect event type", types[i], event.type());
163 i++;
164 }
165 listener.events.clear();
166 }
167
168 private class TestProvider extends AbstractProvider implements TeTopologyProvider {
169 protected TestProvider() {
170 super(PID);
171 }
172 }
173
174 private static class TestListener implements TeTopologyListener {
175 final List<TeTopologyEvent> events = Lists.newArrayList();
176
177 @Override
178 public void event(TeTopologyEvent event) {
179 events.add(event);
180 }
181 }
182
183}