package org.opennaas.itests.vcpe; 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.util.List; import javax.inject.Inject; import junit.framework.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.opennaas.core.resources.IResourceManager; import org.opennaas.core.resources.IResourceRepository; import org.opennaas.extensions.vcpe.manager.templates.sp.SPTemplateConstants; import org.opennaas.extensions.vcpe.manager.templates.sp.SingleProviderTemplate; import org.opennaas.extensions.vcpe.model.Domain; import org.opennaas.extensions.vcpe.model.Interface; import org.opennaas.extensions.vcpe.model.Link; import org.opennaas.extensions.vcpe.model.LogicalRouter; 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; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.junit.Configuration; import org.ops4j.pax.exam.junit.ExamReactorStrategy; import org.ops4j.pax.exam.junit.JUnit4TestRunner; import org.ops4j.pax.exam.spi.reactors.EagerSingleStagedReactorFactory; import org.ops4j.pax.exam.util.Filter; import org.osgi.service.blueprint.container.BlueprintContainer; @RunWith(JUnit4TestRunner.class) @ExamReactorStrategy(EagerSingleStagedReactorFactory.class) public class SPVCPETemplateTest { @Inject private IResourceManager rm; @Inject @Filter("(type=vcpenet)") private IResourceRepository resourceRepo; @SuppressWarnings("unused") @Inject @Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.vcpe)", timeout = 20000) private BlueprintContainer vcpeBundleBlueprintContainer; SingleProviderTemplate template; @Configuration public static Option[] configuration() { return options(opennaasDistributionConfiguration(), includeFeatures("opennaas-vcpe"), noConsole(), keepRuntimeFolder()); } @Before public void initTemplate() { template = new SingleProviderTemplate(); } @Test public void testPhysicalSuggestionHasAllPhyElements() { VCPENetworkModel phy = template.getPhysicalInfrastructureSuggestion(); Assert.assertEquals(3, VCPENetworkModelHelper.getRouters(phy.getElements()).size()); Assert.assertEquals(1, VCPENetworkModelHelper.getDomains(phy.getElements()).size()); Assert.assertEquals(17, VCPENetworkModelHelper.getInterfaces(phy.getElements()).size()); Assert.assertEquals(0, VCPENetworkModelHelper.getLinks(phy.getElements()).size()); checkModelHasAllPhysicalElements(phy); } @Test public void testAllPhysicalSuggestionElementsHaveName() { VCPENetworkModel phy = template.getPhysicalInfrastructureSuggestion(); for (VCPENetworkElement elem : phy.getElements()) { Assert.assertNotNull(elem.getName()); } for (Interface iface : VCPENetworkModelHelper.getInterfaces(phy.getElements())) { Assert.assertNotNull(iface.getPhysicalInterfaceName()); Assert.assertEquals(iface.getPhysicalInterfaceName(), iface.getName()); } } @Test public void testLogicalSuggestionHasAllElements() { VCPENetworkModel phy = template.getPhysicalInfrastructureSuggestion(); VCPENetworkModel suggestion = template.getLogicalInfrastructureSuggestion(phy); checkModelHasAllPhysicalElements(suggestion); checkModelHasAllLogicalElements(suggestion); } @Test public void testBuildModelFromSuggestionHasAllElements() { VCPENetworkModel phy = template.getPhysicalInfrastructureSuggestion(); VCPENetworkModel suggestion = template.getLogicalInfrastructureSuggestion(phy); VCPENetworkModel build = template.buildModel(suggestion); checkModelHasAllPhysicalElements(build); checkModelHasAllLogicalElements(build); } // TODO add a test for names of logical suggestion private void checkModelHasAllPhysicalElements(VCPENetworkModel model) { Router router = (Router) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.CORE_PHY_ROUTER); Assert.assertNotNull(router); Assert.assertTrue(router.getInterfaces().size() >= 3); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.CORE_PHY_LO_INTERFACE)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.CORE_PHY_INTERFACE_MASTER)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.CORE_PHY_INTERFACE_BKP)); Assert.assertTrue(VCPENetworkModelHelper.getInterfaces(model.getElements()).containsAll(router.getInterfaces())); router = (Router) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.CPE1_PHY_ROUTER); Assert.assertNotNull(router); Assert.assertTrue(router.getInterfaces().size() >= 4); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.INTER1_PHY_INTERFACE_LOCAL)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.DOWN1_PHY_INTERFACE_LOCAL)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.UP1_PHY_INTERFACE_LOCAL)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.LO1_PHY_INTERFACE)); Assert.assertTrue(VCPENetworkModelHelper.getInterfaces(model.getElements()).containsAll(router.getInterfaces())); router = (Router) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.CPE2_PHY_ROUTER); Assert.assertNotNull(router); Assert.assertTrue(router.getInterfaces().size() >= 4); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.INTER2_PHY_INTERFACE_LOCAL)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.DOWN2_PHY_INTERFACE_LOCAL)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.UP2_PHY_INTERFACE_LOCAL)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.LO2_PHY_INTERFACE)); Assert.assertTrue(VCPENetworkModelHelper.getInterfaces(model.getElements()).containsAll(router.getInterfaces())); Domain domain = (Domain) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.AUTOBAHN); Assert.assertNotNull(domain); Assert.assertTrue(domain.getInterfaces().size() >= 6); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(domain.getInterfaces(), SPTemplateConstants.INTER1_PHY_INTERFACE_AUTOBAHN)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(domain.getInterfaces(), SPTemplateConstants.DOWN1_PHY_INTERFACE_AUTOBAHN)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(domain.getInterfaces(), SPTemplateConstants.INTER2_PHY_INTERFACE_AUTOBAHN)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(domain.getInterfaces(), SPTemplateConstants.DOWN2_PHY_INTERFACE_AUTOBAHN)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(domain.getInterfaces(), SPTemplateConstants.CLIENT1_PHY_INTERFACE_AUTOBAHN)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(domain.getInterfaces(), SPTemplateConstants.CLIENT1_PHY_INTERFACE_AUTOBAHN)); Assert.assertTrue(VCPENetworkModelHelper.getInterfaces(model.getElements()).containsAll(domain.getInterfaces())); } private void checkModelHasAllLogicalElements(VCPENetworkModel model) { LogicalRouter router = (LogicalRouter) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.VCPE1_ROUTER); Assert.assertNotNull(router); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.INTER1_INTERFACE_LOCAL)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.DOWN1_INTERFACE_LOCAL)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.UP1_INTERFACE_LOCAL)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.LO1_INTERFACE)); Assert.assertTrue(VCPENetworkModelHelper.getInterfaces(model.getElements()).containsAll(router.getInterfaces())); router = (LogicalRouter) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.VCPE2_ROUTER); Assert.assertNotNull(router); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.INTER2_INTERFACE_LOCAL)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.DOWN2_INTERFACE_LOCAL)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.UP2_INTERFACE_LOCAL)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(router.getInterfaces(), SPTemplateConstants.LO2_INTERFACE)); Assert.assertTrue(VCPENetworkModelHelper.getInterfaces(model.getElements()).containsAll(router.getInterfaces())); Domain domain = (Domain) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.AUTOBAHN); Assert.assertNotNull(domain); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(domain.getInterfaces(), SPTemplateConstants.INTER1_INTERFACE_AUTOBAHN)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(domain.getInterfaces(), SPTemplateConstants.DOWN1_INTERFACE_AUTOBAHN)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(domain.getInterfaces(), SPTemplateConstants.INTER2_INTERFACE_AUTOBAHN)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(domain.getInterfaces(), SPTemplateConstants.DOWN2_INTERFACE_AUTOBAHN)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(domain.getInterfaces(), SPTemplateConstants.CLIENT1_INTERFACE_AUTOBAHN)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(domain.getInterfaces(), SPTemplateConstants.CLIENT2_INTERFACE_AUTOBAHN)); Assert.assertTrue(VCPENetworkModelHelper.getInterfaces(model.getElements()).containsAll(domain.getInterfaces())); Router core = (Router) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.CORE_PHY_ROUTER); Assert.assertNotNull(core); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(core.getInterfaces(), SPTemplateConstants.CORE_LO_INTERFACE)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(core.getInterfaces(), SPTemplateConstants.UP1_INTERFACE_PEER)); Assert.assertNotNull(VCPENetworkModelHelper.getElementByTemplateName(core.getInterfaces(), SPTemplateConstants.UP2_INTERFACE_PEER)); Assert.assertTrue(VCPENetworkModelHelper.getInterfaces(model.getElements()).containsAll(core.getInterfaces())); // test all links are in place List<Link> links = VCPENetworkModelHelper.getLinks(model.getElements()); Assert.assertTrue(links.contains((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER_LINK))); Assert.assertTrue(links.contains((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN1_LINK))); Assert.assertTrue(links.contains((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN2_LINK))); Assert.assertTrue(links.contains((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.UP1_LINK))); Assert.assertTrue(links.contains((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.UP2_LINK))); Assert.assertTrue(links.contains((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER1_LINK_LOCAL))); Assert.assertTrue(links.contains((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER_LINK_AUTOBAHN))); Assert.assertTrue(links.contains((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER2_LINK_LOCAL))); Assert.assertTrue(links.contains((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN1_LINK_LOCAL))); Assert.assertTrue(links.contains((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN1_LINK_AUTOBAHN))); Assert.assertTrue(links.contains((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN2_LINK_LOCAL))); Assert.assertTrue(links.contains((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN2_LINK_AUTOBAHN))); Link link = (Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER_LINK); Assert.assertNotNull(link); Assert.assertTrue(link.getImplementedBy().contains( (Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER1_LINK_LOCAL))); Assert.assertTrue(link.getImplementedBy().contains( (Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER_LINK_AUTOBAHN))); Assert.assertTrue(link.getImplementedBy().contains( (Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER2_LINK_LOCAL))); link = (Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN1_LINK); Assert.assertNotNull(link); Assert.assertTrue(link.getImplementedBy().contains( (Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN1_LINK_LOCAL))); Assert.assertTrue(link.getImplementedBy().contains( (Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN1_LINK_AUTOBAHN))); link = (Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN2_LINK); Assert.assertNotNull(link); Assert.assertTrue(link.getImplementedBy().contains( (Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN2_LINK_LOCAL))); Assert.assertTrue(link.getImplementedBy().contains( (Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN2_LINK_AUTOBAHN))); // test link interfaces Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER1_INTERFACE_LOCAL), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER_LINK)).getSource()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER2_INTERFACE_LOCAL), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER_LINK)).getSink()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER1_INTERFACE_LOCAL), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER1_LINK_LOCAL)).getSource()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER1_INTERFACE_AUTOBAHN), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER1_LINK_LOCAL)).getSink()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER1_INTERFACE_AUTOBAHN), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER_LINK_AUTOBAHN)).getSource()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER2_INTERFACE_AUTOBAHN), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER_LINK_AUTOBAHN)).getSink()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER2_INTERFACE_LOCAL), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER2_LINK_LOCAL)).getSource()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER2_INTERFACE_AUTOBAHN), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.INTER2_LINK_LOCAL)).getSink()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN1_INTERFACE_LOCAL), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN1_LINK)).getSource()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.CLIENT1_INTERFACE_AUTOBAHN), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN1_LINK)).getSink()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN1_INTERFACE_LOCAL), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN1_LINK_LOCAL)).getSource()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN1_INTERFACE_AUTOBAHN), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN1_LINK_LOCAL)).getSink()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN1_INTERFACE_AUTOBAHN), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN1_LINK_AUTOBAHN)).getSource()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.CLIENT1_INTERFACE_AUTOBAHN), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN1_LINK_AUTOBAHN)).getSink()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN2_INTERFACE_LOCAL), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN2_LINK)).getSource()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.CLIENT2_INTERFACE_AUTOBAHN), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN2_LINK)).getSink()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN2_INTERFACE_LOCAL), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN2_LINK_LOCAL)).getSource()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN2_INTERFACE_AUTOBAHN), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN2_LINK_LOCAL)).getSink()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN2_INTERFACE_AUTOBAHN), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN2_LINK_AUTOBAHN)).getSource()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.CLIENT2_INTERFACE_AUTOBAHN), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.DOWN2_LINK_AUTOBAHN)).getSink()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.UP1_INTERFACE_LOCAL), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.UP1_LINK)).getSource()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.UP1_INTERFACE_PEER), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.UP1_LINK)).getSink()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.UP2_INTERFACE_LOCAL), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.UP2_LINK)).getSource()); Assert.assertEquals(VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.UP2_INTERFACE_PEER), ((Link) VCPENetworkModelHelper.getElementByTemplateName(model, SPTemplateConstants.UP2_LINK)).getSink()); // TODO test VRRP and BGP are set } }