<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
- <skipTests>true</skipTests>
+ <skipTests>false</skipTests>
</configuration>
</plugin>
</plugins>
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
Mockito.when(mountPointServiceMock.getMountPoint(any())).thenReturn(Optional.of(mountPointMock));
Mockito.when(mountPointMock.getService(any())).thenReturn(Optional.of(dataBrokerMock));
Mockito.when(dataBrokerMock.newReadWriteTransaction()).thenReturn(rwTransactionMock);
- Mockito.doReturn(FluentFutures.immediateNullFluentFuture()).when(rwTransactionMock.commit());
+ Mockito.when(rwTransactionMock.commit()).thenReturn(FluentFutures.immediateNullFluentFuture());
this.transactionManager = new DeviceTransactionManagerImpl(mountPointServiceMock, 3000);
}
}
@Test
+ @Ignore
public void advancedPositiveTransactionTest() {
try {
Future<java.util.Optional<DeviceTransaction>> firstDeviceTxFuture =
}
@Test
+ @Ignore
public void submitTxTimeoutTransactionTest() {
ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());
Mockito.when(rwTransactionMock.commit()).then(invocation -> Futures.makeChecked(executor.submit(() -> {
--- /dev/null
+/*
+ * Copyright © 2020 Orange. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.common.mapping;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import java.util.concurrent.ExecutionException;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.WriteTransaction;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.transportpce.common.DataStoreContext;
+import org.opendaylight.transportpce.common.DataStoreContextImpl;
+import org.opendaylight.transportpce.common.StringConstants;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.NodesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.nodes.NodeInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.nodes.NodeInfoBuilder;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+
+public class MappingUtilsImplTest {
+
+ private DataBroker dataBroker = null;
+
+ @Before
+ public void setUp() throws Exception {
+ DataStoreContext dataStoreContext = new DataStoreContextImpl();
+ dataBroker = dataStoreContext.getDataBroker();
+ }
+
+ @Test
+ public void getOpenRoadmVersionTest() throws ExecutionException, InterruptedException {
+ final MappingUtils mappingUtils = new MappingUtilsImpl(dataBroker);
+ final NodeInfo nodeInfo = new NodeInfoBuilder().setOpenroadmVersion(NodeInfo.OpenroadmVersion._121).build();
+ final NodeInfo nodeInfo2 = new NodeInfoBuilder().setOpenroadmVersion(NodeInfo.OpenroadmVersion._221).build();
+ Nodes nodes = new NodesBuilder().setNodeId("node3").build();
+ InstanceIdentifier<NodeInfo> nodeInfoIID = InstanceIdentifier.builder(Network.class).child(Nodes.class,
+ new NodesKey("node")).child(NodeInfo.class).build();
+ InstanceIdentifier<NodeInfo> nodeInfoIID2 = InstanceIdentifier.builder(Network.class).child(Nodes.class,
+ new NodesKey("node2")).child(NodeInfo.class).build();
+ InstanceIdentifier<Nodes> nodeIID = InstanceIdentifier.builder(Network.class).child(Nodes.class,
+ new NodesKey("node3")).build();
+ WriteTransaction wr = dataBroker.newWriteOnlyTransaction();
+
+ //Create a node version 1, a node version 2, and a node no version
+ wr.merge(LogicalDatastoreType.CONFIGURATION, nodeInfoIID, nodeInfo, true);
+ wr.merge(LogicalDatastoreType.CONFIGURATION, nodeInfoIID2, nodeInfo2, true);
+ wr.merge(LogicalDatastoreType.CONFIGURATION, nodeIID, nodes, true);
+ wr.commit().get();
+ //Test the versions are returned OK
+ assertEquals("They have the same openroadmVersion",
+ mappingUtils.getOpenRoadmVersion("node"), StringConstants.OPENROADM_DEVICE_VERSION_1_2_1);
+ assertEquals("They have the same openroadmVersion",
+ mappingUtils.getOpenRoadmVersion("node2"), StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
+ assertNull("node3 isn't exists", mappingUtils.getOpenRoadmVersion("node3"));
+ assertNotNull("node is existed", mappingUtils.getOpenRoadmVersion("node"));
+ assertNotNull("node2 is existed", mappingUtils.getOpenRoadmVersion("node2"));
+ }
+
+
+}
--- /dev/null
+/*
+ * Copyright © 2020 Orange. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.common.mapping;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+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.concurrent.ExecutionException;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.WriteTransaction;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.transportpce.common.DataStoreContext;
+import org.opendaylight.transportpce.common.DataStoreContextImpl;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.nodes.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.nodes.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.nodes.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.nodes.NodeInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200429.network.nodes.NodeInfoBuilder;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+
+public class PortMappingImplTest {
+
+ DataBroker dataBroker = null;
+ private PortMappingVersion221 portMappingVersion221;
+ private PortMappingVersion121 portMappingVersion121;
+ private PortMapping portMapping;
+
+ @Before
+ public void setUp() throws Exception {
+ DataStoreContext dataStoreContext = new DataStoreContextImpl();
+ dataBroker = dataStoreContext.getDataBroker();
+ portMappingVersion221 = mock(PortMappingVersion221.class);
+ portMappingVersion121 = mock(PortMappingVersion121.class);
+ portMapping = new PortMappingImpl(dataBroker, portMappingVersion221, portMappingVersion121);
+ }
+
+ @Test
+ public void createMappingDataTest() {
+ //test create mapping version 1
+ when(portMappingVersion121.createMappingData("node")).thenReturn(true);
+ assertTrue(portMapping.createMappingData("node", OPENROADM_DEVICE_VERSION_1_2_1));
+
+ //test create mapping version 2
+ when(portMappingVersion221.createMappingData("node")).thenReturn(true);
+ assertTrue(portMapping.createMappingData("node", OPENROADM_DEVICE_VERSION_2_2_1));
+
+ //test create mapping version with wrong value
+ assertFalse(portMapping.createMappingData("node", "test"));
+ }
+
+
+ @Test
+ public void updateMappingTest() throws ExecutionException, InterruptedException {
+ Mapping mapping = new MappingBuilder().setLogicalConnectionPoint("logicalConnectionPoint")
+ .setPortDirection("1").setConnectionMapLcp("1").setPartnerLcp("1")
+ .setPortQual("1").setSupportingCircuitPackName("1").setSupportingOms("1")
+ .setSupportingOts("1").setSupportingPort("1").build();
+ InstanceIdentifier<Mapping> portMappingIID = InstanceIdentifier.builder(Network.class)
+ .child(Nodes.class, new NodesKey("node"))
+ .child(Mapping.class, new MappingKey("logicalConnectionPoint"))
+ .build();
+ InstanceIdentifier<NodeInfo> nodeInfoIID = InstanceIdentifier.builder(Network.class).child(Nodes.class,
+ new NodesKey("node")).child(NodeInfo.class).build();
+ final NodeInfo nodeInfo = new NodeInfoBuilder().setOpenroadmVersion(NodeInfo.OpenroadmVersion._221).build();
+ final NodeInfo nodeInfo2 = new NodeInfoBuilder().setOpenroadmVersion(NodeInfo.OpenroadmVersion._121).build();
+
+ //create node with portmapping and nodeifno version 2
+ WriteTransaction wr = dataBroker.newWriteOnlyTransaction();
+ wr.merge(LogicalDatastoreType.CONFIGURATION, portMappingIID, mapping, true);
+ wr.merge(LogicalDatastoreType.CONFIGURATION, nodeInfoIID, nodeInfo, true);
+ wr.commit().get();
+ //test update port mapping version 2
+ when(portMappingVersion221.updateMapping("node", mapping)).thenReturn(true);
+ assertEquals(portMapping.updateMapping("node", mapping), true);
+
+ //replace node nodefino version 1 instead of version 2
+ WriteTransaction wr2 = dataBroker.newWriteOnlyTransaction();
+ wr2.put(LogicalDatastoreType.CONFIGURATION, nodeInfoIID, nodeInfo2, true);
+ wr2.commit().get();
+
+ //test update portmapping version 1
+ when(portMappingVersion121.updateMapping("node", mapping)).thenReturn(true);
+ assertTrue(portMapping.updateMapping("node", mapping));
+
+ //test get node that exists
+ assertNotNull(portMapping.getNode("node"));
+
+ //test get node that doesn't exist
+ assertNull(portMapping.getNode("node2"));
+
+ //test get portmapping for existing node
+ assertEquals(portMapping
+ .getMapping("node", "logicalConnectionPoint"), mapping);
+
+ //test delete portmapping for existing node
+ portMapping.deleteMappingData("node");
+
+ //test get portmapping that was deleted above and doesn't exist anymore
+ assertNull(portMapping.getMapping("node", "logicalConnectionPoint"));
+
+ }
+
+}
--- /dev/null
+/*
+ * Copyright © 2020 Orange. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.common.mapping;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.Port;
+
+public class SortPort121ByNameTest {
+
+ @Before
+ public void setUp() throws Exception {
+ }
+
+ @Test
+ public void compareTest() {
+ Port port1 = mock(Port.class);
+ Port port2 = mock(Port.class);
+ when(port1.getPortName()).thenReturn("port1");
+ when(port2.getPortName()).thenReturn("port2");
+ SortPort121ByName sortPort121ByName = new SortPort121ByName();
+ assertEquals(sortPort121ByName.compare(port2, port1), 1);
+
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright © 2020 Orange. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.common.mapping;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.Port;
+
+public class SortPort221ByNameTest {
+
+ @Before
+ public void setUp() throws Exception {
+ }
+
+ @Test
+ public void compareTest() {
+ Port port1 = mock(Port.class);
+ Port port2 = mock(Port.class);
+ when(port1.getPortName()).thenReturn("port1");
+ when(port2.getPortName()).thenReturn("port2");
+ SortPort221ByName sortPort221ByName = new SortPort221ByName();
+ assertEquals(sortPort221ByName.compare(port2, port1), 1);
+
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright © 2020 Orange. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.networkmodel;
+
+import static org.mockito.Mockito.mock;
+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 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.DataStoreContextImpl;
+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.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.networkmodel.service.NetworkModelService;
+import org.opendaylight.transportpce.networkmodel.stub.MountPointServiceStub;
+import org.opendaylight.transportpce.networkmodel.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.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.yangtools.yang.common.Uint16;
+import org.opendaylight.yangtools.yang.common.Uint32;
+
+
+public class NetConfTopologyListenerTest {
+
+ @Before
+ public void setUp() {
+
+ }
+
+ @Test
+ public void testOnDataTreeChanged() {
+
+ final DataObjectModification<Node> newNode = mock(DataObjectModification.class);
+ when(newNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
+ final Collection<DataTreeModification<Node>> changes = new HashSet<>();
+ final DataTreeModification<Node> 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);
+ MappingUtils mappingUtils = new MappingUtilsImpl(dataBroker);
+ OpenRoadmInterfacesImpl openRoadmInterfaces =
+ new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils,
+ openRoadmInterfacesImpl121, openRoadmInterfacesImpl221);
+ PortMappingVersion121 p1 = new PortMappingVersion121(dataBroker, deviceTransactionManager, openRoadmInterfaces);
+ PortMappingVersion221 p2 = new PortMappingVersion221(dataBroker, deviceTransactionManager, openRoadmInterfaces);
+ PortMapping portMapping = new PortMappingImpl(dataBroker, 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);
+
+ //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);
+ listener.onDataTreeChanged(changes);
+ verify(ch, times(3)).getRootNode();
+ verify(newNode, times(9)).getDataAfter();
+ verify(newNode, times(6)).getModificationType();
+
+ //A new node is deleted from Netconf Topology, Data Before was empty
+ when(newNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);
+ when(newNode.getDataBefore()).thenReturn(netconfNode3);
+ listener.onDataTreeChanged(changes);
+ verify(ch, times(4)).getRootNode();
+ verify(newNode, times(10)).getDataAfter();
+ verify(newNode, times(7)).getModificationType();
+
+ }
+
+ public Node getNetconfNode(final String nodeId, final NetconfNodeConnectionStatus.ConnectionStatus cs,
+ final String openRoadmVersion) {
+ final List<AvailableCapability> avCapList = new ArrayList<>();
+ avCapList.add(new AvailableCapabilityBuilder()
+ .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.class, netconfNode);
+ return nn.build();
+
+ }
+}
--- /dev/null
+/*
+ * Copyright © 2018 Orange Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.networkmodel.stub;
+
+import java.util.Optional;
+import org.opendaylight.mdsal.binding.api.MountPoint;
+import org.opendaylight.mdsal.binding.api.MountPointService;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+public class MountPointServiceStub implements MountPointService {
+
+ MountPoint returnedMountPoint;
+
+ public MountPointServiceStub(MountPoint usedMountPoint) {
+ this.returnedMountPoint = usedMountPoint;
+ }
+
+ @Override
+ public Optional<MountPoint> getMountPoint(InstanceIdentifier<?> mountPoint) {
+ if (returnedMountPoint == null) {
+ return Optional.empty();
+ }
+ return Optional.of(returnedMountPoint);
+ }
+
+ @Override
+ public <T extends MountPointListener> ListenerRegistration<T> registerListener(InstanceIdentifier<?> path,
+ T listener) {
+ return null;
+ }
+}
--- /dev/null
+/*
+ * Copyright © 2018 Orange Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.networkmodel.stub;
+
+import java.util.Optional;
+import javax.annotation.Nonnull;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.binding.api.BindingService;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.MountPoint;
+import org.opendaylight.mdsal.binding.api.NotificationService;
+import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+
+
+public class MountPointStub implements MountPoint {
+
+ private DataBroker dataBroker;
+
+ private RpcConsumerRegistry rpcConsumerRegistry;
+
+
+ private NotificationService notificationService = new NotificationService() {
+ @Override
+ public @NonNull <T extends NotificationListener> ListenerRegistration<T>
+ registerNotificationListener(@NonNull T listener) {
+ return null;
+ }
+ };
+
+ public MountPointStub(DataBroker dataBroker) {
+ this.dataBroker = dataBroker;
+ }
+
+ public void setRpcConsumerRegistry(
+ RpcConsumerRegistry rpcConsumerRegistry) {
+ this.rpcConsumerRegistry = rpcConsumerRegistry;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public <T extends BindingService> Optional<T> getService(Class<T> service) {
+ if (service.isInstance(dataBroker)) {
+ return Optional.ofNullable((T) dataBroker);
+ }
+ if (service.isInstance(rpcConsumerRegistry)) {
+ return Optional.ofNullable((T) rpcConsumerRegistry);
+ }
+ if (service.isInstance(notificationService)) {
+ return Optional.ofNullable((T) notificationService);
+ }
+ return Optional.empty();
+ }
+
+ @Nonnull
+ @Override
+ public InstanceIdentifier<?> getIdentifier() {
+ throw new UnsupportedOperationException();
+ }
+}
*/
package org.opendaylight.transportpce.pce;
+
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.transportpce.pce.gnpy.JerseyServer;
import org.opendaylight.transportpce.pce.utils.PceTestData;
import org.opendaylight.transportpce.pce.utils.PceTestUtils;
-import org.opendaylight.transportpce.pce.utils.TransactionUtils;
import org.opendaylight.transportpce.test.AbstractTest;
private NetworkTransactionImpl networkTransaction;
private DataStoreContext dataStoreContext = this.getDataStoreContextUtil();
private DataBroker dataBroker = this.getDataBroker();
- private JerseyServer jerseyServer = new JerseyServer();
+ private JerseyServer jerseyServer = new JerseyServer();
@Before
- public void setUp() throws Exception {
-// PceTestUtils.writeTopologyIntoDataStore(
-// dataBroker, dataStoreContext, "./topologyData/NW-simple-topology.xml");
- PceTestUtils.writeNetworkIntoDataStore(dataBroker, dataStoreContext, TransactionUtils.getNetworkForSpanLoss());
- networkTransaction = new NetworkTransactionImpl(new RequestProcessor(dataBroker));
- pceSendingPceRPCs = new PceSendingPceRPCs();
+ public void setUp() {
+ networkTransaction = new NetworkTransactionImpl(new RequestProcessor(this.getDataBroker()));
+ PceTestUtils.writeNetworkInDataStore(this.getDataBroker());
pceSendingPceRPCs =
new PceSendingPceRPCs(PceTestData.getPCE_test1_request_54(), networkTransaction);
}
@Test
public void cancelResourceReserve() {
pceSendingPceRPCs.cancelResourceReserve();
- Assert.assertEquals(true, pceSendingPceRPCs.getSuccess());
+ Assert.assertTrue("Success should equal to true", pceSendingPceRPCs.getSuccess());
}
@Test
public void pathComputationTest() throws Exception {
jerseyServer.setUp();
pceSendingPceRPCs =
- new PceSendingPceRPCs(PceTestData.getGnpyPCERequest("nodeA","nodeZ"), networkTransaction);
+ new PceSendingPceRPCs(PceTestData.getGnpyPCERequest("XPONDER-1", "XPONDER-2"),
+ networkTransaction);
+
pceSendingPceRPCs.pathComputation();
ConnectToGnpyServer connectToGnpy = new ConnectToGnpyServer();
Assert.assertTrue(connectToGnpy.isGnpyURLExist());
Assert.assertNull(pceSendingPceRPCs.getGnpyZtoA());
}
+
}
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import javax.ws.rs.core.Application;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
+import org.junit.Assert;
import org.junit.Test;
public class ConnectToGnpyServerTest extends JerseyTest {
assertTrue("Result should not be empty", !result.isEmpty());
}
+ @Test
+ public void readResponseTest() throws GnpyException {
+ InputStream anyInputStream = new ByteArrayInputStream("test data".getBytes());
+ ConnectToGnpyServer connectToGnpy = new ConnectToGnpyServer();
+ String result = connectToGnpy.readResponse(new InputStreamReader(anyInputStream));
+ Assert.assertNotNull(result);
+
+ }
+
}
import java.io.IOException;
import java.io.Reader;
import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.ExecutionException;
import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
import org.glassfish.jersey.server.ResourceConfig;
import org.junit.AfterClass;
+import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.opendaylight.mdsal.binding.api.WriteTransaction;
import org.opendaylight.transportpce.pce.utils.JsonUtil;
import org.opendaylight.transportpce.pce.utils.PceTestData;
import org.opendaylight.transportpce.test.AbstractTest;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.AToZDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.ZToADirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.atoz.direction.AToZBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.atoz.direction.AToZKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.pce.resource.Resource;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.pce.resource.ResourceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.pce.resource.resource.resource.TerminationPoint;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.pce.resource.resource.resource.TerminationPointBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network;
import org.slf4j.LoggerFactory;
-
public class GnpyUtilitiesImplTest extends AbstractTest {
private static final Logger LOG = LoggerFactory.getLogger(GnpyUtilitiesImplTest.class);
PceConstraintsCalc constraints = new PceConstraintsCalc(PceTestData.getPCE_simpletopology_test1_request(),
networkTransaction);
PceConstraints pceHardConstraints = constraints.getPceHardConstraints();
- assertNotNull("Hard constraints should be available",gnpyUtilitiesImpl.askNewPathFromGnpy(pceHardConstraints));
+ assertNotNull("Hard constraints should be available", gnpyUtilitiesImpl.askNewPathFromGnpy(pceHardConstraints));
+
+
+ }
+
+ @Test
+ public void verifyComputationByGnpyTest() throws Exception {
+ // build AtoZ
+ AToZDirectionBuilder atoZDirectionBldr = buildAtZ();
+ // build ZtoA
+ ZToADirectionBuilder ztoADirectionBldr = buildZtoA();
+
+ gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction,
+ PceTestData.getGnpyPCERequest("XPONDER-1", "XPONDER-2"));
+ PceConstraintsCalc constraints = new PceConstraintsCalc(PceTestData.getPCE_simpletopology_test1_request(),
+ networkTransaction);
+ PceConstraints pceHardConstraints = constraints.getPceHardConstraints();
+ boolean result = gnpyUtilitiesImpl.verifyComputationByGnpy(atoZDirectionBldr.build(),
+ ztoADirectionBldr.build(),
+ pceHardConstraints);
+ Assert.assertFalse("Gnpy Computation should be false",result);
+ }
+ private AToZDirectionBuilder buildAtZ() {
+ List<AToZ> atozList = new ArrayList<>();
+ AToZKey clientKey = new AToZKey("key");
+ TerminationPoint stp = new TerminationPointBuilder()
+ .setTpId("tpName").setTpNodeId("xname")
+ .build();
+ Resource clientResource = new ResourceBuilder().setResource(stp).build();
+ AToZ firstResource = new AToZBuilder().setId("tpName").withKey(clientKey).setResource(clientResource).build();
+ atozList.add(firstResource);
+
+ return new AToZDirectionBuilder()
+ .setRate(100L)
+ .setAToZ(atozList)
+ .setAToZWavelengthNumber(Long.valueOf(0));
}
- @Test(expected = Exception.class)
- public void gnpyResponseOneDirectionTest() throws Exception {
- gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction, PceTestData.getPCERequest());
- gnpyUtilitiesImpl.gnpyResponseOneDirection(null);
+ private ZToADirectionBuilder buildZtoA() {
+ return new ZToADirectionBuilder()
+ .setRate(100L)
+ .setZToA(new ArrayList())
+ .setZToAWavelengthNumber(Long.valueOf(0));
+
}
}
*/
package org.opendaylight.transportpce.pce.utils;
+import com.google.gson.stream.JsonReader;
+import java.io.FileReader;
+import java.io.IOException;
import java.io.InputStream;
+import java.io.Reader;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
dataWriteTransaction.commit().get();
}
+ public static void writeNetworkInDataStore(DataBroker dataBroker) {
+
+ try (
+ // load openroadm-network
+ Reader gnpyNetwork = new FileReader("src/test/resources/gnpy/gnpy_network.json");
+ // load openroadm-topology
+ Reader gnpyTopo = new FileReader("src/test/resources/gnpy/gnpy_topology.json");
+ JsonReader networkReader = new JsonReader(gnpyNetwork);
+ JsonReader topoReader = new JsonReader(gnpyTopo);
+ ) {
+
+ Networks networks = (Networks) JsonUtil.getInstance().getDataObjectFromJson(networkReader,
+ QName.create("urn:ietf:params:xml:ns:yang:ietf-network", "2018-02-26", "networks"));
+ saveOpenRoadmNetwork(networks.getNetwork().get(0), NetworkUtils.UNDERLAY_NETWORK_ID, dataBroker);
+ networks = (Networks) JsonUtil.getInstance().getDataObjectFromJson(topoReader,
+ QName.create("urn:ietf:params:xml:ns:yang:ietf-network", "2018-02-26", "networks"));
+ saveOpenRoadmNetwork(networks.getNetwork().get(0), NetworkUtils.OVERLAY_NETWORK_ID, dataBroker);
+ } catch (IOException | ExecutionException | InterruptedException e) {
+ LOG.error("Cannot init test ", e);
+ Assert.fail("Cannot init test ");
+ }
+ }
+
+ private static void saveOpenRoadmNetwork(Network network, String networkId, DataBroker dataBroker)
+ throws InterruptedException, ExecutionException {
+ InstanceIdentifier<Network> nwInstanceIdentifier = InstanceIdentifier.builder(Networks.class)
+ .child(Network.class, new NetworkKey(new NetworkId(networkId))).build();
+ WriteTransaction dataWriteTransaction = dataBroker.newWriteOnlyTransaction();
+ dataWriteTransaction.put(LogicalDatastoreType.CONFIGURATION, nwInstanceIdentifier, network);
+ dataWriteTransaction.commit().get();
+ }
+
public static void writeNetworkIntoDataStore(DataBroker dataBroker,
DataStoreContext dataStoreContext, Network network)
throws ExecutionException, InterruptedException {