package org.opennaas.extensions.router.model.tests; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.StringReader; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import org.junit.Before; import org.junit.Test; import org.opennaas.extensions.router.model.ComputerSystem; import org.opennaas.extensions.router.model.EthernetPort; import org.opennaas.extensions.router.model.LogicalDevice; import org.opennaas.extensions.router.model.LogicalPort; import org.opennaas.extensions.router.model.NetworkPort; import org.opennaas.extensions.router.model.VLANEndpoint; public class ModelToXmlTest { private JAXBContext jc; @Before public void initJaxbContext() throws JAXBException { jc = JAXBContext.newInstance( org.opennaas.extensions.router.model.AdminDomain.class, org.opennaas.extensions.router.model.AreaOfConfiguration.class, org.opennaas.extensions.router.model.Association.class, org.opennaas.extensions.router.model.BindsTo.class, org.opennaas.extensions.router.model.Component.class, org.opennaas.extensions.router.model.ComputerSystem.class, org.opennaas.extensions.router.model.Dependency.class, org.opennaas.extensions.router.model.DeviceConnection.class, org.opennaas.extensions.router.model.DeviceSAPImplementation.class, org.opennaas.extensions.router.model.EnabledLogicalElement.class, org.opennaas.extensions.router.model.EndpointInArea.class, org.opennaas.extensions.router.model.EthernetPort.class, org.opennaas.extensions.router.model.FCPort.class, org.opennaas.extensions.router.model.FilterEntryBase.class, org.opennaas.extensions.router.model.GREService.class, org.opennaas.extensions.router.model.GRETunnelConfiguration.class, org.opennaas.extensions.router.model.GRETunnelEndpoint.class, org.opennaas.extensions.router.model.GRETunnelServiceConfiguration.class, org.opennaas.extensions.router.model.GRETunnelService.class, org.opennaas.extensions.router.model.HostedDependency.class, org.opennaas.extensions.router.model.HostedRoute.class, org.opennaas.extensions.router.model.HostedRoutingServices.class, org.opennaas.extensions.router.model.HostedService.class, org.opennaas.extensions.router.model.IPHeadersFilter.class, org.opennaas.extensions.router.model.IPProtocolEndpoint.class, org.opennaas.extensions.router.model.LogicalDevice.class, org.opennaas.extensions.router.model.LogicalElement.class, org.opennaas.extensions.router.model.LogicalModule.class, org.opennaas.extensions.router.model.LogicalPort.class, org.opennaas.extensions.router.model.LogicalTunnelPort.class, org.opennaas.extensions.router.model.ManagedElement.class, org.opennaas.extensions.router.model.ManagedSystemElement.class, org.opennaas.extensions.router.model.ModulePort.class, org.opennaas.extensions.router.model.NetworkPort.class, org.opennaas.extensions.router.model.NetworkService.class, org.opennaas.extensions.router.model.NextHopIPRoute.class, org.opennaas.extensions.router.model.NextHopRoute.class, org.opennaas.extensions.router.model.OSPFAreaConfiguration.class, org.opennaas.extensions.router.model.OSPFArea.class, org.opennaas.extensions.router.model.OSPFProtocolEndpointBase.class, org.opennaas.extensions.router.model.OSPFProtocolEndpoint.class, org.opennaas.extensions.router.model.OSPFServiceConfiguration.class, org.opennaas.extensions.router.model.OSPFService.class, org.opennaas.extensions.router.model.PortImplementsEndpoint.class, org.opennaas.extensions.router.model.PortOnDevice.class, org.opennaas.extensions.router.model.ProtocolEndpoint.class, org.opennaas.extensions.router.model.ProvidesEndpoint.class, org.opennaas.extensions.router.model.RouteCalculationService.class, org.opennaas.extensions.router.model.RouteUsesEndpoint.class, org.opennaas.extensions.router.model.RoutingProtocolDomain.class, org.opennaas.extensions.router.model.SAPSAPDependency.class, org.opennaas.extensions.router.model.ServiceAccessBySAP.class, org.opennaas.extensions.router.model.ServiceAccessPoint.class, org.opennaas.extensions.router.model.Service.class, org.opennaas.extensions.router.model.SystemComponent.class, org.opennaas.extensions.router.model.SystemDevice.class, org.opennaas.extensions.router.model.System.class, org.opennaas.extensions.router.model.VLANEndpoint.class); } @Test public void testSampleModel2Xml2Java() throws Exception { ComputerSystem original = createSampleModel(); // transform to XML Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); StringWriter writer = new StringWriter(); marshaller.marshal(original, writer); // Load from XML Unmarshaller unmarshaller = jc.createUnmarshaller(); StringReader reader = new StringReader(writer.toString()); ComputerSystem loaded = (ComputerSystem) unmarshaller.unmarshal(reader); check(original, loaded); } private void check(ComputerSystem original, ComputerSystem loaded) { assertEquals(original.getName(), loaded.getName()); assertEquals(original.getElementName(), loaded.getElementName()); assertEquals(original.getLogicalDevices().size(), loaded.getLogicalDevices().size()); for (int i = 0; i < original.getLogicalDevices().size(); i++) { // check subtypes are maintained assertEquals(original.getLogicalDevices().get(i).getClass(), loaded.getLogicalDevices().get(i).getClass()); assertEquals(original.getLogicalDevices().get(i).getName(), loaded.getLogicalDevices().get(i).getName()); if (original.getLogicalDevices().get(i) instanceof NetworkPort) { assertEquals(((NetworkPort) original.getLogicalDevices().get(i)).getPortNumber(), ((NetworkPort) loaded.getLogicalDevices().get(i)).getPortNumber()); } assertEquals(((LogicalPort) original.getLogicalDevices().get(i)).getProtocolEndpoint().size(), ((LogicalPort) loaded.getLogicalDevices() .get(i)).getProtocolEndpoint().size()); for (int j = 0; j < ((LogicalPort) original.getLogicalDevices().get(i)).getProtocolEndpoint().size(); j++) { // check subtypes are maintained assertEquals(((LogicalPort) original.getLogicalDevices().get(i)).getProtocolEndpoint().get(j).getClass(), ((LogicalPort) loaded.getLogicalDevices().get(i)).getProtocolEndpoint().get(j).getClass()); // check reverse association is loaded assertTrue("Reverse association should be loaded", ((LogicalPort) loaded.getLogicalDevices().get(i)).getProtocolEndpoint().get(j) .getLogicalPorts() .contains(loaded.getLogicalDevices().get(i))); } } } private ComputerSystem createSampleModel() { ComputerSystem model = new ComputerSystem(); model.setName("testRouter"); model.setElementName("testRouter"); model.addLogicalDevice(createEthernetPortWithVlan("fe-0/1/2", 0, 0)); model.addLogicalDevice(createEthernetPortWithVlan("fe-0/1/2", 1, 1)); return model; } private LogicalDevice createEthernetPortWithVlan(String interfaceName, int portNumber, int vlanId) { EthernetPort eth = new EthernetPort(); eth.setName(interfaceName); eth.setPortNumber(portNumber); VLANEndpoint vlanEp = new VLANEndpoint(); vlanEp.setVlanID(vlanId); eth.addProtocolEndpoint(vlanEp); return eth; } }