package org.opennaas.itests.router.ip;
/*
* #%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.After;
import org.junit.Assert;
import org.junit.Before;
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.capability.CapabilityException;
import org.opennaas.core.resources.capability.ICapability;
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.ip.IIPCapability;
import org.opennaas.extensions.router.model.IPProtocolEndpoint;
import org.opennaas.itests.helpers.InitializerTestHelper;
import org.opennaas.itests.helpers.OpennaasExamOptions;
import org.opennaas.itests.helpers.TestsConstants;
import org.opennaas.itests.router.helpers.ParamCreationHelper;
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 IPCapabilityIntegrationTest
{
private final static Log log = LogFactory.getLog(IPCapabilityIntegrationTest.class);
private final static String RESOURCE_INFO_NAME = "IP test";
protected ICapability iIPCapability;
protected IResource routerResource;
@SuppressWarnings("unused")
@Inject
private BundleContext bundleContext;
@Inject
protected IResourceManager resourceManager;
@Inject
private IProtocolManager protocolManager;
@Inject
@Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.protocols.netconf)", timeout = 20000)
private BlueprintContainer netconfService;
@Inject
@Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.router.repository)", timeout = 20000)
private BlueprintContainer routerRepoService;
@Configuration
public static Option[] configuration() {
return options(
OpennaasExamOptions.opennaasDistributionConfiguration(),
OpennaasExamOptions.includeFeatures("opennaas-router", "opennaas-router-driver-junos", "itests-helpers"),
OpennaasExamOptions.noConsole(), OpennaasExamOptions.doNotDelayShell(),
OpennaasExamOptions.keepLogConfiguration(),
OpennaasExamOptions.keepRuntimeFolder());
}
@Before
public void initBundles() throws ResourceException, ProtocolException {
InitializerTestHelper.removeResources(resourceManager);
log.info("INFO: Initialized!");
startResource();
}
@After
public void stopBundle() throws Exception {
InitializerTestHelper.removeResources(resourceManager);
log.info("INFO: Stopped!");
}
@Test
public void testSetIPv4() throws ProtocolException, ResourceException {
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.setIPv4(ParamCreationHelper.getLogicalPort(), ParamCreationHelper.getIPProtocolEndPoint());
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
}
@Test
public void testAddIPv4() throws ProtocolException, ResourceException {
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.addIPv4(ParamCreationHelper.getLogicalPort(), ParamCreationHelper.getIPProtocolEndPoint());
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
}
@Test
public void testAddIPv6() throws ProtocolException, ResourceException {
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.addIPv6(ParamCreationHelper.getLogicalPort(), ParamCreationHelper.getIPProtocolEndPointIPv6());
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
}
@Test
public void removeIPv4() throws ProtocolException, ResourceException {
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.removeIPv4(ParamCreationHelper.getLogicalPort(), ParamCreationHelper.getIPProtocolEndPoint());
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
}
@Test
public void testSetIP() throws ProtocolException, ResourceException {
// Set IP with IPv4 ProtocolEndpoint
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.setIP(ParamCreationHelper.getLogicalPort(), ParamCreationHelper.getIPProtocolEndPoint());
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
// Set IP with IPv6 ProtocolEndpoint
ipCapability.setIP(ParamCreationHelper.getLogicalPort(), ParamCreationHelper.getIPProtocolEndPointIPv6());
queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
// Set IP with string ipv4
ipCapability.setIP(ParamCreationHelper.getLogicalPort(), "192.168.1.12/24");
queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
// Set IP with string ipv6
ipCapability.setIP(ParamCreationHelper.getLogicalPort(), "fedc:54:123:ffa1::8/64");
queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
}
@Test(expected = CapabilityException.class)
public void testSetIPWrongParameters() throws CapabilityException {
// test IP with empty ProtocolEndpoint - should fail
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.setIP(ParamCreationHelper.getLogicalPort(), new IPProtocolEndpoint());
}
@Test(expected = CapabilityException.class)
public void setIPWithUnvalidIP() throws CapabilityException {
// test IP with invalid ip String - should fail
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.setIP(ParamCreationHelper.getLogicalPort(), "invalidIP");
}
@Test(expected = CapabilityException.class)
public void setIPWithEmptyIP() throws CapabilityException {
// test IP with invalid ip String - should fail
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.setIP(ParamCreationHelper.getLogicalPort(), new String());
}
@Test
public void testAddIP() throws ProtocolException, ResourceException {
// Add IP with IPv4 ProtocolEndpoint
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.addIP(ParamCreationHelper.getLogicalPort(), ParamCreationHelper.getIPProtocolEndPoint());
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
// Add IP with IPv6 ProtocolEndpoint
ipCapability.addIP(ParamCreationHelper.getLogicalPort(), ParamCreationHelper.getIPProtocolEndPointIPv6());
queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
// Add IP with string ipv4
ipCapability.addIP(ParamCreationHelper.getLogicalPort(), "192.168.1.12/24");
queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
// Add IP with string ipv6
ipCapability.addIP(ParamCreationHelper.getLogicalPort(), "fedc:54:123:ffa1::8/64");
queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
}
@Test(expected = CapabilityException.class)
public void testAddIPWrongParameters() throws ProtocolException, ResourceException {
// Add IP with empty ProtocolEndpoint - should fail
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.removeIP(ParamCreationHelper.getLogicalPort(), new IPProtocolEndpoint());
}
@Test(expected = CapabilityException.class)
public void addIPWithUnvalidIP() throws CapabilityException {
// test IP with invalid ip String - should fail
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.addIP(ParamCreationHelper.getLogicalPort(), "invalidIP");
}
@Test(expected = CapabilityException.class)
public void addIPWithEmptyIP() throws CapabilityException {
// test IP with invalid ip String - should fail
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.addIP(ParamCreationHelper.getLogicalPort(), new String());
}
@Test
public void testRemoveIP() throws ProtocolException, ResourceException {
// Remove IP with IPv4 ProtocolEndpoint
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.removeIP(ParamCreationHelper.getLogicalPort(), ParamCreationHelper.getIPProtocolEndPoint());
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
// Remove IP with IPv6 ProtocolEndpoint
ipCapability.removeIP(ParamCreationHelper.getLogicalPort(), ParamCreationHelper.getIPProtocolEndPointIPv6());
queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
// Remove IP with string ipv4
ipCapability.removeIP(ParamCreationHelper.getLogicalPort(), "192.168.1.12/24");
queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
// Remove IP with string ipv6
ipCapability.removeIP(ParamCreationHelper.getLogicalPort(), "fedc:54:123:ffa1::8/64");
queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
}
@Test(expected = CapabilityException.class)
public void testRemoveIPWrongParameters() throws ProtocolException, ResourceException {
// Remove IP with empty ProtocolEndpoint - should fail
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.removeIP(ParamCreationHelper.getLogicalPort(), new IPProtocolEndpoint());
}
@Test(expected = CapabilityException.class)
public void removeIPWithUnvalidIP() throws CapabilityException {
// test IP with invalid ip String - should fail
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.removeIP(ParamCreationHelper.getLogicalPort(), "invalidIP");
}
@Test(expected = CapabilityException.class)
public void removeIPWithEmptyIP() throws CapabilityException {
// test IP with invalid ip String - should fail
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.removeIP(ParamCreationHelper.getLogicalPort(), new String());
}
@Test
public void removeIPv6() throws ProtocolException, ResourceException {
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.removeIPv6(ParamCreationHelper.getLogicalPort(), ParamCreationHelper.getIPProtocolEndPointIPv6());
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
}
@Test
public void testSetInterfaceDescription() throws ProtocolException, ResourceException {
IIPCapability ipCapability = (IIPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.IP_CAPABILITY_TYPE));
ipCapability.setInterfaceDescription(ParamCreationHelper.getLogicalPort());
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
}
public void startResource() throws ResourceException, ProtocolException {
/* initialize model */
List<CapabilityDescriptor> lCapabilityDescriptors = new ArrayList<CapabilityDescriptor>();
CapabilityDescriptor ipCapabilityDescriptor = ResourceHelper.newCapabilityDescriptor(TestsConstants.ACTION_NAME,
TestsConstants.CAPABILIY_VERSION,
TestsConstants.IP_CAPABILITY_TYPE,
TestsConstants.CAPABILITY_URI);
lCapabilityDescriptors.add(ipCapabilityDescriptor);
// 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());
}
}