/* * Copyright (c) 2015, 2017 Pantheon Technologies s.r.o. 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.sfc.provider.topology; 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 java.util.List; import java.util.TreeSet; import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.md.sal.binding.test.AssertCollections; /** * This class contains unit tests for SfcProviderGraph. * * @author Vladimir Lavor vladimir.lavor@pantheon.sk * @version 0.1 * @since 2015-06-30 */ public class SfcProviderTopologyTest { private static final String NODE_NAME = "nodeName"; private SfcProviderGraph sfcProviderGraph; @Before public void init() { sfcProviderGraph = new SfcProviderGraph(); } /* * create a topology graph, topology nodes are created first then edges * (connections) are created between them at last, test shortest path */ @Test public void testTopology() { SfcProviderTopologyNode sfcProviderTopologyNode; // add two nodes sfcProviderTopologyNode = sfcProviderGraph.addNode(NODE_NAME + 2); assertNotNull("Must not be null", sfcProviderTopologyNode); sfcProviderTopologyNode = sfcProviderGraph.addNode(NODE_NAME + 3); assertNotNull("Must not be null", sfcProviderTopologyNode); // "get" node whether a correct result is returned sfcProviderTopologyNode = sfcProviderGraph.getNode(NODE_NAME + 2); assertNotNull("Must be not null", sfcProviderTopologyNode); assertEquals("Must be equal", sfcProviderTopologyNode.getName(), NODE_NAME + 2); // "has" node, whether node exists or not assertTrue("Must be true", sfcProviderGraph.hasNode(NODE_NAME + 3)); // this node does not exist assertFalse("Must be false", sfcProviderGraph.hasNode(NODE_NAME + 1)); // now create an edge (connection) between node 2 & node 3 boolean edgeAdded = sfcProviderGraph.addEdge(NODE_NAME + 2, NODE_NAME + 3); assertTrue("Must be true", edgeAdded); // edge between node 3 & node 4 - node 4 does not exist, so will be // created edgeAdded = sfcProviderGraph.addEdge(NODE_NAME + 3, NODE_NAME + 4); assertTrue("Must be true", edgeAdded); // edge between node 1 & node 2 - node 1 does not exist, will be created edgeAdded = sfcProviderGraph.addEdge(NODE_NAME + 1, NODE_NAME + 2); assertTrue("Must be true", edgeAdded); // test if edge really exists boolean hasEdge = sfcProviderGraph.hasEdge(NODE_NAME + 1, NODE_NAME + 2); assertTrue("Must be true", hasEdge); // edge does not exist hasEdge = sfcProviderGraph.hasEdge(NODE_NAME + 1, NODE_NAME + 3); assertFalse("Must be false", hasEdge); // node does not exist hasEdge = sfcProviderGraph.hasEdge(NODE_NAME + 1, NODE_NAME + 5); assertFalse("Must be false", hasEdge); // try to find neighbor of non-existing node, should return empty tree // set TreeSet<?> treeSet = (TreeSet<?>) sfcProviderGraph.getNeighborNodes(NODE_NAME + 5); assertTrue("Must be true", treeSet.isEmpty()); // four nodes are created now, there is also edge like 1-2-3-4 sfcProviderTopologyNode = sfcProviderGraph.getNode(NODE_NAME + 1); assertEquals("Must be equal", sfcProviderTopologyNode.getName(), NODE_NAME + 1); sfcProviderTopologyNode = sfcProviderGraph.getNode(NODE_NAME + 2); assertEquals("Must be equal", sfcProviderTopologyNode.getName(), NODE_NAME + 2); sfcProviderTopologyNode = sfcProviderGraph.getNode(NODE_NAME + 3); assertEquals("Must be equal", sfcProviderTopologyNode.getName(), NODE_NAME + 3); sfcProviderTopologyNode = sfcProviderGraph.getNode(NODE_NAME + 4); assertEquals("Must be equal", sfcProviderTopologyNode.getName(), NODE_NAME + 4); // create additional edge between 2-4, so shortest path will be 1-2-4 edgeAdded = sfcProviderGraph.addEdge(NODE_NAME + 2, NODE_NAME + 4); assertTrue("Must be true", edgeAdded); // test shortest path List<SfcProviderTopologyNode> sfcProviderTopologyNodeList = sfcProviderGraph.getShortestPath(NODE_NAME + 1, NODE_NAME + 4); // created path should have three entries - nodes 1, 2 & 4 assertNotNull("Must be not null", sfcProviderTopologyNodeList); assertEquals("Must be equal", sfcProviderTopologyNodeList.size(), 3); assertEquals("Must be equal", sfcProviderTopologyNodeList.get(0).getName(), NODE_NAME + 1); assertEquals("Must be equal", sfcProviderTopologyNodeList.get(0).getDist(), 0); assertEquals("Must be equal", sfcProviderTopologyNodeList.get(1).getName(), NODE_NAME + 2); assertEquals("Must be equal", sfcProviderTopologyNodeList.get(1).getDist(), 1); assertEquals("Must be equal", sfcProviderTopologyNodeList.get(2).getName(), NODE_NAME + 4); assertEquals("Must be equal", sfcProviderTopologyNodeList.get(2).getDist(), 2); // create path with non-existing node, should return null sfcProviderTopologyNodeList = sfcProviderGraph.getShortestPath(NODE_NAME + 1, NODE_NAME + 5); AssertCollections.assertEmpty(sfcProviderTopologyNodeList); // create path, when the src node is equal dst node, should return that // node sfcProviderTopologyNodeList = sfcProviderGraph.getShortestPath(NODE_NAME + 1, NODE_NAME + 1); assertEquals("Must be equal", sfcProviderTopologyNodeList.get(0).getName(), NODE_NAME + 1); } }