package org.opennaas.extensions.vcpe.test; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; import java.util.Iterator; import java.util.List; import java.util.Properties; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import junit.framework.Assert; import org.junit.Test; import org.opennaas.core.resources.ObjectSerializer; import org.opennaas.core.resources.SerializationException; import org.opennaas.extensions.vcpe.manager.PhysicalInfrastructureLoader; import org.opennaas.extensions.vcpe.manager.model.VCPEPhysicalInfrastructure; import org.opennaas.extensions.vcpe.model.BGP; import org.opennaas.extensions.vcpe.model.VCPENetworkElement; import org.opennaas.extensions.vcpe.model.VCPENetworkModel; import org.opennaas.extensions.vcpe.model.VRRP; import org.opennaas.extensions.vcpe.model.helper.VCPENetworkModelHelper; public class ModelTest { private static final String PROPERTIES_PATH = "/org.opennaas.extensions.vcpe.manager.phyinfrastructure.cfg"; @Test public void marshallTest() throws JAXBException { VCPENetworkModel model = VCPENetworkModelHelper.generateSampleModel(); StringWriter writer = (StringWriter) marshall(model, new StringWriter()); VCPENetworkModel loaded = unmarshall(new StringReader(writer.toString())); Assert.assertEquals(model, loaded); } @Test public void marshallUsingToXmlTest() throws JAXBException, SerializationException { VCPENetworkModel model = VCPENetworkModelHelper.generateSampleModel(); String xml = model.toXml(); VCPENetworkModel loaded = (VCPENetworkModel) ObjectSerializer.fromXml(xml, VCPENetworkModel.class); String xml2 = loaded.toXml(); // System.out.println(xml2); Assert.assertEquals(model, loaded); Assert.assertEquals(xml, xml2); } @Test public void deepCopyTest() throws SerializationException { VCPENetworkModel model = VCPENetworkModelHelper.generateFullSampleModel(); VCPENetworkModel modelCopy = model.deepCopy(); Assert.assertNotNull(modelCopy); Assert.assertFalse(model == modelCopy); Assert.assertTrue(model.equals(modelCopy)); BGP bgp = model.getBgp(); BGP bgpCopy = modelCopy.getBgp(); Assert.assertFalse(bgp == bgpCopy); Assert.assertTrue(bgp.equals(bgpCopy)); VRRP vrrp = model.getVrrp(); VRRP vrrpCopy = modelCopy.getVrrp(); Assert.assertFalse(vrrp == vrrpCopy); Assert.assertTrue(vrrp.equals(vrrpCopy)); List<VCPENetworkElement> netElements = model.getElements(); List<VCPENetworkElement> netElementsCopy = modelCopy.getElements(); Assert.assertEquals(netElements.size(), netElementsCopy.size()); Iterator<VCPENetworkElement> iterator = netElements.iterator(); while (iterator.hasNext()) { VCPENetworkElement netElement = iterator.next(); VCPENetworkElement netElementCopy = VCPENetworkModelHelper.getElementByTemplateName(modelCopy, netElement.getTemplateName()); Assert.assertFalse(netElement == netElementCopy); Assert.assertTrue(netElement.equals(netElementCopy)); } } @Test public void physicalInfrastrtuctureLoaderModelTest() throws IOException { Properties props = new Properties(); props.load(this.getClass().getResourceAsStream(PROPERTIES_PATH)); PhysicalInfrastructureLoader loader = new PhysicalInfrastructureLoader(); VCPEPhysicalInfrastructure phy = loader.loadPhysicalInfrastuctureFromProperties(props); Assert.assertNotNull(phy); Assert.assertNotNull(phy.getPhyRouterCore()); Assert.assertNotNull(phy.getPhyRouterMaster()); Assert.assertNotNull(phy.getPhyRouterBackup()); Assert.assertNotNull(phy.getPhyBoD()); Assert.assertNotNull(phy.getPhyLinks()); Assert.assertFalse(phy.getPhyLinks().isEmpty()); Assert.assertFalse(phy.getAllElements().isEmpty()); Assert.assertTrue(phy.getAllElements() .contains(phy.getPhyRouterCore())); Assert.assertTrue(phy.getAllElements() .contains(phy.getPhyRouterMaster())); Assert.assertTrue(phy.getAllElements() .contains(phy.getPhyRouterBackup())); Assert.assertTrue(phy.getAllElements() .contains(phy.getPhyBoD())); Assert.assertTrue(phy.getAllElements() .containsAll(phy.getPhyLinks())); } private Writer marshall(VCPENetworkModel model, Writer writer) throws JAXBException { JAXBContext context = JAXBContext.newInstance(VCPENetworkModel.class); // using jaxb.index file Marshaller m = context.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); m.marshal(model, writer); return writer; } private VCPENetworkModel unmarshall(Reader reader) throws JAXBException { JAXBContext context = JAXBContext.newInstance(VCPENetworkModel.class); // using jaxb.index file Unmarshaller unmarshaller = context.createUnmarshaller(); return (VCPENetworkModel) unmarshaller.unmarshal(reader); } }