package org.opennaas.itests.router.gre; 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.ArrayList; import java.util.List; import javax.inject.Inject; 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.IResource; import org.opennaas.core.resources.IResourceManager; import org.opennaas.core.resources.ResourceException; import org.opennaas.core.resources.action.ActionResponse; import org.opennaas.core.resources.action.IAction; import org.opennaas.core.resources.capability.CapabilityException; import org.opennaas.core.resources.capability.ICapabilityFactory; import org.opennaas.core.resources.descriptor.CapabilityDescriptor; import org.opennaas.core.resources.descriptor.ResourceDescriptor; import org.opennaas.core.resources.helpers.ResourceHelper; import org.opennaas.core.resources.protocol.IProtocolManager; import org.opennaas.core.resources.protocol.ProtocolException; import org.opennaas.core.resources.queue.QueueResponse; import org.opennaas.extensions.queuemanager.IQueueManagerCapability; import org.opennaas.extensions.router.capability.gretunnel.IGRETunnelCapability; import org.opennaas.extensions.router.model.ComputerSystem; import org.opennaas.extensions.router.model.GRETunnelConfiguration; import org.opennaas.extensions.router.model.GRETunnelEndpoint; import org.opennaas.extensions.router.model.GRETunnelService; import org.opennaas.extensions.router.model.ProtocolEndpoint; import org.opennaas.extensions.router.model.ProtocolEndpoint.ProtocolIFType; import org.opennaas.extensions.router.model.utils.IPUtilsHelper; import org.opennaas.itests.helpers.InitializerTestHelper; import org.opennaas.itests.router.TestsConstants; import org.opennaas.itests.router.helpers.ParamCreationHelper; 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.framework.BundleContext; import org.osgi.service.blueprint.container.BlueprintContainer; @RunWith(JUnit4TestRunner.class) @ExamReactorStrategy(EagerSingleStagedReactorFactory.class) public class GRETunnelCapabilityIntegrationTest { /** * */ private static Log log = LogFactory .getLog(GRETunnelCapabilityIntegrationTest.class); protected static final String TUNNEL_NAME = "gr-1/0/3.1"; protected static final String IPv4_ADDRESS = "192.168.32.1/24"; protected static final String IP_SOURCE = "147.56.89.62"; protected static final String IP_DESTINY = "193.45.23.1"; private static final String IPv6_ADDRESS = "2001:43:F3::12/64"; protected IQueueManagerCapability queueCapability; protected IGRETunnelCapability greTunnelCapability; private static final String RESOURCE_INFO_NAME = "GRE Integration Test"; private IResource routerResource; @Inject private BundleContext bundleContext; @Inject protected IResourceManager resourceManager; @Inject private IProtocolManager protocolManager; @Inject @Filter("(capability=gretunnel)") private ICapabilityFactory gretunnelFactory; @SuppressWarnings("unused") @Inject @Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.router.repository)", timeout = 20000) private BlueprintContainer routerRepositoryService; @SuppressWarnings("unused") @Inject @Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.queuemanager)", timeout = 20000) private BlueprintContainer queueService; @SuppressWarnings("unused") @Inject @Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.router.capability.gretunnel)", timeout = 20000) private BlueprintContainer gretunnelService; @SuppressWarnings("unused") @Inject @Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.protocols.netconf)", timeout = 20000) private BlueprintContainer netconfService; @Configuration public static Option[] configuration() { return options(opennaasDistributionConfiguration(), includeFeatures("opennaas-router", "opennaas-junos", "itests-helpers"), noConsole(), keepRuntimeFolder()); } @Test public void createGRETunnelTest() throws CapabilityException, ProtocolException { log.info("Test createGRETunnel method"); IGRETunnelCapability greCapability = (IGRETunnelCapability) routerResource .getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.GRE_CAPABILITY_TYPE)); greCapability .createGRETunnel(ParamCreationHelper.getGRETunnelService(TUNNEL_NAME, IPv4_ADDRESS, IP_SOURCE, IP_DESTINY)); IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource .getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE)); QueueResponse queueResponse = (QueueResponse) queueCapability.execute(); Assert.assertTrue(queueResponse.isOk()); } @Test public void deleteGRETunnelTest() throws CapabilityException, ProtocolException { log.info("Test createGRETunnel method"); IGRETunnelCapability greCapability = (IGRETunnelCapability) routerResource .getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.GRE_CAPABILITY_TYPE)); greCapability.deleteGRETunnel(ParamCreationHelper.getGRETunnelService(TUNNEL_NAME, null, null, null, null)); IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource .getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE)); QueueResponse queueResponse = (QueueResponse) queueCapability.execute(); Assert.assertTrue(queueResponse.isOk()); } @Test public void showGRETunnelConfigurationTest() throws CapabilityException, ProtocolException { log.info("Test showGRETunnelConfiguration method"); IGRETunnelCapability greCapability = (IGRETunnelCapability) routerResource .getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.GRE_CAPABILITY_TYPE)); ComputerSystem routerModel = (ComputerSystem) routerResource.getModel(); routerModel.addHostedService( ParamCreationHelper.getGRETunnelService(TUNNEL_NAME, IPv4_ADDRESS, IP_SOURCE, IP_DESTINY)); routerModel.addHostedService( ParamCreationHelper.getGRETunnelService(TUNNEL_NAME, IPv6_ADDRESS, IP_SOURCE, IP_DESTINY)); List<GRETunnelService> greServices = greCapability.showGRETunnelConfiguration(); Assert.assertEquals(greServices.size(), 2); GRETunnelService greService = greServices.get(0); Assert.assertEquals(TUNNEL_NAME, greService.getName()); Assert.assertNotNull(greService.getGRETunnelConfiguration()); GRETunnelConfiguration greConfig = greService.getGRETunnelConfiguration(); Assert.assertEquals(IP_SOURCE, greConfig.getSourceAddress()); Assert.assertEquals(IP_DESTINY, greConfig.getDestinationAddress()); Assert.assertEquals(greService.getProtocolEndpoint().size(), 1); ProtocolEndpoint pE = greService.getProtocolEndpoint().get(0); Assert.assertTrue(pE instanceof GRETunnelEndpoint); GRETunnelEndpoint gE = (GRETunnelEndpoint) pE; Assert.assertEquals(IPUtilsHelper.getAddressFromIP(IPv4_ADDRESS), gE.getIPv4Address()); Assert.assertEquals(IPUtilsHelper.getPrefixFromIp(IPv4_ADDRESS), IPUtilsHelper.parseLongToShortIpv4NetMask(gE.getSubnetMask())); Assert.assertEquals(ProtocolIFType.IPV4, gE.getProtocolIFType()); greService = greServices.get(1); Assert.assertEquals(TUNNEL_NAME, greService.getName()); Assert.assertNotNull(greService.getGRETunnelConfiguration()); greConfig = greService.getGRETunnelConfiguration(); Assert.assertEquals(IP_SOURCE, greConfig.getSourceAddress()); Assert.assertEquals(IP_DESTINY, greConfig.getDestinationAddress()); Assert.assertEquals(greService.getProtocolEndpoint().size(), 1); pE = greService.getProtocolEndpoint().get(0); Assert.assertTrue(pE instanceof GRETunnelEndpoint); gE = (GRETunnelEndpoint) pE; Assert.assertEquals(IPUtilsHelper.getAddressFromIP(IPv6_ADDRESS), gE.getIPv6Address()); Assert.assertEquals(IPUtilsHelper.getPrefixFromIp(IPv6_ADDRESS), String.valueOf(gE.getPrefixLength())); Assert.assertEquals(ProtocolIFType.IPV6, gE.getProtocolIFType()); } @Test public void createGRETunnelv6Test() throws CapabilityException, ProtocolException { log.info("Test createGRETunnel method"); IGRETunnelCapability greCapability = (IGRETunnelCapability) routerResource .getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.GRE_CAPABILITY_TYPE)); greCapability .createGRETunnel(ParamCreationHelper.getGRETunnelService(TUNNEL_NAME, IPv6_ADDRESS, IP_SOURCE, IP_DESTINY)); IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource .getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE)); QueueResponse queueResponse = (QueueResponse) queueCapability.execute(); Assert.assertTrue(queueResponse.isOk()); } @Test public void testGRECreateTunnelAction() throws CapabilityException, ProtocolException { log.info("TEST GRE TUNNEL ACTION"); IGRETunnelCapability greCapability = (IGRETunnelCapability) routerResource .getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.GRE_CAPABILITY_TYPE)); greCapability.createGRETunnel(ParamCreationHelper.getGRETunnelService(TUNNEL_NAME, IPv4_ADDRESS, IP_SOURCE, IP_DESTINY)); IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource .getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE)); List<IAction> queue = (List<IAction>) queueCapability.getActions(); Assert.assertEquals(queue.size(), 1); QueueResponse queueResponse = (QueueResponse) queueCapability.execute(); Assert.assertEquals(queueResponse.getResponses().size(), 1); Assert.assertEquals(queueResponse.getPrepareResponse().getStatus(), ActionResponse.STATUS.OK); Assert.assertEquals(queueResponse.getConfirmResponse().getStatus(), ActionResponse.STATUS.OK); Assert.assertEquals(queueResponse.getRefreshResponse().getStatus(), ActionResponse.STATUS.OK); Assert.assertEquals(queueResponse.getRestoreResponse().getStatus(), ActionResponse.STATUS.PENDING); Assert.assertTrue(queueResponse.isOk()); queue = (List<IAction>) queueCapability.getActions(); Assert.assertEquals(queue.size(), 0); } @Test public void testGREDeleteTunnelAction() throws CapabilityException, ProtocolException { log.info("TEST GRE TUNNEL ACTION"); IGRETunnelCapability greCapability = (IGRETunnelCapability) routerResource .getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.GRE_CAPABILITY_TYPE)); // add gre tunnel service to the router model. GRETunnelService greTunnelService = new GRETunnelService(); greTunnelService.setName(TUNNEL_NAME); ComputerSystem model = (ComputerSystem) routerResource.getModel(); model.addHostedService(greTunnelService); routerResource.setModel(model); greCapability.deleteGRETunnel(ParamCreationHelper.getGRETunnelService(TUNNEL_NAME, null, null, null, null)); IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource .getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE)); List<IAction> queue = (List<IAction>) queueCapability.getActions(); Assert.assertEquals(queue.size(), 1); QueueResponse queueResponse = (QueueResponse) queueCapability.execute(); Assert.assertEquals(queueResponse.getResponses().size(), 1); Assert.assertEquals(queueResponse.getPrepareResponse().getStatus(), ActionResponse.STATUS.OK); Assert.assertEquals(queueResponse.getConfirmResponse().getStatus(), ActionResponse.STATUS.OK); Assert.assertEquals(queueResponse.getRefreshResponse().getStatus(), ActionResponse.STATUS.OK); Assert.assertEquals(queueResponse.getRestoreResponse().getStatus(), ActionResponse.STATUS.PENDING); Assert.assertTrue(queueResponse.isOk()); queue = (List<IAction>) queueCapability.getActions(); Assert.assertEquals(queue.size(), 0); } /** * This test require the dirty model, since the checkParams method would check there's a GreTunnelService in the model. * * @throws CapabilityException * @throws ProtocolException */ @Test @Ignore public void testDeleteUnexistingTunnelAction() throws CapabilityException, ProtocolException { log.info("TEST GRE TUNNEL ACTION"); IGRETunnelCapability greCapability = (IGRETunnelCapability) routerResource .getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.GRE_CAPABILITY_TYPE)); greCapability.deleteGRETunnel(ParamCreationHelper.getGRETunnelService(TUNNEL_NAME, null, null, null, null)); IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource .getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE)); List<IAction> queue = (List<IAction>) queueCapability.getActions(); Assert.assertEquals(queue.size(), 1); QueueResponse queueResponse = (QueueResponse) queueCapability.execute(); Assert.assertEquals(queueResponse.getResponses().size(), 1); Assert.assertFalse(queueResponse.isOk()); queue = (List<IAction>) queueCapability.getActions(); Assert.assertEquals(queue.size(), 0); } @Before public void initBundle() throws ResourceException, ProtocolException { InitializerTestHelper.removeResources(resourceManager); log.info("INFO: Initialized!"); startResource(); } @After public void stopBundle() throws ResourceException { InitializerTestHelper.removeResources(resourceManager); log.info("INFO: Stopped!"); } public void startResource() throws ResourceException, ProtocolException { /* initialize model */ List<CapabilityDescriptor> lCapabilityDescriptors = new ArrayList<CapabilityDescriptor>(); CapabilityDescriptor greCapabilityDescriptor = ResourceHelper.newCapabilityDescriptor(TestsConstants.ACTION_NAME, TestsConstants.CAPABILIY_VERSION, TestsConstants.GRE_CAPABILITY_TYPE, TestsConstants.CAPABILITY_URI); lCapabilityDescriptors.add(greCapabilityDescriptor); // Add Queue Capability Descriptor CapabilityDescriptor queueCapabilityDescriptor = ResourceHelper.newQueueCapabilityDescriptor(); lCapabilityDescriptors.add(queueCapabilityDescriptor); // Router Resource Descriptor ResourceDescriptor resourceDescriptor = ResourceHelper.newResourceDescriptor(lCapabilityDescriptors, TestsConstants.RESOURCE_TYPE, TestsConstants.RESOURCE_URI, RESOURCE_INFO_NAME); routerResource = resourceManager.createResource(resourceDescriptor); // If not exists the protocol session manager, it's created and add the session context InitializerTestHelper.addSessionContext(protocolManager, routerResource.getResourceIdentifier().getId(), TestsConstants.RESOURCE_URI); // Start resource resourceManager.startResource(routerResource.getResourceIdentifier()); } }