package org.opennaas.itests.router; 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.Assert; 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.IResourceRepository; import org.opennaas.core.resources.ResourceException; import org.opennaas.core.resources.descriptor.ResourceDescriptor; import org.opennaas.core.resources.helpers.ResourceDescriptorFactory; import org.opennaas.core.resources.protocol.IProtocolManager; import org.opennaas.core.resources.protocol.ProtocolException; import org.opennaas.core.resources.protocol.ProtocolSessionContext; 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 ResourceManagerIntegrationTest { private final static Log log = LogFactory.getLog(ResourceManagerIntegrationTest.class); @Inject private IResourceManager rm; @Inject private BundleContext bundleContext; @Inject @Filter("type=router") private IResourceRepository resourceRepo; @Inject private IProtocolManager protocolManager; @SuppressWarnings("unused") @Inject @Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.router.repository)", timeout = 20000) private BlueprintContainer repositoryService; @SuppressWarnings("unused") @Inject @Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.router.capability.chassis)", timeout = 20000) private BlueprintContainer chassisService; @SuppressWarnings("unused") @Inject @Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.router.capability.ip)", timeout = 20000) private BlueprintContainer ipService; @SuppressWarnings("unused") @Inject @Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.queuemanager)", timeout = 20000) private BlueprintContainer queueService; @Configuration public static Option[] configuration() { return options(opennaasDistributionConfiguration(), includeFeatures("opennaas-router", "opennaas-junos"), noConsole(), keepRuntimeFolder()); } public void createProtocolForResource(String resourceId) throws ProtocolException { protocolManager.getProtocolSessionManagerWithContext(resourceId, newSessionContextNetconf()); } public static ProtocolSessionContext newSessionContextNetconf() { String uri = System.getProperty("protocol.uri"); if (uri == null || uri.equals("${protocol.uri}")) { uri = "mock://user:pass@host.net:2212/mocksubsystem"; } ProtocolSessionContext protocolSessionContext = new ProtocolSessionContext(); protocolSessionContext.addParameter( ProtocolSessionContext.PROTOCOL_URI, uri); protocolSessionContext.addParameter(ProtocolSessionContext.PROTOCOL, "netconf"); protocolSessionContext.addParameter(ProtocolSessionContext.AUTH_TYPE, "password"); return protocolSessionContext; } @Test public void resourceWorkflow() throws InterruptedException, ResourceException, ProtocolException { createResource(); startResource(); stopResource(); removeResource(); createResourcetwo(); } public void createResource() throws ResourceException, ProtocolException { List<String> capabilities = new ArrayList<String>(); capabilities.add("chassis"); capabilities.add("ip"); capabilities.add("queue"); ResourceDescriptor descriptor = ResourceDescriptorFactory.newResourceDescriptor("junosm20", "router", capabilities); IResource resource = rm.createResource(descriptor); createProtocolForResource(resource.getResourceIdentifier().getId()); Assert.assertEquals("junosm20", rm.getNameFromResourceID(resource.getResourceIdentifier().getId())); Assert.assertEquals(org.opennaas.core.resources.ILifecycle.State.INITIALIZED, resource.getState()); List<IResource> resources = rm.listResourcesByType("router"); Assert.assertFalse(resources.isEmpty()); Assert.assertNotNull(resourceRepo); List<IResource> resources1 = resourceRepo.listResources(); Assert.assertFalse(resources1.isEmpty()); } public void startResource() throws ResourceException { Assert.assertNotNull(resourceRepo); List<IResource> resources = resourceRepo.listResources(); Assert.assertFalse(resources.isEmpty()); List<IResource> resources1 = rm.listResourcesByType("router"); Assert.assertFalse(resources1.isEmpty()); IResource resource = rm.getResource(rm.getIdentifierFromResourceName("router", "junosm20")); Assert.assertNotNull(resource); Assert.assertEquals(org.opennaas.core.resources.ILifecycle.State.INITIALIZED, resource.getState()); rm.startResource(rm.getIdentifierFromResourceName("router", "junosm20")); resource = rm.getResource(rm.getIdentifierFromResourceName("router", "junosm20")); Assert.assertNotNull(resource); Assert.assertEquals(org.opennaas.core.resources.ILifecycle.State.ACTIVE, resource.getState()); } public void stopResource() throws ResourceException, InterruptedException { List<IResource> resources = rm.listResourcesByType("router"); Assert.assertFalse(resources.isEmpty()); IResource resource = rm.getResource(rm.getIdentifierFromResourceName("router", "junosm20")); Assert.assertNotNull(resource); Assert.assertEquals(org.opennaas.core.resources.ILifecycle.State.ACTIVE, resource.getState()); rm.stopResource(rm.getIdentifierFromResourceName("router", "junosm20")); resource = rm.getResource(rm.getIdentifierFromResourceName("router", "junosm20")); Assert.assertNotNull(resource); Assert.assertEquals(org.opennaas.core.resources.ILifecycle.State.INITIALIZED, resource.getState()); } public void removeResource() throws ResourceException { List<IResource> resources = rm.listResourcesByType("router"); Assert.assertFalse(resources.isEmpty()); rm.removeResource(rm.getIdentifierFromResourceName("router", "junosm20")); } public void createResourcetwo() throws ResourceException, ProtocolException { List<String> capabilities = new ArrayList<String>(); capabilities.add("chassis"); capabilities.add("ip"); capabilities.add("queue"); ResourceDescriptor descriptor = ResourceDescriptorFactory.newResourceDescriptor("junosm20", "router", capabilities); IResource resource = rm.createResource(descriptor); createProtocolForResource(resource.getResourceIdentifier().getId()); Assert.assertEquals("junosm20", rm.getNameFromResourceID(resource.getResourceIdentifier().getId())); Assert.assertEquals(org.opennaas.core.resources.ILifecycle.State.INITIALIZED, resource.getState()); List<IResource> resources = rm.listResourcesByType("router"); Assert.assertFalse(resources.isEmpty()); } }