package org.opennaas.extensions.vcpe.test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert;
import org.junit.Test;
import org.opennaas.extensions.vcpe.model.Interface;
import org.opennaas.extensions.vcpe.model.Link;
import org.opennaas.extensions.vcpe.model.Router;
import org.opennaas.extensions.vcpe.model.VCPENetworkElement;
import org.opennaas.extensions.vcpe.model.VCPENetworkModel;
import org.opennaas.extensions.vcpe.model.helper.VCPENetworkModelHelper;
public class NetworkModelHelperTest {
VCPENetworkModel vcpeModel;
Router router;
static final String routerName = "vCPE1";
public void setUp() throws IOException {
vcpeModel = VCPENetworkModelHelper.generateSampleModel();
router = VCPENetworkModelHelper.getRouterByName(vcpeModel.getElements(), routerName);
}
/**
* Test creates a sample model, remove one of the routers, and checks its interfaces and links has been removed from model.
*
* @throws IOException
*/
@Test
public void removeAllRouterInformationFromModelTest() throws IOException {
setUp();
// checking pre-state
List<VCPENetworkElement> vcpeElements = vcpeModel.getElements();
Assert.assertEquals(4, VCPENetworkModelHelper.getRouters(vcpeElements).size());
Router router = VCPENetworkModelHelper.getRouterByName(vcpeElements, routerName);
int modelInterfaces = VCPENetworkModelHelper.getInterfaces(vcpeElements).size();
List<Interface> routerInterfaces = router.getInterfaces();
Assert.assertEquals(3, routerInterfaces.size());
int modelLinks = VCPENetworkModelHelper.getLinks(vcpeElements).size();
List<Link> routerLinks = VCPENetworkModelHelper.getAllRouterLinksFromModel(vcpeModel, router);
Assert.assertEquals(5, routerLinks.size());
VCPENetworkModelHelper.removeAllRouterInformationFromModel(vcpeModel, routerName);
// checking post-state
vcpeElements = vcpeModel.getElements();
Assert.assertEquals(3, VCPENetworkModelHelper.getRouters(vcpeElements).size());
Assert.assertEquals(modelLinks - 5, VCPENetworkModelHelper.getLinks(vcpeElements).size());
for (Interface iface : routerInterfaces)
Assert.assertFalse(vcpeElements.contains(iface));
Assert.assertEquals(modelInterfaces - 3, VCPENetworkModelHelper.getInterfaces(vcpeElements).size());
for (Link link : routerLinks)
Assert.assertFalse(vcpeElements.contains(link));
}
/**
* Changed to be checked in router1:
*
* - interface fe-0/3/2.1 renamed to fe-0/3/2.2 - interface ge-0/2/0.1 not updated - interface lt-0/1/2.1 changed ip address
*
* @throws IOException
*/
@Test
public void updateRouterInformationTest() throws IOException {
setUp();
// CHECKING PRE-STATE
Assert.assertTrue(vcpeModel.getElements().contains(router));
List<Interface> oldModelIfaces = VCPENetworkModelHelper.getInterfaces(vcpeModel.getElements());
Assert.assertEquals(26, oldModelIfaces.size());
List<Interface> routerIfaces = router.getInterfaces();
Assert.assertEquals(3, routerIfaces.size());
List<Link> routerLinks = VCPENetworkModelHelper.getAllRouterLinksFromModel(vcpeModel, router);
Assert.assertEquals(5, routerLinks.size());
List<Link> oldModelLinks = VCPENetworkModelHelper.getLinks(vcpeModel.getElements());
Interface oldIface1 = (Interface) VCPENetworkModelHelper.getElementByName(vcpeModel.getElements(), "fe-0/3/2.1");
Assert.assertNotNull(oldIface1);
Interface oldIface2 = (Interface) VCPENetworkModelHelper.getElementByName(vcpeModel.getElements(), "ge-0/2/0.1");
Assert.assertNotNull(oldIface2);
String oldIface2IP = oldIface2.getIpAddress();
Interface oldIface3 = (Interface) VCPENetworkModelHelper.getElementByName(vcpeModel.getElements(), "lt-0/1/2.1");
Assert.assertNotNull(oldIface3);
String oldIface3IP = oldIface3.getIpAddress();
Router editedRouter = VCPENetworkModelHelper.generateSampleRouter();
List<Link> newLinks = prepareNewLinks(editedRouter);
// CHECKING POST-STATE
VCPENetworkModelHelper.updateRouterInformation(vcpeModel, editedRouter, newLinks);
// router in model
router = VCPENetworkModelHelper.getRouterByName(vcpeModel.getElements(), editedRouter.getName());
// Assert.assertEquals(routerName, router.getName());
// number of interfaces in Model
List<Interface> newModelIfaces = VCPENetworkModelHelper.getInterfaces(vcpeModel.getElements());
Assert.assertEquals(oldModelIfaces.size(), newModelIfaces.size());
// router ifaces
List<Interface> ifaces = router.getInterfaces();
Assert.assertEquals(3, ifaces.size());
Assert.assertFalse(vcpeModel.getElements().contains(oldIface1));
Assert.assertFalse(router.getInterfaces().contains(oldIface1));
Assert.assertNull(VCPENetworkModelHelper.getElementByName(vcpeModel.getElements(), "fe-0/3/2.1"));
Assert.assertTrue(vcpeModel.getElements().contains(oldIface2));
Assert.assertTrue(router.getInterfaces().contains(oldIface2));
Assert.assertEquals(oldIface2IP, oldIface2.getIpAddress());
Assert.assertFalse(vcpeModel.getElements().contains(oldIface3));
Assert.assertFalse(router.getInterfaces().contains(oldIface3));
Interface newIface3 = (Interface) VCPENetworkModelHelper.getElementByName(vcpeModel.getElements(), "lt-0/1/2.1");
Assert.assertNotNull(newIface3);
Assert.assertEquals("192.168.0.9/30", newIface3.getIpAddress());
Assert.assertFalse(oldIface3IP.equals(newIface3.getIpAddress()));
// router links
List<Link> newRouterLinks = VCPENetworkModelHelper.getAllRouterLinksFromModel(vcpeModel, router);
Assert.assertEquals(newLinks.size(), newRouterLinks.size());
Assert.assertTrue(newRouterLinks.containsAll(newLinks));
List<Link> newModelLinks = VCPENetworkModelHelper.getLinks(vcpeModel.getElements());
Assert.assertEquals(oldModelLinks.size(), newModelLinks.size());
Assert.assertFalse(oldModelLinks.equals(newModelLinks));
}
private List<Link> prepareNewLinks(Router editedRouter) {
List<Link> links = new ArrayList<Link>();
Interface iface1 = editedRouter.getInterfaces().get(0);
Interface iface1other = (Interface) VCPENetworkModelHelper.getElementByName(vcpeModel.getElements(), "lt-0/1/2.3");
Link link1 = new Link();
link1.setSource(iface1);
link1.setSink(iface1other);
Interface iface2 = editedRouter.getInterfaces().get(1);
Interface iface2other = (Interface) VCPENetworkModelHelper.getElementByName(vcpeModel.getElements(), "autobahnID:000001.2");
Link link2 = new Link();
link2.setSource(iface2);
link2.setSink(iface2other);
Interface iface3 = editedRouter.getInterfaces().get(2);
Interface iface3other = (Interface) VCPENetworkModelHelper.getElementByName(vcpeModel.getElements(), "lt-0/1/2.3");
Link link3 = new Link();
link3.setSource(iface3);
link3.setSink(iface3other);
Interface inter2 = (Interface) VCPENetworkModelHelper.getElementByName(vcpeModel.getElements(), "fe-0/3/3.1");
Link link4 = new Link();
link4.setSource(iface1);
link4.setSink(inter2);
Interface clientOther = (Interface) VCPENetworkModelHelper.getElementByName(vcpeModel.getElements(), "autobahnID:000003.1");
Link link5 = new Link();
link5.setSource(iface2);
link5.setSink(clientOther);
links.add(link1);
links.add(link2);
links.add(link3);
links.add(link4);
links.add(link5);
return links;
}
}