X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=networkmodel%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fnetworkmodel%2FNetConfTopologyListenerTest.java;h=7dbc8601d6ce8e52defce5061f43d86c6aa101b4;hb=6bc844fe96e1bd2ae991f5a1b2ad3f7446f87f10;hp=4dd5446fe71011ffe92440fa2134c4c32897e219;hpb=a975e0809149873daeb830ebbbe82baa9e47d98b;p=transportpce.git diff --git a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetConfTopologyListenerTest.java b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetConfTopologyListenerTest.java index 4dd5446fe..7dbc8601d 100644 --- a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetConfTopologyListenerTest.java +++ b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetConfTopologyListenerTest.java @@ -8,173 +8,192 @@ package org.opendaylight.transportpce.networkmodel; +import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.opendaylight.transportpce.common.StringConstants.OPENROADM_DEVICE_VERSION_1_2_1; import static org.opendaylight.transportpce.common.StringConstants.OPENROADM_DEVICE_VERSION_2_2_1; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; -import org.junit.Before; -import org.junit.Test; +import java.util.Map; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.DataObjectModification; import org.opendaylight.mdsal.binding.api.DataTreeModification; -import org.opendaylight.mdsal.binding.api.MountPoint; -import org.opendaylight.mdsal.binding.api.MountPointService; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; -import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl; -import org.opendaylight.transportpce.common.mapping.MappingUtils; -import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl; import org.opendaylight.transportpce.common.mapping.PortMapping; -import org.opendaylight.transportpce.common.mapping.PortMappingImpl; -import org.opendaylight.transportpce.common.mapping.PortMappingVersion121; -import org.opendaylight.transportpce.common.mapping.PortMappingVersion221; -import org.opendaylight.transportpce.common.mapping.PortMappingVersion710; -import org.opendaylight.transportpce.common.network.NetworkTransactionImpl; -import org.opendaylight.transportpce.common.network.NetworkTransactionService; -import org.opendaylight.transportpce.common.network.RequestProcessor; -import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl; -import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl121; -import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl221; -import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl710; +import org.opendaylight.transportpce.networkmodel.dto.NodeRegistration; import org.opendaylight.transportpce.networkmodel.service.NetworkModelService; -import org.opendaylight.transportpce.test.DataStoreContextImpl; -import org.opendaylight.transportpce.test.stub.MountPointServiceStub; -import org.opendaylight.transportpce.test.stub.MountPointStub; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Host; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilities; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilitiesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapabilityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPasswordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.ConnectionOper.ConnectionStatus; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.connection.oper.AvailableCapabilities; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.connection.oper.AvailableCapabilitiesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.connection.oper.available.capabilities.AvailableCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.connection.oper.available.capabilities.AvailableCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.credentials.credentials.LoginPasswordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.NetconfNode; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.NetconfNodeBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint32; +@ExtendWith(MockitoExtension.class) public class NetConfTopologyListenerTest { - @Before - public void setUp() { + @Mock + private NetworkModelService networkModelService; + @Mock + private DataBroker dataBroker; + @Mock + private DeviceTransactionManager deviceTransactionManager; + @Mock + private PortMapping portMapping; + @Mock + private Map registrations; + @Test + void testOnDataTreeChangedWhenDeleteNode() { + @SuppressWarnings("unchecked") final DataObjectModification node = mock(DataObjectModification.class); + final Collection> changes = new HashSet<>(); + @SuppressWarnings("unchecked") final DataTreeModification ch = mock(DataTreeModification.class); + final NodeRegistration nodeRegistration = mock(NodeRegistration.class); + changes.add(ch); + when(ch.getRootNode()).thenReturn(node); + + final Node netconfNode = getNetconfNode("netconfNode1", ConnectionStatus.Connecting, + OPENROADM_DEVICE_VERSION_2_2_1); + when(node.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE); + when(node.getDataBefore()).thenReturn(netconfNode); + + NetConfTopologyListener listener = new NetConfTopologyListener(networkModelService, dataBroker, + deviceTransactionManager, portMapping, registrations); + listener.onDataTreeChanged(changes); + verify(ch, times(1)).getRootNode(); + verify(node, times(1)).getModificationType(); + verify(node, times(3)).getDataBefore(); + verify(networkModelService, times(1)).deleteOpenRoadmnode(anyString()); + verify(nodeRegistration, times(0)).unregisterListeners(); } @Test - public void testOnDataTreeChanged() { - - @SuppressWarnings("unchecked") final DataObjectModification newNode = mock(DataObjectModification.class); - when(newNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE); + void testOnDataTreeChangedWhenAddNode() { + @SuppressWarnings("unchecked") final DataObjectModification node = mock(DataObjectModification.class); final Collection> changes = new HashSet<>(); @SuppressWarnings("unchecked") final DataTreeModification ch = mock(DataTreeModification.class); changes.add(ch); - when(ch.getRootNode()).thenReturn(newNode); - - DataStoreContextImpl dataStoreContext = new DataStoreContextImpl(); - DataBroker dataBroker = dataStoreContext.getDataBroker(); - RequestProcessor requestProcessor = new RequestProcessor(dataBroker); - NetworkTransactionService networkTransactionService = new NetworkTransactionImpl(requestProcessor); - MountPoint mountPoint = new MountPointStub(dataBroker); - MountPointService mountPointService = new MountPointServiceStub(mountPoint); - DeviceTransactionManager deviceTransactionManager = - new DeviceTransactionManagerImpl(mountPointService, 3000); - R2RLinkDiscovery linkDiskovery = new R2RLinkDiscovery( - dataBroker, deviceTransactionManager, networkTransactionService); - OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = - new OpenRoadmInterfacesImpl121(deviceTransactionManager); - OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = - new OpenRoadmInterfacesImpl221(deviceTransactionManager); - OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = - new OpenRoadmInterfacesImpl710(deviceTransactionManager); - MappingUtils mappingUtils = new MappingUtilsImpl(dataBroker); - OpenRoadmInterfacesImpl openRoadmInterfaces = - new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, - openRoadmInterfacesImpl121, openRoadmInterfacesImpl221, openRoadmInterfacesImpl710); - PortMappingVersion121 p1 = new PortMappingVersion121(dataBroker, deviceTransactionManager, openRoadmInterfaces); - PortMappingVersion221 p2 = new PortMappingVersion221(dataBroker, deviceTransactionManager, openRoadmInterfaces); - PortMappingVersion710 p3 = new PortMappingVersion710(dataBroker, deviceTransactionManager, openRoadmInterfaces); - PortMapping portMapping = new PortMappingImpl(dataBroker,p3, p2, p1); - NetworkModelService networkModelService = mock(NetworkModelService.class); - - //Start Netconf Topology listener and start adding nodes to the Netconf Topology to verify behaviour - NetConfTopologyListener listener = new NetConfTopologyListener(networkModelService, dataBroker, - deviceTransactionManager); + when(ch.getRootNode()).thenReturn(node); - //A new node appears in Netconf Topology, status is Connecting - final Node netconfNode = getNetconfNode("test1", - NetconfNodeConnectionStatus.ConnectionStatus.Connecting, OPENROADM_DEVICE_VERSION_2_2_1); - when(newNode.getDataAfter()).thenReturn(netconfNode); - listener.onDataTreeChanged(changes); - verify(ch).getRootNode(); - verify(newNode, times(3)).getDataAfter(); - verify(newNode, times(2)).getModificationType(); - - //A new node appears in Netconf Topology, status is Connected, version is 121 - final Node netconfNode2 = getNetconfNode("test2", NetconfNodeConnectionStatus.ConnectionStatus.Connected, - OPENROADM_DEVICE_VERSION_1_2_1); - when(newNode.getDataAfter()).thenReturn(netconfNode2); - listener.onDataTreeChanged(changes); - verify(ch, times(2)).getRootNode(); - verify(newNode, times(6)).getDataAfter(); - verify(newNode, times(4)).getModificationType(); - - //A new node appears in Netconf Topology, status is Connected, version is 221 - final Node netconfNode3 = getNetconfNode("test3", NetconfNodeConnectionStatus.ConnectionStatus.Connected, - OPENROADM_DEVICE_VERSION_2_2_1); - when(newNode.getDataAfter()).thenReturn(netconfNode3); + final Node netconfNodeBefore = getNetconfNode("netconfNode1", + ConnectionStatus.Connecting, OPENROADM_DEVICE_VERSION_2_2_1); + final Node netconfNodeAfter = getNetconfNode("netconfNode1", + ConnectionStatus.Connected, OPENROADM_DEVICE_VERSION_2_2_1); + when(node.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE); + when(node.getDataBefore()).thenReturn(netconfNodeBefore); + when(node.getDataAfter()).thenReturn(netconfNodeAfter); + + NetConfTopologyListener listener = new NetConfTopologyListener(networkModelService, dataBroker, + deviceTransactionManager, portMapping); listener.onDataTreeChanged(changes); - verify(ch, times(3)).getRootNode(); - verify(newNode, times(9)).getDataAfter(); - verify(newNode, times(6)).getModificationType(); + verify(ch, times(1)).getRootNode(); + verify(node, times(1)).getModificationType(); + verify(node, times(3)).getDataBefore(); + verify(node, times(1)).getDataAfter(); + verify(networkModelService, times(1)).createOpenRoadmNode(anyString(), anyString()); + } + + @Test + void testOnDataTreeChangedWhenDisconnectingNode() { + @SuppressWarnings("unchecked") final DataObjectModification node = mock(DataObjectModification.class); + final Collection> changes = new HashSet<>(); + @SuppressWarnings("unchecked") final DataTreeModification ch = mock(DataTreeModification.class); + changes.add(ch); + when(ch.getRootNode()).thenReturn(node); - //A new node is deleted from Netconf Topology, Data Before was empty - when(newNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE); - when(newNode.getDataBefore()).thenReturn(netconfNode3); + final Node netconfNodeBefore = getNetconfNode("netconfNode1", + ConnectionStatus.Connected, OPENROADM_DEVICE_VERSION_2_2_1); + final Node netconfNodeAfter = getNetconfNode("netconfNode1", + ConnectionStatus.Connecting, OPENROADM_DEVICE_VERSION_2_2_1); + when(node.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE); + when(node.getDataBefore()).thenReturn(netconfNodeBefore); + when(node.getDataAfter()).thenReturn(netconfNodeAfter); + + NetConfTopologyListener listener = new NetConfTopologyListener(networkModelService, dataBroker, + deviceTransactionManager, portMapping); listener.onDataTreeChanged(changes); - verify(ch, times(4)).getRootNode(); - verify(newNode, times(10)).getDataAfter(); - verify(newNode, times(7)).getModificationType(); + verify(ch, times(1)).getRootNode(); + verify(node, times(1)).getModificationType(); + verify(node, times(3)).getDataBefore(); + verify(node, times(1)).getDataAfter(); + verify(networkModelService, never()).createOpenRoadmNode(anyString(), anyString()); + verify(networkModelService, never()).deleteOpenRoadmnode(anyString()); + } + + @Test + void testOnDataTreeChangedWhenShouldNeverHappen() { + @SuppressWarnings("unchecked") final DataObjectModification node = mock(DataObjectModification.class); + final Collection> changes = new HashSet<>(); + @SuppressWarnings("unchecked") final DataTreeModification ch = mock(DataTreeModification.class); + changes.add(ch); + when(ch.getRootNode()).thenReturn(node); + final Node netconfNodeBefore = getNetconfNode("netconfNode1", + ConnectionStatus.Connected, OPENROADM_DEVICE_VERSION_2_2_1); + when(node.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED); + when(node.getDataBefore()).thenReturn(netconfNodeBefore); + + NetConfTopologyListener listener = new NetConfTopologyListener(networkModelService, dataBroker, + deviceTransactionManager, portMapping); + listener.onDataTreeChanged(changes); + verify(ch, times(1)).getRootNode(); + verify(node, times(2)).getModificationType(); + verify(node, times(3)).getDataBefore(); + verify(node, never()).getDataAfter(); + verify(networkModelService, never()).createOpenRoadmNode(anyString(), anyString()); + verify(networkModelService, never()).deleteOpenRoadmnode(anyString()); } - public Node getNetconfNode(final String nodeId, final NetconfNodeConnectionStatus.ConnectionStatus cs, - final String openRoadmVersion) { + private Node getNetconfNode(final String nodeId, final ConnectionStatus cs, + final String openRoadmVersion) { final List avCapList = new ArrayList<>(); avCapList.add(new AvailableCapabilityBuilder() - .setCapabilityOrigin(AvailableCapability.CapabilityOrigin.UserDefined) - .setCapability(openRoadmVersion) - .build()); - final AvailableCapabilities avCaps = - new AvailableCapabilitiesBuilder().setAvailableCapability(avCapList).build(); + .setCapabilityOrigin(AvailableCapability.CapabilityOrigin.UserDefined) + .setCapability(openRoadmVersion) + .build()); + final AvailableCapabilities avCaps = new AvailableCapabilitiesBuilder().setAvailableCapability(avCapList) + .build(); final NetconfNode netconfNode = new NetconfNodeBuilder() - .setConnectionStatus(cs) - .setAvailableCapabilities(avCaps) - .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1")))) - .setPort(new PortNumber(Uint16.valueOf(9999))) - .setReconnectOnChangedSchema(true) - .setDefaultRequestTimeoutMillis(Uint32.valueOf(1000)) - .setBetweenAttemptsTimeoutMillis(Uint16.valueOf(100)) - .setKeepaliveDelay(Uint32.valueOf(1000)) - .setTcpOnly(true) - .setCredentials(new LoginPasswordBuilder() - .setUsername("testuser") - .setPassword("testpassword") - .build()) - .build(); - final NodeBuilder nn = new NodeBuilder().setNodeId(new NodeId(nodeId)) - .addAugmentation(netconfNode); - return nn.build(); - + .setConnectionStatus(cs) + .setAvailableCapabilities(avCaps) + .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1")))) + .setPort(new PortNumber(Uint16.valueOf(9999))) + .setReconnectOnChangedSchema(true) + .setDefaultRequestTimeoutMillis(Uint32.valueOf(1000)) + .setBetweenAttemptsTimeoutMillis(Uint16.valueOf(100)) + .setKeepaliveDelay(Uint32.valueOf(1000)) + .setTcpOnly(true) + .setCredentials(new LoginPasswordBuilder() + .setUsername("testuser") + .setPassword("testpassword") + .build()) + .build(); + return new NodeBuilder() + .withKey(new NodeKey(new NodeId(nodeId))) + .setNodeId(new NodeId(nodeId)) + .addAugmentation(netconfNode) + .build(); } }