package org.opennaas.itests.router;
/*
* #%L
* OpenNaaS :: iTests :: Router
* %%
* Copyright (C) 2007 - 2014 FundaciĆ³ Privada i2CAT, Internet i InnovaciĆ³ a Catalunya
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
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.opennaas.itests.helpers.OpennaasExamOptions;
import org.ops4j.pax.exam.Configuration;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
import org.ops4j.pax.exam.util.Filter;
import org.osgi.framework.BundleContext;
import org.osgi.service.blueprint.container.BlueprintContainer;
@RunWith(PaxExam.class)
@ExamReactorStrategy(PerClass.class)
public class ResourceManagerIntegrationTest
{
private final static Log log = LogFactory.getLog(ResourceManagerIntegrationTest.class);
@Inject
private IResourceManager rm;
@SuppressWarnings("unused")
@Inject
private BundleContext bundleContext;
@Inject
@Filter("type=router")
private IResourceRepository resourceRepo;
@Inject
private IProtocolManager protocolManager;
@Inject
@Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.router.repository)", timeout = 20000)
private BlueprintContainer repositoryService;
@Inject
@Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.router.capability.chassis)", timeout = 20000)
private BlueprintContainer chassisService;
@Inject
@Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.router.capability.ip)", timeout = 20000)
private BlueprintContainer ipService;
@Inject
@Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.queuemanager)", timeout = 20000)
private BlueprintContainer queueService;
@Configuration
public static Option[] configuration() {
return options(
OpennaasExamOptions.opennaasDistributionConfiguration(),
OpennaasExamOptions.includeFeatures("opennaas-router", "opennaas-router-driver-junos"),
OpennaasExamOptions.noConsole(), OpennaasExamOptions.doNotDelayShell(),
OpennaasExamOptions.keepLogConfiguration(),
OpennaasExamOptions.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());
}
}