package org.opennaas.itests.router.vrrp;
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.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.vrrp.IVRRPCapability;
import org.opennaas.extensions.router.model.ComputerSystem;
import org.opennaas.extensions.router.model.VRRPGroup;
import org.opennaas.extensions.router.model.VRRPProtocolEndpoint;
import org.opennaas.itests.helpers.InitializerTestHelper;
import org.opennaas.itests.router.TestsConstants;
import org.opennaas.itests.router.helpers.ParamCreationHelper;
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;
/**
* @author Julio Carlos Barrera
* @author Adrian Rosello
*/
@RunWith(JUnit4TestRunner.class)
@ExamReactorStrategy(EagerSingleStagedReactorFactory.class)
public class VRRPIntegrationTest {
private final static Log log = LogFactory.getLog(VRRPIntegrationTest.class);
private final static String RESOURCE_INFO_NAME = "VRRP test";
protected ICapability iVRRPCapability;
protected IResource routerResource;
@Inject
private BundleContext bundleContext;
@Inject
protected IResourceManager resourceManager;
@Inject
private IProtocolManager protocolManager;
@SuppressWarnings("unused")
@Inject
@Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.protocols.netconf)", timeout = 20000)
private BlueprintContainer netconfService;
@SuppressWarnings("unused")
@Inject
@Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.router.repository)", timeout = 20000)
private BlueprintContainer routerRepoService;
@Configuration
public static Option[] configuration() {
return options(opennaasDistributionConfiguration(),
includeFeatures("opennaas-router", "opennaas-junos", "itests-helpers"),
noConsole(),
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!");
}
/**
* Start router resource with 2 capabilities -> vrrp & queue
*
* @throws ResourceException
* @throws ProtocolException
*/
protected void startResource() throws ResourceException, ProtocolException {
// Add VRRP Capability Descriptor
List<CapabilityDescriptor> lCapabilityDescriptors = new ArrayList<CapabilityDescriptor>();
CapabilityDescriptor vrrpCapabilityDescriptor = ResourceHelper.newCapabilityDescriptor(TestsConstants.ACTION_NAME,
TestsConstants.CAPABILIY_VERSION,
TestsConstants.VRRP_CAPABILITY_TYPE,
TestsConstants.CAPABILITY_URI);
lCapabilityDescriptors.add(vrrpCapabilityDescriptor);
// 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);
// Create resource
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());
}
/**
* Stop and remove the router resource
*
* @throws ResourceException
* @throws ProtocolException
*/
protected void stopResource() throws ResourceException, ProtocolException {
// Stop resource
resourceManager.stopResource(routerResource.getResourceIdentifier());
// Remove resource
resourceManager.removeResource(routerResource.getResourceIdentifier());
}
@Test
public void testConfigureVRRP() throws ProtocolException, ResourceException {
IVRRPCapability vrrpCapability = (IVRRPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.VRRP_CAPABILITY_TYPE));
vrrpCapability.configureVRRP((VRRPProtocolEndpoint) ParamCreationHelper
.newParamsVRRPGroupWithOneEndpoint("192.168.1.1", "fe-0/3/2", "192.168.1.100", "255.255.255.0").getProtocolEndpoint().get(0));
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
stopResource();
}
@Test
public void testUnconfigureVRRP() throws ProtocolException, ResourceException {
IVRRPCapability vrrpCapability = (IVRRPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.VRRP_CAPABILITY_TYPE));
vrrpCapability.unconfigureVRRP((VRRPProtocolEndpoint) ParamCreationHelper
.newParamsVRRPGroupWithOneEndpoint("192.168.1.1", "fe-0/3/2", "192.168.1.100", "255.255.255.0").getProtocolEndpoint().get(0));
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
stopResource();
}
@Test
public void testUpdateVRRPVirtualIPAddress() throws ProtocolException, ResourceException {
prepareResourceModelforIPv4();
IVRRPCapability vrrpCapability = (IVRRPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.VRRP_CAPABILITY_TYPE));
vrrpCapability.updateVRRPVirtualIPAddress((VRRPProtocolEndpoint) ParamCreationHelper
.newParamsVRRPGroupWithOneEndpoint("192.168.1.1", "fe-0/3/2", "192.168.1.100", "255.255.255.0").getProtocolEndpoint().get(0));
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
stopResource();
}
@Test
public void testUpdateVRRPPriority() throws ProtocolException, ResourceException {
prepareResourceModelforIPv4();
IVRRPCapability vrrpCapability = (IVRRPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.VRRP_CAPABILITY_TYPE));
vrrpCapability.updateVRRPPriority((VRRPProtocolEndpoint) ParamCreationHelper
.newParamsVRRPGroupWithOneEndpoint("192.168.1.1", "fe-0/3/2", "192.168.1.100", "255.255.255.0").getProtocolEndpoint().get(0));
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
stopResource();
}
@Test(expected = CapabilityException.class)
public void testConfigureVRRPIPv6WrongParams() throws ProtocolException, ResourceException {
IVRRPCapability vrrpCapability = (IVRRPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.VRRP_CAPABILITY_TYPE));
vrrpCapability.configureVRRP((VRRPProtocolEndpoint) ParamCreationHelper
.newParamsVRRPGroupWithOneEndpointIPv6("fecd:123:a1::4", "f8:34::12", "fe-1/0/1", "fecd:123:a1::5/64").getProtocolEndpoint().get(0));
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
stopResource();
}
@Test
public void testConfigureVRRPIPv6() throws ProtocolException, ResourceException {
IVRRPCapability vrrpCapability = (IVRRPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.VRRP_CAPABILITY_TYPE));
vrrpCapability.configureVRRP((VRRPProtocolEndpoint) ParamCreationHelper
.newParamsVRRPGroupWithThreeEndpointIPv6("fecd:123:a1::4", "f8:34::12", "fe-1/0/1", "fecd:123:a1::5/64", "f8:34::13/64", "fecd::/64")
.getProtocolEndpoint().get(0));
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
stopResource();
}
@Test
public void testUnconfigureVRRPIPv6() throws ProtocolException, ResourceException {
IVRRPCapability vrrpCapability = (IVRRPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.VRRP_CAPABILITY_TYPE));
vrrpCapability.unconfigureVRRP((VRRPProtocolEndpoint) ParamCreationHelper
.newParamsVRRPGroupWithOneEndpointIPv6("fecd:123:a1::4", "f8:34::12", "fe-1/0/1", "fecd:123:a1::5/64").getProtocolEndpoint().get(0));
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
stopResource();
}
@Test
public void testUpdatePriorityVRRPIPv6() throws ProtocolException, ResourceException {
prepareResourceModelforIPv6();
IVRRPCapability vrrpCapability = (IVRRPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.VRRP_CAPABILITY_TYPE));
vrrpCapability.updateVRRPPriority((VRRPProtocolEndpoint) ParamCreationHelper
.newParamsVRRPGroupWithOneEndpointIPv6("fecd:123:a1::4", "f8:34::12", "fe-1/0/1", "fecd:123:a1::5/64").getProtocolEndpoint().get(0));
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
stopResource();
}
@Test
public void testUpdateIPAddressVRRPIPv6() throws ProtocolException, ResourceException {
prepareResourceModelforIPv6();
IVRRPCapability vrrpCapability = (IVRRPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.VRRP_CAPABILITY_TYPE));
vrrpCapability.updateVRRPVirtualIPAddress((VRRPProtocolEndpoint) ParamCreationHelper
.newParamsVRRPGroupWithOneEndpointIPv6("fecd:123:a1::4", "f8:34::12", "fe-1/0/1", "fecd:123:a1::5/64").getProtocolEndpoint().get(0));
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
stopResource();
}
@Test
public void testUpdateVirtualLinkAddress() throws ProtocolException, ResourceException {
prepareResourceModelforIPv6();
IVRRPCapability vrrpCapability = (IVRRPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.VRRP_CAPABILITY_TYPE));
vrrpCapability.updateVRRPVirtualLinkAddress(ParamCreationHelper
.newParamsVRRPGroupWithOneEndpointIPv6("fecd:123:a1::4", "f8:34::12", "fe-1/0/1", "fecd:123:a1::5/64"));
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
stopResource();
}
@Test(expected = CapabilityException.class)
public void testUpdateVirualLinkAddressWithWrongIP() throws ProtocolException, ResourceException {
prepareResourceModelforIPv6();
IVRRPCapability vrrpCapability = (IVRRPCapability) routerResource.getCapability(InitializerTestHelper
.getCapabilityInformation(TestsConstants.VRRP_CAPABILITY_TYPE));
vrrpCapability.updateVRRPVirtualLinkAddress(ParamCreationHelper
.newParamsVRRPGroupWithOneEndpointIPv6("fecd:123:a1::4", "192.168.1.1", "fe-1/0/1", "fecd:123:a1::5/64"));
IQueueManagerCapability queueCapability = (IQueueManagerCapability) routerResource
.getCapability(InitializerTestHelper.getCapabilityInformation(TestsConstants.QUEUE_CAPABILIY_TYPE));
QueueResponse queueResponse = (QueueResponse) queueCapability.execute();
Assert.assertTrue(queueResponse.isOk());
stopResource();
}
private void prepareResourceModelforIPv6() {
ComputerSystem model = new ComputerSystem();
VRRPGroup group = ParamCreationHelper.newParamsVRRPGroupWithOneEndpointIPv6("fecd:123:a1::4", "f8:34::13", "fe-1/0/1", "fecd:123:a1::5/64");
model.addHostedService(group);
routerResource.setModel(model);
}
private void prepareResourceModelforIPv4() {
ComputerSystem model = new ComputerSystem();
VRRPGroup group = ParamCreationHelper.newParamsVRRPGroupWithOneEndpoint("192.168.1.1", "fe-0/3/2", "192.168.1.100", "255.255.255.0");
model.addHostedService(group);
routerResource.setModel(model);
}
}