package org.opennaas.itests.core.queue; 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.includeSwissboxFramework; 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 static org.ops4j.pax.swissbox.framework.ServiceLookup.getService; 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.Test; import org.junit.runner.RunWith; import org.opennaas.core.resources.CorruptStateException; import org.opennaas.core.resources.IResourceManager; import org.opennaas.core.resources.IncorrectLifecycleStateException; import org.opennaas.core.resources.ResourceException; import org.opennaas.core.resources.action.ActionResponse.STATUS; import org.opennaas.core.resources.action.IAction; import org.opennaas.core.resources.capability.CapabilityException; import org.opennaas.core.resources.capability.ICapability; import org.opennaas.core.resources.capability.ICapabilityFactory; import org.opennaas.core.resources.capability.ICapabilityLifecycle; import org.opennaas.core.resources.descriptor.ResourceDescriptor; import org.opennaas.core.resources.helpers.ResourceDescriptorFactory; import org.opennaas.core.resources.mock.MockAction; import org.opennaas.core.resources.mock.MockActionExceptionOnExecute; import org.opennaas.core.resources.mock.MockResource; import org.opennaas.core.resources.protocol.IProtocolManager; import org.opennaas.core.resources.protocol.ProtocolException; import org.opennaas.core.resources.protocol.ProtocolSessionContext; import org.opennaas.core.resources.queue.QueueResponse; import org.opennaas.extensions.queuemanager.IQueueManagerCapability; import org.opennaas.extensions.router.model.ComputerSystem; 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; @ExamReactorStrategy(EagerSingleStagedReactorFactory.class) @RunWith(JUnit4TestRunner.class) public class QueuemanagerTest { private final static Log log = LogFactory.getLog(QueuemanagerTest.class); private final String resourceID = "junosResource"; private MockResource mockResource; private ICapability queueCapability; private IQueueManagerCapability queueManagerCapability; @Inject private BundleContext bundleContext; @Inject private IProtocolManager protocolManager; @Inject private IResourceManager resourceManager; @Inject @Filter("(capability=queue)") private ICapabilityFactory queueManagerFactory; @SuppressWarnings("unused") @Inject @Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.router.repository)", timeout = 20000) private BlueprintContainer routerService; @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"), includeSwissboxFramework(), noConsole(), keepRuntimeFolder()); } /** * Configure the protocol to connect */ private 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; } @Before public void before() throws ProtocolException, IncorrectLifecycleStateException, ResourceException, CorruptStateException { /* initialize model */ mockResource = new MockResource(); mockResource.setModel(new ComputerSystem()); List<String> capabilities = new ArrayList<String>(); capabilities.add("queue"); ResourceDescriptor resourceDescriptor = ResourceDescriptorFactory.newResourceDescriptor("mockresource", "router", capabilities); mockResource.setResourceDescriptor(resourceDescriptor); // will not be the same that mockResource but will do the trick resourceManager.createResource(resourceDescriptor); protocolManager.getProtocolSessionManagerWithContext(mockResource.getResourceId(), newSessionContextNetconf()); log.info("INFO: Before test, getting queue..."); queueCapability = queueManagerFactory.create(mockResource); ((ICapabilityLifecycle) queueCapability).initialize(); queueManagerCapability = getService(bundleContext, IQueueManagerCapability.class, 20000, "(capability=queue)(capability.name=" + mockResource.getResourceId() + ")"); } @After public void after() throws ResourceException { log.info("INFO: After test, cleaning queue..."); queueManagerCapability.clear(); resourceManager.destroyAllResources(); } @Test public void removeAction() throws CapabilityException { log.info("INFO: Remove actions"); IAction action = new MockAction(); action.setActionID("mockAction"); queueManagerCapability.queueAction(action); Assert.assertTrue(queueManagerCapability.getActions().size() == 1); queueManagerCapability.clear(); Assert.assertTrue(queueManagerCapability.getActions().size() == 0); log.info("INFO: OK!"); } @Test public void executeAction() throws ProtocolException, CapabilityException { log.info("INFO: Execute actions"); IAction action = new MockAction(); action.setActionID("mockAction"); queueManagerCapability.queueAction(action); Assert.assertTrue(queueManagerCapability.getActions().size() == 1); queueManagerCapability.execute(); Assert.assertTrue(queueManagerCapability.getActions().size() == 0); log.info("INFO: OK!"); } @Test public void executeActionThatThrowsException() throws ProtocolException, CapabilityException { log.info("INFO: Execute actions"); IAction action = new MockActionExceptionOnExecute(); action.setActionID("mockAction"); queueManagerCapability.queueAction(action); Assert.assertEquals(1, queueManagerCapability.getActions().size()); QueueResponse response = queueManagerCapability.execute(); Assert.assertFalse(response.isOk()); Assert.assertFalse(response.getResponses().isEmpty()); Assert.assertEquals(STATUS.ERROR, response.getResponses().get(0).getStatus()); Assert.assertNotNull("Action information should contain the error message", response.getResponses().get(0).getInformation()); Assert.assertFalse("Restore should be executed", STATUS.PENDING.equals(response.getRestoreResponse().getStatus())); log.info("INFO: OK!"); } @Test public void listActions() throws CapabilityException { log.info("INFO: List actions"); IAction action = new MockAction(); action.setActionID("mockAction"); queueManagerCapability.queueAction(action); Assert.assertTrue(queueManagerCapability.getActions().size() == 1); for (IAction act : queueManagerCapability.getActions()) { log.info("INFO: action id=" + act.getActionID()); } log.info("INFO: OK!"); } }