| /* |
| * 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.provider.ospf.topology.impl; |
| |
| import com.fasterxml.jackson.databind.JsonNode; |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.onlab.packet.Ip4Address; |
| import org.onlab.util.Bandwidth; |
| import org.onosproject.net.ConnectPoint; |
| import org.onosproject.net.Device; |
| import org.onosproject.net.DeviceId; |
| import org.onosproject.net.Link; |
| import org.onosproject.net.MastershipRole; |
| import org.onosproject.net.PortNumber; |
| import org.onosproject.net.device.DeviceDescription; |
| import org.onosproject.net.device.DeviceListener; |
| import org.onosproject.net.device.DeviceProvider; |
| import org.onosproject.net.device.DeviceProviderRegistry; |
| import org.onosproject.net.device.DeviceProviderService; |
| import org.onosproject.net.device.DeviceServiceAdapter; |
| import org.onosproject.net.device.PortDescription; |
| import org.onosproject.net.device.PortStatistics; |
| import org.onosproject.net.link.LinkDescription; |
| import org.onosproject.net.link.LinkListener; |
| import org.onosproject.net.link.LinkProvider; |
| import org.onosproject.net.link.LinkProviderRegistry; |
| import org.onosproject.net.link.LinkProviderService; |
| import org.onosproject.net.link.LinkServiceAdapter; |
| import org.onosproject.net.provider.ProviderId; |
| import org.onosproject.ospf.controller.OspfController; |
| import org.onosproject.ospf.controller.OspfDeviceTed; |
| import org.onosproject.ospf.controller.OspfLinkListener; |
| import org.onosproject.ospf.controller.OspfLinkTed; |
| import org.onosproject.ospf.controller.OspfProcess; |
| import org.onosproject.ospf.controller.OspfRouter; |
| import org.onosproject.ospf.controller.OspfRouterListener; |
| import org.onosproject.ospf.controller.impl.OspfDeviceTedImpl; |
| import org.onosproject.ospf.controller.impl.OspfLinkTedImpl; |
| import org.onosproject.ospf.controller.impl.OspfRouterImpl; |
| |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Set; |
| import java.util.concurrent.CopyOnWriteArraySet; |
| |
| import static org.junit.Assert.*; |
| |
| /** |
| * Test cases for OSPF topology provider. |
| */ |
| public class OspfTopologyProviderTest { |
| |
| private final OspfTopologyProvider provider = new OspfTopologyProvider(); |
| private final TestDeviceRegistry nodeRegistry = new TestDeviceRegistry(); |
| private final TestLinkRegistry linkRegistry = new TestLinkRegistry(); |
| private final TestController controller = new TestController(); |
| private final TestLinkService linkService = new TestLinkService(); |
| |
| @Before |
| public void setUp() throws Exception { |
| provider.deviceProviderRegistry = nodeRegistry; |
| provider.linkProviderRegistry = linkRegistry; |
| provider.controller = controller; |
| provider.linkService = linkService; |
| provider.activate(); |
| assertNotNull("provider should be registered", nodeRegistry.provider); |
| assertNotNull("listener should be registered", controller.nodeListener); |
| |
| } |
| |
| @After |
| public void tearDown() throws Exception { |
| provider.deactivate(); |
| assertNull("listener should be removed", controller.nodeListener); |
| provider.controller = null; |
| provider.deviceProviderRegistry = null; |
| } |
| |
| @Test |
| public void triggerProbe() { |
| DeviceId deviceId = DeviceId.deviceId("2.2.2.2"); |
| provider.triggerProbe(deviceId); |
| } |
| |
| @Test |
| public void roleChanged() { |
| DeviceId deviceId = DeviceId.deviceId("2.2.2.2"); |
| provider.roleChanged(deviceId, MastershipRole.MASTER); |
| } |
| |
| @Test |
| public void changePortState() { |
| DeviceId deviceId = DeviceId.deviceId("2.2.2.2"); |
| provider.changePortState(deviceId, PortNumber.portNumber(0), false); |
| } |
| |
| @Test |
| public void isReachable() { |
| DeviceId deviceId = DeviceId.deviceId("1.1.1.1"); |
| provider.isReachable(deviceId); |
| } |
| |
| /* Validate node is added to the device validating URI, RIB should get updated properly */ |
| @Test |
| public void ospfTopologyProviderTestAddDevice1() { |
| int deviceAddCount = 0; |
| OspfRouter ospfRouter = new OspfRouterImpl(); |
| ospfRouter.setDr(false); |
| ospfRouter.setOpaque(false); |
| ospfRouter.setNeighborRouterId(Ip4Address.valueOf("2.2.2.2")); |
| ospfRouter.setInterfaceId(Ip4Address.valueOf("10.10.10.2")); |
| ospfRouter.setAreaIdOfInterface(Ip4Address.valueOf("5.5.5.5")); |
| ospfRouter.setRouterIp(Ip4Address.valueOf("1.1.1.1")); |
| OspfDeviceTed ospfDeviceTed = new OspfDeviceTedImpl(); |
| ospfDeviceTed.setAbr(false); |
| ospfDeviceTed.setAsbr(false); |
| ospfRouter.setDeviceTed(ospfDeviceTed); |
| OspfLinkTed ospfLinkTed = new OspfLinkTedImpl(); |
| ospfLinkTed.setMaximumLink(Bandwidth.bps(10)); |
| ospfLinkTed.setMaxReserved(Bandwidth.bps(20)); |
| ospfLinkTed.setTeMetric(10); |
| OspfRouter ospfRouter1 = new OspfRouterImpl(); |
| ospfRouter1.setDr(true); |
| ospfRouter1.setOpaque(true); |
| ospfRouter1.setNeighborRouterId(Ip4Address.valueOf("2.2.2.2")); |
| ospfRouter1.setInterfaceId(Ip4Address.valueOf("10.10.10.2")); |
| ospfRouter1.setAreaIdOfInterface(Ip4Address.valueOf("5.5.5.5")); |
| ospfRouter1.setRouterIp(Ip4Address.valueOf("1.1.1.1")); |
| OspfDeviceTed ospfDeviceTed1 = new OspfDeviceTedImpl(); |
| ospfDeviceTed1.setAbr(false); |
| ospfDeviceTed1.setAsbr(false); |
| ospfRouter.setDeviceTed(ospfDeviceTed); |
| OspfLinkTed ospfLinkTed1 = new OspfLinkTedImpl(); |
| ospfLinkTed1.setMaximumLink(Bandwidth.bps(10)); |
| ospfLinkTed1.setMaxReserved(Bandwidth.bps(20)); |
| ospfLinkTed1.setTeMetric(10); |
| for (OspfRouterListener l : controller.nodeListener) { |
| l.routerAdded(ospfRouter); |
| |
| deviceAddCount = nodeRegistry.connected.size(); |
| assertTrue(deviceAddCount == 1); |
| l.routerRemoved(ospfRouter); |
| deviceAddCount = nodeRegistry.connected.size(); |
| assertTrue(deviceAddCount == 0); |
| } |
| for (OspfLinkListener l : controller.linkListener) { |
| l.addLink(ospfRouter, ospfLinkTed); |
| l.deleteLink(ospfRouter, ospfLinkTed); |
| |
| } |
| } |
| |
| @Test |
| public void ospfTopologyProviderTestAddDevice2() { |
| int deviceAddCount = 0; |
| OspfRouter ospfRouter = new OspfRouterImpl(); |
| ospfRouter.setDr(true); |
| ospfRouter.setOpaque(true); |
| ospfRouter.setNeighborRouterId(Ip4Address.valueOf("3.3.3.3")); |
| ospfRouter.setInterfaceId(Ip4Address.valueOf("10.10.10.3")); |
| ospfRouter.setAreaIdOfInterface(Ip4Address.valueOf("6.6.6.6")); |
| ospfRouter.setRouterIp(Ip4Address.valueOf("7.7.7.7")); |
| OspfDeviceTed ospfDeviceTed = new OspfDeviceTedImpl(); |
| ospfDeviceTed.setAbr(true); |
| ospfDeviceTed.setAsbr(true); |
| ospfRouter.setDeviceTed(ospfDeviceTed); |
| OspfLinkTed ospfLinkTed = new OspfLinkTedImpl(); |
| ospfLinkTed.setMaximumLink(Bandwidth.bps(30)); |
| ospfLinkTed.setMaxReserved(Bandwidth.bps(40)); |
| ospfLinkTed.setTeMetric(50); |
| for (OspfRouterListener l : controller.nodeListener) { |
| l.routerAdded(ospfRouter); |
| deviceAddCount = nodeRegistry.connected.size(); |
| assertTrue(deviceAddCount == 1); |
| l.routerRemoved(ospfRouter); |
| deviceAddCount = nodeRegistry.connected.size(); |
| assertTrue(deviceAddCount == 0); |
| } |
| } |
| |
| |
| /* Class implement device test registry */ |
| private class TestDeviceRegistry implements DeviceProviderRegistry { |
| DeviceProvider provider; |
| Set<DeviceId> connected = new HashSet<>(); |
| |
| @Override |
| public DeviceProviderService register(DeviceProvider provider) { |
| this.provider = provider; |
| return new TestProviderService(); |
| } |
| |
| @Override |
| public void unregister(DeviceProvider provider) { |
| } |
| |
| @Override |
| public Set<ProviderId> getProviders() { |
| return null; |
| } |
| |
| private class TestProviderService implements DeviceProviderService { |
| |
| @Override |
| public DeviceProvider provider() { |
| return null; |
| } |
| |
| @Override |
| public void deviceConnected(DeviceId deviceId, DeviceDescription deviceDescription) { |
| connected.add(deviceId); |
| } |
| |
| @Override |
| public void deviceDisconnected(DeviceId deviceId) { |
| connected.remove(deviceId); |
| } |
| |
| @Override |
| public void updatePorts(DeviceId deviceId, List<PortDescription> portDescriptions) { |
| // TODO Auto-generated method stub |
| } |
| |
| @Override |
| public void portStatusChanged(DeviceId deviceId, PortDescription portDescription) { |
| // TODO Auto-generated method stub |
| } |
| |
| @Override |
| public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, MastershipRole response) { |
| // TODO Auto-generated method stub |
| } |
| |
| @Override |
| public void updatePortStatistics(DeviceId deviceId, Collection<PortStatistics> portStatistics) { |
| // TODO Auto-generated method stub |
| } |
| } |
| } |
| |
| private class TestDeviceService extends DeviceServiceAdapter { |
| private DeviceListener listener; |
| |
| @Override |
| public void addListener(DeviceListener listener) { |
| this.listener = listener; |
| } |
| |
| @Override |
| public Iterable<Device> getDevices() { |
| return Collections.emptyList(); |
| } |
| } |
| |
| private class TestLinkService extends LinkServiceAdapter { |
| private LinkListener listener; |
| |
| @Override |
| public void addListener(LinkListener listener) { |
| this.listener = listener; |
| } |
| |
| @Override |
| public Iterable<Link> getLinks() { |
| return Collections.emptyList(); |
| } |
| } |
| |
| /* Class implement device test registry */ |
| private class TestLinkRegistry implements LinkProviderRegistry { |
| LinkProvider provider; |
| Set<DeviceId> connected = new HashSet<>(); |
| |
| @Override |
| public LinkProviderService register(LinkProvider provider) { |
| this.provider = provider; |
| return new TestLinkProviderService(); |
| } |
| |
| @Override |
| public void unregister(LinkProvider provider) { |
| } |
| |
| @Override |
| public Set<ProviderId> getProviders() { |
| return null; |
| } |
| |
| private class TestLinkProviderService implements LinkProviderService { |
| @Override |
| public void linkDetected(LinkDescription linkDescription) { |
| } |
| |
| @Override |
| public void linkVanished(LinkDescription linkDescription) { |
| } |
| |
| @Override |
| public void linksVanished(ConnectPoint connectPoint) { |
| } |
| |
| @Override |
| public void linksVanished(DeviceId deviceId) { |
| } |
| |
| @Override |
| public LinkProvider provider() { |
| return null; |
| } |
| } |
| } |
| |
| /* class implement test controller */ |
| private class TestController implements OspfController { |
| protected Set<OspfRouterListener> nodeListener = new CopyOnWriteArraySet<>(); |
| protected Set<OspfLinkListener> linkListener = new CopyOnWriteArraySet<>(); |
| |
| @Override |
| public void addRouterListener(OspfRouterListener nodeListener) { |
| this.nodeListener.add(nodeListener); |
| } |
| |
| @Override |
| public void removeRouterListener(OspfRouterListener nodeListener) { |
| this.nodeListener = null; |
| } |
| |
| @Override |
| public void addLinkListener(OspfLinkListener listener) { |
| this.linkListener.add(listener); |
| } |
| |
| @Override |
| public void removeLinkListener(OspfLinkListener listener) { |
| this.nodeListener = null; |
| } |
| |
| @Override |
| public void updateConfig(JsonNode processesNode) { |
| } |
| |
| |
| @Override |
| public void deleteConfig(List<OspfProcess> processes, String attribute) { |
| } |
| |
| @Override |
| public Set<OspfRouterListener> listener() { |
| return null; |
| } |
| |
| @Override |
| public Set<OspfLinkListener> linkListener() { |
| return null; |
| } |
| |
| @Override |
| public List<OspfProcess> getAllConfiguredProcesses() { |
| return null; |
| } |
| } |
| } |