blob: 03d21fb0d0e676ce9f1ae48f0080b5aa699be80b [file] [log] [blame]
Yixiao Chen68bfab22016-11-11 11:04:10 -05001/**
2 * Copyright 2016-present 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.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);
131 assertTrue("Number of TTPs should be 1",
132 teNode.tunnelTerminationPoints().size() == 1);
133 TeLink teLink = service
134 .teLink(new TeLinkTpGlobalKey(DefaultBuilder
135 .teTopologyKey(), DefaultBuilder.teLink().teLinkKey()));
136 assertNotNull("TeLink should be found", teLink);
137 }
138
139 /**
140 * Checks the right events are received when a network with TE topology is
141 * added and then removed.
142 */
143 @Test
144 public void networkRemoved() {
145 createNetwork();
146 providerService.networkRemoved(TeMgrUtil
147 .toNetworkId(DefaultBuilder.teTopologyKey()));
148 validateEvents(TE_TOPOLOGY_ADDED, NETWORK_ADDED, NETWORK_REMOVED,
149 TE_TOPOLOGY_REMOVED);
150 }
151
152 /**
153 * Validates whether the manager receives the right events.
154 *
155 * @param types a set of types of control message event
156 */
157 protected void validateEvents(Enum... types) {
158 int i = 0;
159 assertEquals("wrong events received", types.length, listener.events.size());
160 for (Event event : listener.events) {
161 assertEquals("incorrect event type", types[i], event.type());
162 i++;
163 }
164 listener.events.clear();
165 }
166
167 private class TestProvider extends AbstractProvider implements TeTopologyProvider {
168 protected TestProvider() {
169 super(PID);
170 }
171 }
172
173 private static class TestListener implements TeTopologyListener {
174 final List<TeTopologyEvent> events = Lists.newArrayList();
175
176 @Override
177 public void event(TeTopologyEvent event) {
178 events.add(event);
179 }
180 }
181
182}