| /** |
| * Copyright 2016-present Open Networking Laboratory |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.onosproject.tetopology.management; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertTrue; |
| import static org.onosproject.net.NetTestTools.injectEventDispatcher; |
| import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.NETWORK_ADDED; |
| import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.NETWORK_REMOVED; |
| import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.TE_TOPOLOGY_ADDED; |
| import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.TE_TOPOLOGY_REMOVED; |
| |
| import java.util.List; |
| |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.onosproject.common.event.impl.TestEventDispatcher; |
| import org.onosproject.event.Event; |
| import org.onosproject.net.provider.AbstractProvider; |
| import org.onosproject.net.provider.ProviderId; |
| import org.onosproject.tetopology.management.api.Network; |
| import org.onosproject.tetopology.management.api.TeTopology; |
| import org.onosproject.tetopology.management.api.TeTopologyEvent; |
| import org.onosproject.tetopology.management.api.TeTopologyListener; |
| import org.onosproject.tetopology.management.api.TeTopologyProvider; |
| import org.onosproject.tetopology.management.api.TeTopologyProviderRegistry; |
| import org.onosproject.tetopology.management.api.TeTopologyProviderService; |
| import org.onosproject.tetopology.management.api.TeTopologyService; |
| import org.onosproject.tetopology.management.api.link.TeLink; |
| import org.onosproject.tetopology.management.api.link.TeLinkTpGlobalKey; |
| import org.onosproject.tetopology.management.api.node.TeNode; |
| import org.onosproject.tetopology.management.api.node.TeNodeKey; |
| import org.onosproject.tetopology.management.impl.TeMgrUtil; |
| import org.onosproject.tetopology.management.impl.TeTopologyManager; |
| |
| import com.google.common.collect.Lists; |
| |
| /** |
| * Test TeTopology service and TeTopologyProvider service. |
| */ |
| public class TeTopologyManagerTest { |
| private static final ProviderId PID = new ProviderId("test", "TeTopologyManagerTest"); |
| |
| private TeTopologyManager mgr; |
| protected TeTopologyService service; |
| protected TeTopologyProviderRegistry registry; |
| protected TeTopologyProviderService providerService; |
| protected TestProvider provider; |
| protected TestListener listener = new TestListener(); |
| |
| @Before |
| public void setUp() { |
| mgr = new TeTopologyManager(); |
| service = mgr; |
| registry = mgr; |
| mgr.store = new SimpleTeTopologyStore(); |
| |
| injectEventDispatcher(mgr, new TestEventDispatcher()); |
| |
| mgr.activateBasics(); |
| service.addListener(listener); |
| |
| provider = new TestProvider(); |
| providerService = registry.register(provider); |
| assertTrue("providerService should not be null", providerService != null); |
| assertTrue("Provider should be registered", |
| registry.getProviders().contains(provider.id())); |
| } |
| |
| @After |
| public void tearDown() { |
| registry.unregister(provider); |
| assertFalse("provider should not be registered", |
| registry.getProviders().contains(provider.id())); |
| service.removeListener(listener); |
| mgr.deactivateBasics(); |
| } |
| |
| private void createNetwork() { |
| Network originNetwork = DefaultBuilder.buildSampleAbstractNetwork(); |
| providerService.networkUpdated(originNetwork); |
| Network network = service |
| .network(TeMgrUtil.toNetworkId(DefaultBuilder.teTopologyKey())); |
| assertNotNull("Network should be found", network); |
| } |
| |
| /** |
| * Checks the right events are received when a network with TE topology is |
| * added. |
| */ |
| @Test |
| public void networkAdded() { |
| createNetwork(); |
| validateEvents(TE_TOPOLOGY_ADDED, NETWORK_ADDED); |
| } |
| |
| /** |
| * Checks the TE topology components are set properly in Manager and Store |
| * when a network is added. |
| */ |
| @Test |
| public void teTopologyVerify() { |
| createNetwork(); |
| TeTopology teTopology = service |
| .teTopology(DefaultBuilder.teTopologyKey()); |
| assertNotNull("TeTopology should be found", teTopology); |
| assertTrue("Number of TE nodes should be 1", |
| teTopology.teNodes().size() == 1); |
| assertTrue("Number of TE links should be 1", |
| teTopology.teLinks().size() == 1); |
| TeNode teNode = service |
| .teNode(new TeNodeKey(DefaultBuilder.teTopologyKey(), |
| DefaultBuilder.teNode().teNodeId())); |
| assertNotNull("TeNode should be found", teNode); |
| assertTrue("Number of TTPs should be 1", |
| teNode.tunnelTerminationPoints().size() == 1); |
| TeLink teLink = service |
| .teLink(new TeLinkTpGlobalKey(DefaultBuilder |
| .teTopologyKey(), DefaultBuilder.teLink().teLinkKey())); |
| assertNotNull("TeLink should be found", teLink); |
| } |
| |
| /** |
| * Checks the right events are received when a network with TE topology is |
| * added and then removed. |
| */ |
| @Test |
| public void networkRemoved() { |
| createNetwork(); |
| providerService.networkRemoved(TeMgrUtil |
| .toNetworkId(DefaultBuilder.teTopologyKey())); |
| validateEvents(TE_TOPOLOGY_ADDED, NETWORK_ADDED, NETWORK_REMOVED, |
| TE_TOPOLOGY_REMOVED); |
| } |
| |
| /** |
| * Validates whether the manager receives the right events. |
| * |
| * @param types a set of types of control message event |
| */ |
| protected void validateEvents(Enum... types) { |
| int i = 0; |
| assertEquals("wrong events received", types.length, listener.events.size()); |
| for (Event event : listener.events) { |
| assertEquals("incorrect event type", types[i], event.type()); |
| i++; |
| } |
| listener.events.clear(); |
| } |
| |
| private class TestProvider extends AbstractProvider implements TeTopologyProvider { |
| protected TestProvider() { |
| super(PID); |
| } |
| } |
| |
| private static class TestListener implements TeTopologyListener { |
| final List<TeTopologyEvent> events = Lists.newArrayList(); |
| |
| @Override |
| public void event(TeTopologyEvent event) { |
| events.add(event); |
| } |
| } |
| |
| } |