package org.opennaas.itests.vnmapper;
import static org.junit.Assert.assertEquals;
import static org.openengsb.labs.paxexam.karaf.options.KarafDistributionOption.keepRuntimeFolder;
import static org.opennaas.itests.helpers.OpennaasExamOptions.includeFeatures;
import static org.opennaas.itests.helpers.OpennaasExamOptions.noConsole;
import static org.opennaas.itests.helpers.OpennaasExamOptions.opennaasDistributionConfiguration;
import static org.ops4j.pax.exam.CoreOptions.options;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.opennaas.core.resources.ILifecycle.State;
import org.opennaas.core.resources.IModel;
import org.opennaas.core.resources.IResource;
import org.opennaas.core.resources.IResourceManager;
import org.opennaas.core.resources.ObjectSerializer;
import org.opennaas.core.resources.ResourceException;
import org.opennaas.core.resources.SerializationException;
import org.opennaas.core.resources.descriptor.CapabilityDescriptor;
import org.opennaas.core.resources.descriptor.ResourceDescriptor;
import org.opennaas.core.resources.descriptor.network.NetworkTopology;
import org.opennaas.core.resources.helpers.ResourceHelper;
import org.opennaas.core.resources.protocol.ProtocolException;
import org.opennaas.extensions.network.capability.basic.NetworkBasicCapability;
import org.opennaas.extensions.network.model.NetworkModel;
import org.opennaas.extensions.network.model.NetworkModelHelper;
import org.opennaas.extensions.network.model.topology.Device;
import org.opennaas.extensions.network.model.topology.Link;
import org.opennaas.extensions.network.model.topology.NetworkConnection;
import org.opennaas.extensions.network.model.topology.NetworkElement;
import org.opennaas.extensions.network.model.topology.Path;
import org.opennaas.extensions.network.model.virtual.VirtualDevice;
import org.opennaas.extensions.network.model.virtual.VirtualLink;
import org.opennaas.extensions.network.repository.NetworkMapperDescriptorToModel;
import org.opennaas.extensions.vnmapper.VNState;
import org.opennaas.extensions.vnmapper.VNTRequest;
import org.opennaas.extensions.vnmapper.capability.vnmapping.VNMapperOutput;
import org.opennaas.extensions.vnmapper.capability.vnmapping.VNMappingCapability;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.junit.Configuration;
import org.ops4j.pax.exam.junit.JUnit4TestRunner;
import org.ops4j.pax.exam.util.Filter;
import org.osgi.service.blueprint.container.BlueprintContainer;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
/**
*
* @author Adrian Rosello
*
* The tests of this class try to check the VNMapping capability output, which is a network model. This model must contain virtual nodes and
* virtual links, that must be linked with elements of the input physical network topology. Output schema is defined in output files.
*
*/
@RunWith(JUnit4TestRunner.class)
public class VNMapperCapabilityTest {
Log log = LogFactory.getLog(VNMapperCapabilityTest.class);
protected static final String MAPPING_CAPABILITY_TYPE = VNMappingCapability.CAPABILITY_TYPE;
protected static final String CAPABILITY_VERSION = null;
protected static final String ACTION_NAME = null;
protected static final String CAPABILITY_URI = "mock://user:pass@host.net:2212/mocksubsystem";
protected static final String NETWORK_RESOURCE_TYPE = "network";
protected static final String MAPPER_RESOURCE_TYPE = "vnmapper";
protected static final String BASIC_CAPABILITY_TYPE = NetworkBasicCapability.CAPABILITY_TYPE;
protected static final String RESOURCE_URI = "mock://user:pass@host.net:2212/mocksubsystem";
protected static final String VNMAPPER_RESOURCE_NAME = "VNMapper resource";
protected static final String NETWORK_RESOURCE_NAME = "Network resource";
@Inject
private IResourceManager resourceManager;
IResource networkResource;
IResource vnmapperResource;
/**
* Make sure blueprint for org.opennaas.extensions.vnmapper bundle has finished its initialization
*/
@SuppressWarnings("unused")
@Inject
@Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.vnmapper)", timeout = 20000)
private BlueprintContainer vnMapperBlueprintContainer;
@Configuration
public static Option[] configuration() {
return options(opennaasDistributionConfiguration(),
includeFeatures("opennaas-vnmapper", "itests-helpers"),
noConsole(),
keepRuntimeFolder());
}
/**
* Start a vnmapper resource
*
* @throws ResourceException
* @throws ProtocolException
*/
@Before
public void startResource() throws ResourceException, ProtocolException {
List<CapabilityDescriptor> capDescriptors = new ArrayList<CapabilityDescriptor>();
capDescriptors.add(ResourceHelper.newCapabilityDescriptor(ACTION_NAME,
CAPABILITY_VERSION,
MAPPING_CAPABILITY_TYPE,
CAPABILITY_URI));
// Network Resource Descriptor
ResourceDescriptor resourceDescriptor = ResourceHelper.newResourceDescriptor(capDescriptors, MAPPER_RESOURCE_TYPE, RESOURCE_URI,
VNMAPPER_RESOURCE_NAME);
// Create resource
vnmapperResource = resourceManager.createResource(resourceDescriptor);
// Start resource
resourceManager.startResource(vnmapperResource.getResourceIdentifier());
startNetworkResource();
}
/**
* Stop and remove the vnmapper resource
*
* @throws ResourceException
* @throws ProtocolException
*/
@After
public void stopResource() throws ResourceException, ProtocolException {
resourceManager.stopResource(vnmapperResource.getResourceIdentifier());
resourceManager.removeResource(vnmapperResource.getResourceIdentifier());
// remove remaining if any
List<IResource> toRemove = resourceManager.listResources();
for (IResource resource : toRemove) {
if (resource.getState().equals(State.ACTIVE)) {
resourceManager.stopResource(resource.getResourceIdentifier());
}
resourceManager.removeResource(resource.getResourceIdentifier());
}
}
/**
* Test to check if capability is available from OSGi.
*/
@Test
public void isCapabilityAccessibleFromResourceTest()
throws ResourceException, ProtocolException
{
assertEquals(1, vnmapperResource.getCapabilities().size());
assertEquals(MAPPING_CAPABILITY_TYPE, vnmapperResource.getCapabilities().get(0).getCapabilityInformation().getType());
}
@Ignore
@Test
public void Sample1Test() throws ResourceException, IOException, SerializationException, ParserConfigurationException, SAXException {
networkResource.setModel(loadNetworkTopologyFromFile("/inputs/sample1/topology.xml"));
VNTRequest vnt = loadRequestFromFile("/inputs/sample1/request.xml");
VNMappingCapability capab = (VNMappingCapability) vnmapperResource.getCapabilityByType(MAPPING_CAPABILITY_TYPE);
Assert.assertNotNull(capab);
VNMapperOutput out = capab.mapVN(networkResource.getResourceIdentifier().getId(), vnt);
VNState matchState = out.getResult().getMatchingState();
VNState mapState = out.getResult().getMappingState();
Assert.assertEquals(VNState.SUCCESSFUL, matchState);
Assert.assertEquals(VNState.SUCCESSFUL, mapState);
NetworkModel virtualModel = out.getNetworkModel();
Assert.assertNotNull(virtualModel);
NetworkModel physicalModel = (NetworkModel) networkResource.getModel();
Assert.assertNotNull(physicalModel);
// /// CHECK VIRTUAL DEVICES
List<NetworkElement> virtualDevices = NetworkModelHelper
.getNetworkElementsByClassName(VirtualDevice.class, virtualModel.getNetworkElements());
Assert.assertEquals("Virtual Network Model should contain 3 virtual devices.", 3, virtualDevices.size());
VirtualDevice vDevice0 = (VirtualDevice) virtualDevices.get(0);
Assert.assertEquals("0", vDevice0.getName());
Assert.assertEquals("VirtualDevice 0 should match physical router router:junos20", vDevice0.getImplementedBy(),
"router:junos20");
VirtualDevice vDevice1 = (VirtualDevice) virtualDevices.get(1);
Assert.assertEquals("1", vDevice1.getName());
Assert.assertEquals("VirtualDevice 1 should match physical router router:junos30", vDevice1.getImplementedBy(),
"router:junos30");
VirtualDevice vDevice2 = (VirtualDevice) virtualDevices.get(2);
Assert.assertEquals("2", vDevice2.getName());
Assert.assertEquals("VirtualDevice 2 should match physical router router:junos40", vDevice2.getImplementedBy(),
"router:junos40");
// /// CHECK VIRTUAL LINKS
List<NetworkElement> virtualLinks = NetworkModelHelper.getNetworkElementsByClassName(VirtualLink.class, virtualModel.getNetworkElements());
Assert.assertEquals("Virtual Network Model should contain 2 virtual links.", 2, virtualLinks.size());
VirtualLink vlink1 = (VirtualLink) virtualLinks.get(0);
Assert.assertNotNull(vlink1.getSource());
Assert.assertNotNull(vlink1.getSink());
Assert.assertNotNull(vlink1.getImplementedBy());
Assert.assertEquals("Virtual Link 0-1 should begin in Virtual Device 0.", vlink1.getSource().getDevice(), vDevice0);
Assert.assertEquals("Virtual Link 0-1 should end in Virtual Device 1.", vlink1.getSink().getDevice(), vDevice1);
String linkId = vlink1.getImplementedBy();
int pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
Link link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos20:em0.0-router:junos30:em0.0", link.getName());
Assert.assertEquals("router:junos20:em0.0", link.getSource().getName());
Assert.assertEquals("router:junos30:em0.0", link.getSink().getName());
VirtualLink vlink2 = (VirtualLink) virtualLinks.get(1);
Assert.assertNotNull(vlink2.getSource());
Assert.assertNotNull(vlink2.getSink());
Assert.assertNotNull(vlink2.getImplementedBy());
Assert.assertEquals("Virtual Link 1-2 should begin in Virtual Device 0.", vlink2.getSource().getDevice(), vDevice1);
Assert.assertEquals("Virtual Link 1-2 should end in Virtual Device 1.", vlink2.getSink().getDevice(), vDevice2);
linkId = vlink2.getImplementedBy();
pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos30:em1.0-router:junos40:em1.0", link.getName());
Assert.assertEquals("router:junos30:em1.0", link.getSource().getName());
Assert.assertEquals("router:junos40:em1.0", link.getSink().getName());
List<NetworkElement> paths = NetworkModelHelper.getNetworkElementsByClassName(Path.class, virtualModel.getNetworkElements());
Assert.assertEquals(2, paths.size());
Path path = (Path) paths.get(0);
Assert.assertEquals("0-1", path.getName());
List<NetworkConnection> pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink1));
path = (Path) paths.get(1);
Assert.assertEquals("1-2", path.getName());
pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink2));
}
@Ignore
@Test
public void Sample2Test() throws ResourceException, IOException, SerializationException, ParserConfigurationException, SAXException {
networkResource.setModel(loadNetworkTopologyFromFile("/inputs/sample2/topology.xml"));
VNTRequest vnt =
loadRequestFromFile("/inputs/sample2/request.xml");
VNMappingCapability capab = (VNMappingCapability) vnmapperResource.getCapabilityByType(MAPPING_CAPABILITY_TYPE);
Assert.assertNotNull(capab);
VNMapperOutput out = capab.mapVN(networkResource.getResourceIdentifier().getId(), vnt);
VNState matchState = out.getResult().getMatchingState();
VNState mapState = out.getResult().getMappingState();
Assert.assertEquals(VNState.SUCCESSFUL, matchState);
Assert.assertEquals(VNState.SUCCESSFUL, mapState);
NetworkModel virtualModel = out.getNetworkModel();
Assert.assertNotNull(virtualModel);
NetworkModel physicalModel = (NetworkModel) networkResource.getModel();
Assert.assertNotNull(physicalModel);
// /// CHECK VIRTUAL DEVICES
List<NetworkElement> virtualDevices = NetworkModelHelper.getNetworkElementsByClassName(VirtualDevice.class,
virtualModel.getNetworkElements());
Assert.assertEquals("Virtual Network Model should contain 3 virtual devices.", 3,
virtualDevices.size());
VirtualDevice vDevice0 = (VirtualDevice) virtualDevices.get(0);
Assert.assertEquals("First virtual device's name should be 0", "0", vDevice0.getName());
Assert.assertEquals("VirtualDevice 0 should match physical router router:junos20", vDevice0.getImplementedBy(),
"router:junos20");
VirtualDevice vDevice1 = (VirtualDevice) virtualDevices.get(1);
Assert.assertEquals("Second virtual device's name should be 1", "1", vDevice1.getName());
Assert.assertEquals("VirtualDevice 1 should match physical router router:junos40", vDevice1.getImplementedBy(),
"router:junos40");
VirtualDevice vDevice2 = (VirtualDevice) virtualDevices.get(2);
Assert.assertEquals("Third virtual device's name should be 2", "2", vDevice2.getName());
Assert.assertEquals("VirtualDevice 2 should match physical router router:junos30", vDevice2.getImplementedBy(),
"router:junos30");
// /// CHECK VIRTUAL LINKS
List<NetworkElement> virtualLinks = NetworkModelHelper.getNetworkElementsByClassName(VirtualLink.class,
virtualModel.getNetworkElements());
Assert.assertEquals("Virtual Network Model should contain 2 virtual links.", 2, virtualLinks.size());
VirtualLink vlink1 = (VirtualLink) virtualLinks.get(0);
Assert.assertNotNull(vlink1.getSource());
Assert.assertNotNull(vlink1.getSink());
Assert.assertNotNull(vlink1.getImplementedBy());
Assert.assertEquals("Virtual Link 0-1 should begin in Virtual Device 0.",
vlink1.getSource().getDevice(), vDevice0);
Assert.assertEquals("Virtual Link 0-1 should end in Virtual Device 1.",
vlink1.getSink().getDevice(), vDevice1);
String linkId = vlink1.getImplementedBy();
int pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
Link link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos20:em1.0-router:junos40:em0.0", link.getName());
Assert.assertEquals("router:junos20:em1.0", link.getSource().getName());
Assert.assertEquals("router:junos40:em0.0", link.getSink().getName());
VirtualLink vlink2 = (VirtualLink) virtualLinks.get(1);
Assert.assertEquals("Virtual Link 2-1 should begin in Virtual Device 2.",
vlink2.getSource().getDevice(), vDevice2);
Assert.assertEquals("Virtual Link 2-1 should end in Virtual Device 1.",
vlink2.getSink().getDevice(), vDevice1);
Assert.assertNotNull(vlink2.getSource());
Assert.assertNotNull(vlink2.getSink());
Assert.assertNotNull(vlink2.getImplementedBy());
linkId = vlink2.getImplementedBy();
pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos30:em1.0-router:junos40:em1.0", link.getName());
Assert.assertEquals("router:junos30:em1.0", link.getSource().getName());
Assert.assertEquals("router:junos40:em1.0", link.getSink().getName());
List<NetworkElement> paths = NetworkModelHelper.getNetworkElementsByClassName(Path.class, virtualModel.getNetworkElements());
Assert.assertEquals(2, paths.size());
Path path = (Path) paths.get(0);
Assert.assertEquals("0-1", path.getName());
List<NetworkConnection> pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink1));
path = (Path) paths.get(1);
Assert.assertEquals("1-2", path.getName());
pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink2));
}
@Test
public void Sample3Test() throws ResourceException, IOException, SerializationException, ParserConfigurationException, SAXException {
log.info("#############################");
log.info("## TEST 3 ##");
log.info("#############################");
networkResource.setModel(loadNetworkTopologyFromFile("/inputs/sample3/topology.xml"));
VNTRequest vnt =
loadRequestFromFile("/inputs/sample3/request.xml");
VNMappingCapability capab = (VNMappingCapability) vnmapperResource.getCapabilityByType(MAPPING_CAPABILITY_TYPE);
Assert.assertNotNull(capab);
VNMapperOutput out = capab.mapVN(networkResource.getResourceIdentifier().getId(), vnt);
VNState matchState = out.getResult().getMatchingState();
VNState mapState = out.getResult().getMappingState();
Assert.assertEquals(VNState.SUCCESSFUL, matchState);
Assert.assertEquals(VNState.SUCCESSFUL, mapState);
NetworkModel virtualModel = out.getNetworkModel();
Assert.assertNotNull(virtualModel);
NetworkModel physicalModel = (NetworkModel) networkResource.getModel();
Assert.assertNotNull(physicalModel);
// /// CHECK VIRTUAL DEVICES
List<NetworkElement> virtualDevices = NetworkModelHelper.getNetworkElementsByClassName(VirtualDevice.class,
virtualModel.getNetworkElements());
Assert.assertEquals("Virtual Network Model should contain 3 virtual devices.", 3,
virtualDevices.size());
VirtualDevice vDevice0 = (VirtualDevice) virtualDevices.get(0);
Assert.assertEquals("0", vDevice0.getName());
Assert.assertEquals("VirtualDevice 0 should match physical router router:junos40", vDevice0.getImplementedBy(),
"router:junos40");
VirtualDevice vDevice1 = (VirtualDevice) virtualDevices.get(1);
Assert.assertEquals("1", vDevice1.getName());
Assert.assertEquals("VirtualDevice 1 should match physical router router:junos50", vDevice1.getImplementedBy(),
"router:junos50");
VirtualDevice vDevice2 = (VirtualDevice) virtualDevices.get(2);
Assert.assertEquals("2", vDevice2.getName());
Assert.assertEquals("VirtualDevice 2 should match physical router router:junos60", vDevice2.getImplementedBy(),
"router:junos60");
// /// CHECK VIRTUAL LINKS
List<NetworkElement> virtualLinks = NetworkModelHelper.getNetworkElementsByClassName(VirtualLink.class, virtualModel.getNetworkElements());
Assert.assertEquals("Virtual Network Model should contain 3 virtual links.", 3, virtualLinks.size());
VirtualLink vlink1 = (VirtualLink) virtualLinks.get(0);
Assert.assertNotNull(vlink1.getSource());
Assert.assertNotNull(vlink1.getSink());
Assert.assertNotNull(vlink1.getImplementedBy());
Assert.assertEquals("Virtual Link 0-1 should begin in Virtual Device 0.", vlink1.getSource().getDevice(), vDevice0);
Assert.assertEquals("Virtual Link 0-1 should end in Virtual Device 1.", vlink1.getSink().getDevice(), vDevice1);
String linkId = vlink1.getImplementedBy();
int pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
Link link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos40:em0.0-router:junos50:em0.0", link.getName());
Assert.assertEquals("router:junos40:em0.0", link.getSource().getName());
Assert.assertEquals("router:junos50:em0.0", link.getSink().getName());
VirtualLink vlink2 = (VirtualLink) virtualLinks.get(1);
Assert.assertEquals("Virtual Link 0-2 should begin in Virtual Device 1.",
vlink2.getSource().getDevice(), vDevice0);
Assert.assertEquals("Virtual Link 0-2 should end in Virtual Device 2.",
vlink2.getSink().getDevice(), vDevice2);
Assert.assertNotNull(vlink2.getSource());
Assert.assertNotNull(vlink2.getSink());
Assert.assertNotNull(vlink2.getImplementedBy());
linkId = vlink2.getImplementedBy();
pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos40:em1.0-router:junos60:em0.0", link.getName());
Assert.assertEquals("router:junos40:em1.0", link.getSource().getName());
Assert.assertEquals("router:junos60:em0.0", link.getSink().getName());
VirtualLink vlink3 = (VirtualLink) virtualLinks.get(2);
Assert.assertEquals("Virtual Link 1-2 should begin in Virtual Device 1.",
vlink3.getSource().getDevice(), vDevice1);
Assert.assertEquals("Virtual Link 1-2 should end in Virtual Device 2.",
vlink3.getSink().getDevice(), vDevice2);
Assert.assertNotNull(vlink3.getSource());
Assert.assertNotNull(vlink3.getSink());
Assert.assertNotNull(vlink3.getImplementedBy());
linkId = vlink3.getImplementedBy();
pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos50:em1.0-router:junos60:em1.0", link.getName());
Assert.assertEquals("router:junos50:em1.0", link.getSource().getName());
Assert.assertEquals("router:junos60:em1.0", link.getSink().getName());
List<NetworkElement> paths = NetworkModelHelper.getNetworkElementsByClassName(Path.class, virtualModel.getNetworkElements());
Assert.assertEquals(3, paths.size());
Path path = (Path) paths.get(0);
Assert.assertEquals("0-1", path.getName());
List<NetworkConnection> pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink1));
path = (Path) paths.get(1);
Assert.assertEquals("0-2", path.getName());
pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink2));
path = (Path) paths.get(2);
Assert.assertEquals("1-2", path.getName());
pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink3));
}
@Ignore
@Test
public void Sample4Test() throws ResourceException, IOException, SerializationException, ParserConfigurationException, SAXException {
networkResource.setModel(loadNetworkTopologyFromFile("/inputs/sample4/topology.xml"));
VNTRequest vnt =
loadRequestFromFile("/inputs/sample4/request.xml");
VNMappingCapability capab = (VNMappingCapability) vnmapperResource.getCapabilityByType(MAPPING_CAPABILITY_TYPE);
Assert.assertNotNull(capab);
VNMapperOutput out = capab.mapVN(networkResource.getResourceIdentifier().getId(), vnt);
VNState matchState = out.getResult().getMatchingState();
VNState mapState = out.getResult().getMappingState();
Assert.assertEquals(VNState.SUCCESSFUL, matchState);
Assert.assertEquals(VNState.SUCCESSFUL, mapState);
NetworkModel virtualModel = out.getNetworkModel();
Assert.assertNotNull(virtualModel);
NetworkModel physicalModel = (NetworkModel) networkResource.getModel();
Assert.assertNotNull(physicalModel);
// /// CHECK VIRTUAL DEVICES
List<NetworkElement> virtualDevices = NetworkModelHelper.getNetworkElementsByClassName(VirtualDevice.class,
virtualModel.getNetworkElements());
Assert.assertEquals("Virtual Network Model should contain 5 virtual devices.", 5,
virtualDevices.size());
VirtualDevice vDevice0 = (VirtualDevice) virtualDevices.get(0);
Assert.assertEquals("0", vDevice0.getName());
Assert.assertEquals("VirtualDevice 0 should match physical router router:junos20", vDevice0.getImplementedBy(),
"router:junos20");
VirtualDevice vDevice1 = (VirtualDevice) virtualDevices.get(1);
Assert.assertEquals("1", vDevice1.getName());
Assert.assertEquals("VirtualDevice 1 should match physical router router:junos40", vDevice1.getImplementedBy(),
"router:junos40");
VirtualDevice vDevice2 = (VirtualDevice) virtualDevices.get(2);
Assert.assertEquals("2", vDevice2.getName());
Assert.assertEquals("VirtualDevice 2 should match physical router router:junos50", vDevice2.getImplementedBy(),
"router:junos50");
VirtualDevice vDevice3 = (VirtualDevice) virtualDevices.get(3);
Assert.assertEquals("3", vDevice3.getName());
Assert.assertEquals("VirtualDevice 3 should match physical router router:junos60", vDevice3.getImplementedBy(),
"router:junos60");
VirtualDevice vDevice4 = (VirtualDevice) virtualDevices.get(4);
Assert.assertEquals("4", vDevice4.getName());
Assert.assertEquals("VirtualDevice 4 should match physical router router:junos30", vDevice4.getImplementedBy(),
"router:junos30");
// /// CHECK VIRTUAL LINKS
List<NetworkElement> virtualLinks = NetworkModelHelper.getNetworkElementsByClassName(VirtualLink.class,
virtualModel.getNetworkElements());
Assert.assertEquals("Virtual Network Model should contain 4 virtual links.", 4, virtualLinks.size());
VirtualLink vlink1 = (VirtualLink) virtualLinks.get(0);
Assert.assertNotNull(vlink1.getSource());
Assert.assertNotNull(vlink1.getSink());
Assert.assertNotNull(vlink1.getImplementedBy());
Assert.assertEquals("Virtual Link 0-4 should begin in Virtual Device 0.",
vlink1.getSource().getDevice(), vDevice0);
Assert.assertEquals("Virtual Link 0-4 should end in Virtual Device 4.",
vlink1.getSink().getDevice(), vDevice4);
String linkId = vlink1.getImplementedBy();
int pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
Link link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos20:em0.0-router:junos30:em1.0", link.getName());
Assert.assertEquals("router:junos20:em0.0", link.getSource().getName());
Assert.assertEquals("router:junos30:em1.0", link.getSink().getName());
VirtualLink vlink2 = (VirtualLink) virtualLinks.get(1);
Assert.assertEquals("Virtual Link 1-2 should begin in Virtual Device 1.",
vlink2.getSource().getDevice(), vDevice1);
Assert.assertEquals("Virtual Link 1-2 should end in Virtual Device 2.",
vlink2.getSink().getDevice(), vDevice2);
Assert.assertNotNull(vlink2.getSource());
Assert.assertNotNull(vlink2.getSink());
Assert.assertNotNull(vlink2.getImplementedBy());
linkId = vlink2.getImplementedBy();
pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos40:em0.0-router:junos50:em0.0", link.getName());
Assert.assertEquals("router:junos40:em0.0", link.getSource().getName());
Assert.assertEquals("router:junos50:em0.0", link.getSink().getName());
VirtualLink vlink3 = (VirtualLink) virtualLinks.get(2);
Assert.assertEquals("Virtual Link 1-3 should begin in Virtual Device 1.",
vlink3.getSource().getDevice(), vDevice1);
Assert.assertEquals("Virtual Link 1-3 should end in Virtual Device 3.",
vlink3.getSink().getDevice(), vDevice3);
Assert.assertNotNull(vlink3.getSource());
Assert.assertNotNull(vlink3.getSink());
Assert.assertNotNull(vlink3.getImplementedBy());
linkId = vlink3.getImplementedBy();
pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos40:em1.0-router:junos60:em0.0", link.getName());
Assert.assertEquals("router:junos40:em1.0", link.getSource().getName());
Assert.assertEquals("router:junos60:em0.0", link.getSink().getName());
VirtualLink vlink4 = (VirtualLink) virtualLinks.get(3);
Assert.assertEquals("Virtual Link 2-3 should begin in Virtual Device 1.",
vlink4.getSource().getDevice(), vDevice2);
Assert.assertEquals("Virtual Link 3-3 should end in Virtual Device 3.",
vlink4.getSink().getDevice(), vDevice3);
Assert.assertNotNull(vlink4.getSource());
Assert.assertNotNull(vlink4.getSink());
Assert.assertNotNull(vlink4.getImplementedBy());
linkId = vlink4.getImplementedBy();
pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos50:em1.0-router:junos60:em1.0", link.getName());
Assert.assertEquals("router:junos50:em1.0", link.getSource().getName());
Assert.assertEquals("router:junos60:em1.0", link.getSink().getName());
List<NetworkElement> paths = NetworkModelHelper.getNetworkElementsByClassName(Path.class, virtualModel.getNetworkElements());
Assert.assertEquals(4, paths.size());
Path path = (Path) paths.get(0);
Assert.assertEquals("0-4", path.getName());
List<NetworkConnection> pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink1));
path = (Path) paths.get(1);
Assert.assertEquals("1-2", path.getName());
pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink2));
path = (Path) paths.get(2);
Assert.assertEquals("1-3", path.getName());
pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink3));
path = (Path) paths.get(3);
Assert.assertEquals("2-3", path.getName());
pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink4));
}
@Ignore
@Test
public void Sample5Test() throws ResourceException, IOException, SerializationException, ParserConfigurationException, SAXException {
networkResource.setModel(loadNetworkTopologyFromFile("/inputs/sample5/topology.xml"));
VNTRequest vnt =
loadRequestFromFile("/inputs/sample5/request.xml");
VNMappingCapability capab = (VNMappingCapability) vnmapperResource.getCapabilityByType(MAPPING_CAPABILITY_TYPE);
Assert.assertNotNull(capab);
VNMapperOutput out = capab.mapVN(networkResource.getResourceIdentifier().getId(), vnt);
VNState matchState = out.getResult().getMatchingState();
VNState mapState = out.getResult().getMappingState();
Assert.assertEquals(VNState.SUCCESSFUL, matchState);
Assert.assertEquals(VNState.SUCCESSFUL, mapState);
NetworkModel virtualModel = out.getNetworkModel();
Assert.assertNotNull(virtualModel);
NetworkModel physicalModel = (NetworkModel) networkResource.getModel();
Assert.assertNotNull(physicalModel);
// /// CHECK VIRTUAL DEVICES
List<NetworkElement> virtualDevices = NetworkModelHelper.getNetworkElementsByClassName(VirtualDevice.class,
virtualModel.getNetworkElements());
Assert.assertEquals("Virtual Network Model should contain 3 virtual devices.", 3,
virtualDevices.size());
VirtualDevice vDevice0 = (VirtualDevice) virtualDevices.get(0);
Assert.assertEquals("0", vDevice0.getName());
Assert.assertEquals("VirtualDevice 0 should match physical router router:junos20", vDevice0.getImplementedBy(),
"router:junos20");
VirtualDevice vDevice1 = (VirtualDevice) virtualDevices.get(1);
Assert.assertEquals("1", vDevice1.getName());
Assert.assertEquals("VirtualDevice 1 should match physical router router:junos40", vDevice1.getImplementedBy(),
"router:junos40");
VirtualDevice vDevice2 = (VirtualDevice) virtualDevices.get(2);
Assert.assertEquals("2", vDevice2.getName());
Assert.assertEquals("VirtualDevice 2 should match physical router router:junos30", vDevice2.getImplementedBy(),
"router:junos30");
// /// CHECK VIRTUAL LINKS
List<NetworkElement> virtualLinks = NetworkModelHelper.getNetworkElementsByClassName(VirtualLink.class,
virtualModel.getNetworkElements());
Assert.assertEquals("Virtual Network Model should contain 1 virtual link.", 1, virtualLinks.size());
VirtualLink vlink1 = (VirtualLink) virtualLinks.get(0);
Assert.assertNotNull(vlink1.getSource());
Assert.assertNotNull(vlink1.getSink());
Assert.assertNotNull(vlink1.getImplementedBy());
Assert.assertEquals("Virtual Link 0-2 should begin in Virtual Device 0.",
vlink1.getSource().getDevice(), vDevice0);
Assert.assertEquals("Virtual Link 0-2 should end in Virtual Device 1.",
vlink1.getSink().getDevice(), vDevice2);
String linkId = vlink1.getImplementedBy();
int pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
Link link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos20:em0.0-router:junos30:em0.0", link.getName());
Assert.assertEquals("router:junos20:em0.0", link.getSource().getName());
Assert.assertEquals("router:junos30:em0.0", link.getSink().getName());
List<NetworkElement> paths = NetworkModelHelper.getNetworkElementsByClassName(Path.class, virtualModel.getNetworkElements());
Assert.assertEquals(1, paths.size());
Path path = (Path) paths.get(0);
Assert.assertEquals("0-2", path.getName());
List<NetworkConnection> pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink1));
}
@Test
public void Sample6Test() throws ResourceException, IOException, SerializationException, ParserConfigurationException, SAXException {
log.info("#############################");
log.info("## TEST 6 ##");
log.info("#############################");
networkResource.setModel(loadNetworkTopologyFromFile("/inputs/sample6/topology.xml"));
VNTRequest vnt =
loadRequestFromFile("/inputs/sample6/request.xml");
VNMappingCapability capab = (VNMappingCapability) vnmapperResource.getCapabilityByType(MAPPING_CAPABILITY_TYPE);
Assert.assertNotNull(capab);
VNMapperOutput out = capab.mapVN(networkResource.getResourceIdentifier().getId(), vnt);
VNState matchState = out.getResult().getMatchingState();
VNState mapState = out.getResult().getMappingState();
Assert.assertEquals(VNState.SUCCESSFUL, matchState);
Assert.assertEquals(VNState.SUCCESSFUL, mapState);
NetworkModel virtualModel = out.getNetworkModel();
Assert.assertNotNull(virtualModel);
NetworkModel physicalModel = (NetworkModel) networkResource.getModel();
Assert.assertNotNull(physicalModel);
// /// CHECK VIRTUAL DEVICES
List<NetworkElement> virtualDevices = NetworkModelHelper.getNetworkElementsByClassName(VirtualDevice.class,
virtualModel.getNetworkElements());
Assert.assertEquals("Virtual Network Model should contain 4 virtual devices.", 4,
virtualDevices.size());
VirtualDevice vDevice0 = (VirtualDevice) virtualDevices.get(0);
Assert.assertEquals("0", vDevice0.getName());
Assert.assertEquals("VirtualDevice 0 should match physical router router:junos20", vDevice0.getImplementedBy(),
"router:junos20");
VirtualDevice vDevice1 = (VirtualDevice) virtualDevices.get(1);
Assert.assertEquals("1", vDevice1.getName());
Assert.assertEquals("VirtualDevice 1 should match physical router router:junos40", vDevice1.getImplementedBy(),
"router:junos40");
VirtualDevice vDevice2 = (VirtualDevice) virtualDevices.get(2);
Assert.assertEquals("2", vDevice2.getName());
Assert.assertEquals("VirtualDevice 2 should match physical router router:junos30", vDevice2.getImplementedBy(),
"router:junos30");
VirtualDevice vDevice3 = (VirtualDevice) virtualDevices.get(3);
Assert.assertEquals("3", vDevice3.getName());
Assert.assertEquals("VirtualDevice 3 should match physical router router:junos50", vDevice3.getImplementedBy(),
"router:junos50");
// /// CHECK VIRTUAL LINKS
List<NetworkElement> virtualLinks = NetworkModelHelper.getNetworkElementsByClassName(VirtualLink.class,
virtualModel.getNetworkElements());
Assert.assertEquals("Virtual Network Model should contain 2 virtual links.", 2, virtualLinks.size());
VirtualLink vlink1 = (VirtualLink) virtualLinks.get(0);
Assert.assertNotNull(vlink1.getSource());
Assert.assertNotNull(vlink1.getSink());
Assert.assertNotNull(vlink1.getImplementedBy());
Assert.assertEquals("Virtual Link 0-2 should begin in Virtual Device 0.",
vlink1.getSource().getDevice(), vDevice0);
Assert.assertEquals("Virtual Link 0-2 should end in Virtual Device 2.",
vlink1.getSink().getDevice(), vDevice2);
String linkId = vlink1.getImplementedBy();
int pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
Link link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos20:em0.0-router:junos30:em0.0", link.getName());
Assert.assertEquals("router:junos20:em0.0", link.getSource().getName());
Assert.assertEquals("router:junos30:em0.0", link.getSink().getName());
VirtualLink vlink2 = (VirtualLink) virtualLinks.get(1);
Assert.assertNotNull(vlink2.getSource());
Assert.assertNotNull(vlink2.getSink());
Assert.assertNotNull(vlink2.getImplementedBy());
Assert.assertEquals("Virtual Link 1-3 should begin in Virtual Device 1.",
vlink2.getSource().getDevice(), vDevice1);
Assert.assertEquals("Virtual Link 1-3 should end in Virtual Device 3.",
vlink2.getSink().getDevice(), vDevice3);
linkId = vlink2.getImplementedBy();
pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos40:em0.0-router:junos50:em0.0", link.getName());
Assert.assertEquals("router:junos40:em0.0", link.getSource().getName());
Assert.assertEquals("router:junos50:em0.0", link.getSink().getName());
List<NetworkElement> paths = NetworkModelHelper.getNetworkElementsByClassName(Path.class, virtualModel.getNetworkElements());
Assert.assertEquals(2, paths.size());
Path path = (Path) paths.get(0);
Assert.assertEquals("0-2", path.getName());
List<NetworkConnection> pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink1));
path = (Path) paths.get(1);
Assert.assertEquals("1-3", path.getName());
pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink2));
}
@Test
public void Sample7Test() throws ResourceException, IOException, SerializationException, ParserConfigurationException, SAXException {
log.info("#############################");
log.info("## TEST 7 ##");
log.info("#############################");
networkResource.setModel(loadNetworkTopologyFromFile("/inputs/sample7/topology.xml"));
VNTRequest vnt =
loadRequestFromFile("/inputs/sample7/request.xml");
VNMappingCapability capab = (VNMappingCapability) vnmapperResource.getCapabilityByType(MAPPING_CAPABILITY_TYPE);
Assert.assertNotNull(capab);
VNMapperOutput out = capab.mapVN(networkResource.getResourceIdentifier().getId(), vnt);
VNState matchState = out.getResult().getMatchingState();
VNState mapState = out.getResult().getMappingState();
Assert.assertEquals(VNState.SUCCESSFUL, matchState);
Assert.assertEquals(VNState.SUCCESSFUL, mapState);
NetworkModel virtualModel = out.getNetworkModel();
Assert.assertNotNull(virtualModel);
NetworkModel physicalModel = (NetworkModel) networkResource.getModel();
Assert.assertNotNull(physicalModel);
// /// CHECK VIRTUAL DEVICES
List<NetworkElement> virtualDevices = NetworkModelHelper.getNetworkElementsByClassName(VirtualDevice.class,
virtualModel.getNetworkElements());
Assert.assertEquals("Virtual Network Model should contain 3 virtual devices.", 3,
virtualDevices.size());
VirtualDevice vDevice0 = (VirtualDevice) virtualDevices.get(0);
Assert.assertEquals("0", vDevice0.getName());
Assert.assertEquals("VirtualDevice 0 should match physical router router:junos40", vDevice0.getImplementedBy(),
"router:junos40");
VirtualDevice vDevice1 = (VirtualDevice) virtualDevices.get(1);
Assert.assertEquals("1", vDevice1.getName());
Assert.assertEquals("VirtualDevice 1 should match physical router router:junos50", vDevice1.getImplementedBy(),
"router:junos50");
VirtualDevice vDevice2 = (VirtualDevice) virtualDevices.get(2);
Assert.assertEquals("2", vDevice2.getName());
Assert.assertEquals("VirtualDevice 2 should match physical router router:junos60", vDevice2.getImplementedBy(),
"router:junos60");
// /// CHECK VIRTUAL LINKS
List<NetworkElement> virtualLinks = NetworkModelHelper.getNetworkElementsByClassName(VirtualLink.class,
virtualModel.getNetworkElements());
Assert.assertEquals("Virtual Network Model should contain 3 virtual links.", 3, virtualLinks.size());
VirtualLink vlink1 = (VirtualLink) virtualLinks.get(0);
Assert.assertNotNull(vlink1.getSource());
Assert.assertNotNull(vlink1.getSink());
Assert.assertNotNull(vlink1.getImplementedBy());
Assert.assertEquals("Virtual Link 0-1 should begin in Virtual Device 0.",
vlink1.getSource().getDevice(), vDevice0);
Assert.assertEquals("Virtual Link 0-1 should end in Virtual Device 1.",
vlink1.getSink().getDevice(), vDevice1);
String linkId = vlink1.getImplementedBy();
int pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
Link link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos40:em0.0-router:junos50:em0.0", link.getName());
Assert.assertEquals("router:junos40:em0.0", link.getSource().getName());
Assert.assertEquals("router:junos50:em0.0", link.getSink().getName());
VirtualLink vlink2 = (VirtualLink) virtualLinks.get(1);
Assert.assertNotNull(vlink2.getSource());
Assert.assertNotNull(vlink2.getSink());
Assert.assertNotNull(vlink2.getImplementedBy());
Assert.assertEquals("Virtual Link 0-2 should begin in Virtual Device 0.",
vlink2.getSource().getDevice(), vDevice0);
Assert.assertEquals("Virtual Link 0-2 should end in Virtual Device 2.", vlink2.getSink().getDevice(), vDevice2);
linkId = vlink2.getImplementedBy();
pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos40:em1.0-router:junos60:em0.0", link.getName());
Assert.assertEquals("router:junos40:em1.0", link.getSource().getName());
Assert.assertEquals("router:junos60:em0.0", link.getSink().getName());
VirtualLink vlink3 = (VirtualLink) virtualLinks.get(2);
Assert.assertNotNull(vlink3.getSource());
Assert.assertNotNull(vlink3.getSink());
Assert.assertNotNull(vlink3.getImplementedBy());
Assert.assertEquals("Virtual Link 1-2 should begin in Virtual Device 1.",
vlink3.getSource().getDevice(), vDevice1);
Assert.assertEquals("Virtual Link 1-2 should end in Virtual Device 2.",
vlink3.getSink().getDevice(), vDevice2);
linkId = vlink3.getImplementedBy();
pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos50:em1.0-router:junos60:em1.0", link.getName());
Assert.assertEquals("router:junos50:em1.0", link.getSource().getName());
Assert.assertEquals("router:junos60:em1.0", link.getSink().getName());
List<NetworkElement> paths = NetworkModelHelper.getNetworkElementsByClassName(Path.class, virtualModel.getNetworkElements());
Assert.assertEquals(3, paths.size());
Path path = (Path) paths.get(0);
Assert.assertEquals("0-1", path.getName());
List<NetworkConnection> pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink1));
path = (Path) paths.get(1);
Assert.assertEquals("0-2", path.getName());
pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink2));
path = (Path) paths.get(2);
Assert.assertEquals("1-2", path.getName());
pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink3));
}
@Test
public void Sample8Test() throws ResourceException, IOException, SerializationException, ParserConfigurationException, SAXException {
log.info("#############################");
log.info("## TEST 8 ##");
log.info("#############################");
networkResource.setModel(loadNetworkTopologyFromFile("/inputs/sample8/topology.xml"));
NetworkModel physicalModel = (NetworkModel)
networkResource.getModel();
Assert.assertNotNull(physicalModel);
updateDeviceCapacity(physicalModel, "router:junos20", 10);
updateDeviceCapacity(physicalModel, "router:junos30", 11);
updateDeviceCapacity(physicalModel, "router:junos40", 12);
updateDeviceCapacity(physicalModel, "router:junos50", 13);
updateDeviceCapacity(physicalModel, "router:junos60", 14);
VNTRequest vnt = loadRequestFromFile("/inputs/sample8/request.xml");
VNMappingCapability capab = (VNMappingCapability) vnmapperResource.getCapabilityByType(MAPPING_CAPABILITY_TYPE);
Assert.assertNotNull(capab);
VNMapperOutput out = capab.mapVN(networkResource.getResourceIdentifier().getId(), vnt);
VNState matchState = out.getResult().getMatchingState();
VNState mapState = out.getResult().getMappingState();
Assert.assertEquals(VNState.SUCCESSFUL, matchState);
Assert.assertEquals(VNState.SUCCESSFUL, mapState);
NetworkModel virtualModel = out.getNetworkModel();
Assert.assertNotNull(virtualModel);
// /// CHECK VIRTUAL DEVICES
List<NetworkElement> virtualDevices = NetworkModelHelper.getNetworkElementsByClassName(VirtualDevice.class,
virtualModel.getNetworkElements());
Assert.assertEquals("Virtual Network Model should contain 5 virtual devices.", 5,
virtualDevices.size());
VirtualDevice vDevice0 = (VirtualDevice) virtualDevices.get(0);
Assert.assertEquals("0", vDevice0.getName());
Assert.assertEquals("VirtualDevice 0 should match physical router router:junos20", vDevice0.getImplementedBy(),
"router:junos20");
VirtualDevice vDevice1 = (VirtualDevice) virtualDevices.get(1);
Assert.assertEquals("1", vDevice1.getName());
Assert.assertEquals("VirtualDevice 1 should match physical router router:junos60", vDevice1.getImplementedBy(),
"router:junos60");
VirtualDevice vDevice2 = (VirtualDevice) virtualDevices.get(2);
Assert.assertEquals("2", vDevice2.getName());
Assert.assertEquals("VirtualDevice 2 should match physical router router:junos50", vDevice2.getImplementedBy(),
"router:junos50");
VirtualDevice vDevice3 = (VirtualDevice) virtualDevices.get(3);
Assert.assertEquals("3", vDevice3.getName());
Assert.assertEquals("VirtualDevice 3 should match physical router router:junos40", vDevice3.getImplementedBy(),
"router:junos40");
VirtualDevice vDevice4 = (VirtualDevice) virtualDevices.get(4);
Assert.assertEquals("4", vDevice4.getName());
Assert.assertEquals("VirtualDevice 4 should match physical router router:junos30", vDevice4.getImplementedBy(),
"router:junos30");
// /// CHECK VIRTUAL LINKS
List<NetworkElement> virtualLinks = NetworkModelHelper.getNetworkElementsByClassName(VirtualLink.class,
virtualModel.getNetworkElements());
Assert.assertEquals("Virtual Network Model should contain 5 virtual links.", 5, virtualLinks.size());
VirtualLink vlink1 = (VirtualLink) virtualLinks.get(0);
Assert.assertNotNull(vlink1.getSource());
Assert.assertNotNull(vlink1.getSink());
Assert.assertNotNull(vlink1.getImplementedBy());
Assert.assertEquals("Virtual Link 0-1 should begin in Virtual Device 0.",
vlink1.getSource().getDevice(), vDevice0);
Assert.assertEquals("Virtual Link 0-1 should end in Virtual Device 1.",
vlink1.getSink().getDevice(), vDevice1);
String linkId = vlink1.getImplementedBy();
int pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
Link link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos20:em1.0-router:junos60:em2.0", link.getName());
Assert.assertEquals("router:junos20:em1.0", link.getSource().getName());
Assert.assertEquals("router:junos60:em2.0", link.getSink().getName());
VirtualLink vlink2 = (VirtualLink) virtualLinks.get(1);
Assert.assertNotNull(vlink2.getSource());
Assert.assertNotNull(vlink2.getSink());
Assert.assertNotNull(vlink2.getImplementedBy());
Assert.assertEquals("Virtual Link 3-2 should begin in Virtual Device 3.",
vlink2.getSource().getDevice(), vDevice3);
Assert.assertEquals("Virtual Link 3-2 should end in Virtual Device 2.",
vlink2.getSink().getDevice(), vDevice2);
linkId = vlink2.getImplementedBy();
pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos40:em0.0-router:junos50:em0.0", link.getName());
Assert.assertEquals("router:junos40:em0.0", link.getSource().getName());
Assert.assertEquals("router:junos50:em0.0", link.getSink().getName());
VirtualLink vlink3 = (VirtualLink) virtualLinks.get(2);
Assert.assertNotNull(vlink3.getSource());
Assert.assertNotNull(vlink3.getSink());
Assert.assertNotNull(vlink3.getImplementedBy());
Assert.assertEquals("Virtual Link 4-3 should begin in Virtual Device 4.",
vlink3.getSource().getDevice(), vDevice4);
Assert.assertEquals("Virtual Link 4-3 should end in Virtual Device 3.",
vlink3.getSink().getDevice(), vDevice3);
linkId = vlink3.getImplementedBy();
pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos30:em0.0-router:junos40:em2.0", link.getName());
Assert.assertEquals("router:junos30:em0.0", link.getSource().getName());
Assert.assertEquals("router:junos40:em2.0", link.getSink().getName());
VirtualLink vlink4 = (VirtualLink) virtualLinks.get(3);
Assert.assertNotNull(vlink4.getSource());
Assert.assertNotNull(vlink4.getSink());
Assert.assertNotNull(vlink4.getImplementedBy());
Assert.assertEquals("Virtual Link 0-4 should begin in Virtual Device 0.",
vlink4.getSource().getDevice(), vDevice0);
Assert.assertEquals("Virtual Link 0-4 should end in Virtual Device 4.",
vlink4.getSink().getDevice(), vDevice4);
linkId = vlink4.getImplementedBy();
pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos20:em0.0-router:junos30:em1.0", link.getName());
Assert.assertEquals("router:junos20:em0.0", link.getSource().getName());
Assert.assertEquals("router:junos30:em1.0", link.getSink().getName());
VirtualLink vlink5 = (VirtualLink) virtualLinks.get(4);
Assert.assertNotNull(vlink5.getSource());
Assert.assertNotNull(vlink5.getSink());
Assert.assertNotNull(vlink5.getImplementedBy());
Assert.assertEquals("Virtual Link 2-1 should begin in Virtual Device 2.",
vlink5.getSource().getDevice(), vDevice2);
Assert.assertEquals("Virtual Link 2-1 should end in Virtual Device 1.",
vlink5.getSink().getDevice(), vDevice1);
linkId = vlink5.getImplementedBy();
pos = NetworkModelHelper.getNetworkElementByName(linkId, physicalModel.getNetworkElements());
link = (Link) physicalModel.getNetworkElements().get(pos);
Assert.assertEquals("router:junos50:em1.0-router:junos60:em1.0", link.getName());
Assert.assertEquals("router:junos50:em1.0", link.getSource().getName());
Assert.assertEquals("router:junos60:em1.0", link.getSink().getName());
List<NetworkElement> paths = NetworkModelHelper.getNetworkElementsByClassName(Path.class, virtualModel.getNetworkElements());
Assert.assertEquals(3, paths.size());
Path path = (Path) paths.get(0);
Assert.assertEquals("0-1", path.getName());
List<NetworkConnection> pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink1));
path = (Path) paths.get(1);
Assert.assertEquals("0-2", path.getName());
pathLinks = path.getPathSegments();
Assert.assertEquals(3, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink2));
Assert.assertTrue(pathLinks.contains(vlink3));
Assert.assertTrue(pathLinks.contains(vlink4));
path = (Path) paths.get(2);
Assert.assertEquals("1-2", path.getName());
pathLinks = path.getPathSegments();
Assert.assertEquals(1, pathLinks.size());
Assert.assertTrue(pathLinks.contains(vlink5));
}
private void updateDeviceCapacity(NetworkModel physicalModel, String deviceName, int capacity) {
Device device =
NetworkModelHelper.getDeviceByName(physicalModel, deviceName);
device.getVirtualizationService().setVirtualDevicesCapacity(capacity);
}
/**
* Sample topology as sample 1, with vnode capacity > 16.
*/
@Test
public void overloadVNodeCapacityTest() throws Exception {
log.info("#############################");
log.info("## TEST 9 ##");
log.info("#############################");
networkResource.setModel(loadNetworkTopologyFromFile("/inputs/sample9/topology.xml"));
VNTRequest vnt = loadRequestFromFile("/inputs/sample9/request.xml");
VNMappingCapability capab = (VNMappingCapability) vnmapperResource.getCapabilityByType(MAPPING_CAPABILITY_TYPE);
Assert.assertNotNull(capab);
VNMapperOutput out = capab.mapVN(networkResource.getResourceIdentifier().getId(), vnt);
VNState matchState = out.getResult().getMatchingState();
VNState mapState = out.getResult().getMappingState();
Assert.assertEquals(VNState.ERROR, matchState);
Assert.assertEquals(VNState.SKIPPED, mapState);
}
/**
* Sample topology as sample 1, but request contains more Vnodes than available.
*/
@Test
@Ignore
public void overloadVNodeNumTest() throws Exception {
networkResource.setModel(loadNetworkTopologyFromFile("/inputs/sample11/topology.xml"));
VNTRequest vnt = loadRequestFromFile("/inputs/sample11/request.xml");
VNMappingCapability capab = (VNMappingCapability) vnmapperResource.getCapabilityByType(MAPPING_CAPABILITY_TYPE);
Assert.assertNotNull(capab);
VNMapperOutput out = capab.mapVN(networkResource.getResourceIdentifier().getId(), vnt);
VNState matchState = out.getResult().getMatchingState();
VNState mapState = out.getResult().getMappingState();
Assert.assertEquals(VNState.SUCCESSFUL, matchState);
Assert.assertEquals(VNState.ERROR, mapState);
}
/**
* Sample topology as sample 1, but there's a link in virtual request requiring more capacity than available.
*/
@Test
@Ignore
public void overloadLinkCapacityTest() throws Exception {
networkResource.setModel(loadNetworkTopologyFromFile("/inputs/sample10/topology.xml"));
VNTRequest vnt = loadRequestFromFile("/inputs/sample10/request.xml");
VNMappingCapability capab = (VNMappingCapability) vnmapperResource.getCapabilityByType(MAPPING_CAPABILITY_TYPE);
Assert.assertNotNull(capab);
VNMapperOutput out = capab.mapVN(networkResource.getResourceIdentifier().getId(), vnt);
VNState matchState = out.getResult().getMatchingState();
VNState mapState = out.getResult().getMappingState();
Assert.assertEquals(VNState.SUCCESSFUL, matchState);
Assert.assertEquals(VNState.ERROR, mapState);
}
void startNetworkResource() throws ResourceException {
List<CapabilityDescriptor> capDescriptors = new ArrayList<CapabilityDescriptor>();
capDescriptors.add(ResourceHelper.newCapabilityDescriptor(ACTION_NAME,
CAPABILITY_VERSION,
BASIC_CAPABILITY_TYPE,
CAPABILITY_URI));
// Network Resource Descriptor
ResourceDescriptor resourceDescriptor = ResourceHelper.newResourceDescriptor(capDescriptors, NETWORK_RESOURCE_TYPE, RESOURCE_URI,
NETWORK_RESOURCE_NAME);
// Create resource
networkResource = resourceManager.createResource(resourceDescriptor);
// Start resource
resourceManager.startResource(networkResource.getResourceIdentifier());
}
private IModel loadNetworkTopologyFromFile(String url) throws IOException, SerializationException, ResourceException {
IModel networkModel = null;
String xmlTopology = textFileToString(url);
NetworkTopology networkTopology = (NetworkTopology) ObjectSerializer.fromXml(xmlTopology, NetworkTopology.class);
ResourceDescriptor descriptor = new ResourceDescriptor();
descriptor.setNetworkTopology(networkTopology);
networkModel = NetworkMapperDescriptorToModel.descriptorToModel(descriptor);
return networkModel;
}
private String textFileToString(String fileLocation) throws IOException {
String fileString = "";
BufferedReader br = new BufferedReader(
new InputStreamReader(getClass().getResourceAsStream(fileLocation)));
String line;
while ((line = br.readLine()) != null) {
fileString += line += "\n";
}
br.close();
return fileString;
}
private VNTRequest loadRequestFromFile(String url) throws ResourceException, ParserConfigurationException, SAXException, IOException {
String xmlRequest = textFileToString(url);
DocumentBuilder newDocumentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = newDocumentBuilder.parse(new ByteArrayInputStream(xmlRequest.getBytes()));
VNTRequest vnt = new VNTRequest();
return vnt.parseVNTRequestFromDoc(doc);
}
}