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.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.SerializationException; import org.opennaas.core.resources.descriptor.ResourceDescriptor; import org.opennaas.core.resources.descriptor.vcpe.helper.VCPENetworkDescriptorHelper; import org.opennaas.extensions.vcpe.capability.builder.IVCPENetworkBuilderCapability; import org.opennaas.extensions.vcpe.capability.builder.VCPENetworkBuilderCapability; 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 VCPENetworkTest { @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; private String resourceName = "vcpenet1"; private String resourceType = "vcpenet"; @Configuration public static Option[] configuration() { return options(opennaasDistributionConfiguration(), includeFeatures("opennaas-vcpe"), noConsole(), keepRuntimeFolder()); } @Test public void resourceWorkflow() throws ResourceException { try { IResource resource = createResource(); startResource(); // createVCPENetScenario(resource); // destroyVCPENetScenario(resource); } finally { rm.destroyAllResources(); } } @Test public void modelPersistence() throws SerializationException, ResourceException { VCPENetworkModel model = VCPENetworkModelHelper.generateSampleModel(); ResourceDescriptor descriptor = VCPENetworkDescriptorHelper.generateSampleDescriptor( resourceName, model.toXml()); try { IResource resource = rm.createResource(descriptor); rm.startResource(resource.getResourceIdentifier()); Assert.assertNotNull(resource.getModel()); Assert.assertEquals(model, resource.getModel()); String oldValue = ((VCPENetworkModel) resource.getModel()).getTemplateType(); String changed = "AAABBBCCC"; ((VCPENetworkModel) resource.getModel()).setTemplateType(changed); rm.stopResource(resource.getResourceIdentifier()); rm.startResource(resource.getResourceIdentifier()); Assert.assertEquals(changed, ((VCPENetworkModel) resource.getModel()).getTemplateType()); ((VCPENetworkModel) resource.getModel()).setTemplateType(oldValue); Assert.assertEquals(model, resource.getModel()); } finally { rm.destroyAllResources(); } } private IResource createResource() throws ResourceException { ResourceDescriptor descriptor = VCPENetworkDescriptorHelper.generateSampleDescriptor( resourceName, null); IResource resource = rm.createResource(descriptor); Assert.assertEquals(resourceName, rm.getNameFromResourceID(resource.getResourceIdentifier().getId())); Assert.assertEquals(org.opennaas.core.resources.ILifecycle.State.INITIALIZED, resource.getState()); List<IResource> resources = rm.listResourcesByType(resourceType); Assert.assertFalse(resources.isEmpty()); Assert.assertNotNull(resourceRepo); List<IResource> resources1 = resourceRepo.listResources(); Assert.assertFalse(resources1.isEmpty()); return resource; } private void startResource() throws ResourceException { Assert.assertNotNull(resourceRepo); List<IResource> resources = resourceRepo.listResources(); Assert.assertFalse(resources.isEmpty()); List<IResource> resources1 = rm.listResourcesByType(resourceType); Assert.assertFalse(resources1.isEmpty()); IResource resource = rm.getResource(rm.getIdentifierFromResourceName(resourceType, resourceName)); Assert.assertNotNull(resource); Assert.assertEquals(org.opennaas.core.resources.ILifecycle.State.INITIALIZED, resource.getState()); rm.startResource(resource.getResourceIdentifier()); resource = rm.getResource(rm.getIdentifierFromResourceName(resourceType, resourceName)); Assert.assertNotNull(resource); Assert.assertEquals(org.opennaas.core.resources.ILifecycle.State.ACTIVE, resource.getState()); } private void createVCPENetScenario(IResource resource) throws ResourceException { IVCPENetworkBuilderCapability cap = (VCPENetworkBuilderCapability) resource.getCapabilityByInterface(IVCPENetworkBuilderCapability.class); cap.buildVCPENetwork(VCPENetworkModelHelper.generateSampleModel()); } private void destroyVCPENetScenario(IResource resource) throws ResourceException { IVCPENetworkBuilderCapability cap = (IVCPENetworkBuilderCapability) resource.getCapabilityByInterface(IVCPENetworkBuilderCapability.class); cap.destroyVCPENetwork(); } }