package org.opennaas.itests.roadm.shell;
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.io.ByteArrayOutputStream;
import java.io.PrintStream;
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.apache.felix.service.command.CommandSession;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.opennaas.core.resources.IResource;
import org.opennaas.core.resources.IResourceRepository;
import org.opennaas.core.resources.descriptor.CapabilityDescriptor;
import org.opennaas.core.resources.descriptor.ResourceDescriptor;
import org.opennaas.core.resources.profile.IProfileManager;
import org.opennaas.core.resources.protocol.IProtocolManager;
import org.opennaas.core.resources.protocol.ProtocolException;
import org.opennaas.core.resources.protocol.ProtocolSessionContext;
import org.opennaas.extensions.router.model.opticalSwitch.DWDMChannel;
import org.opennaas.extensions.router.model.opticalSwitch.FiberConnection;
import org.opennaas.extensions.router.model.opticalSwitch.WDMChannelPlan;
import org.opennaas.extensions.router.model.opticalSwitch.dwdm.proteus.ProteusOpticalSwitch;
import org.opennaas.extensions.router.model.opticalSwitch.dwdm.proteus.cards.ProteusOpticalSwitchCard;
import org.opennaas.itests.helpers.AbstractKarafCommandTest;
import org.opennaas.itests.roadm.helpers.RepositoryHelper;
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;
/**
* Spring week 26 <br/>
* http://jira.i2cat.net:8080/browse/MANTYCHORE-156
*
* @author isart
*/
@RunWith(JUnit4TestRunner.class)
@ExamReactorStrategy(EagerSingleStagedReactorFactory.class)
public class ConnectionsKarafCommandsTest extends AbstractKarafCommandTest
{
static Log log =
LogFactory.getLog(ConnectionsKarafCommandsTest.class);
@Inject
private BundleContext bundleContext;
@Inject
@Filter("(type=roadm)")
private IResourceRepository repository;
@Inject
private IProfileManager profileManager;
@Inject
private IProtocolManager protocolManager;
@SuppressWarnings("unused")
@Inject
@Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.roadm.capability.connections)", timeout = 20000)
private BlueprintContainer connectionService;
@SuppressWarnings("unused")
@Inject
@Filter(value = "(osgi.blueprint.container.symbolicname=org.opennaas.extensions.roadm.protocols.wonesys)", timeout = 20000)
private BlueprintContainer wonesysProtocolService;
String resourceName = "pedrosa";
String chassisNum = "0";
String srcCardNum = "1";
String dstCardNum = "17";
String srcPortNum = "0";
String dstPortNum = "129";
int channelNum = 32;
@Configuration
public static Option[] configuration() {
return options(opennaasDistributionConfiguration(),
includeFeatures("opennaas-luminis", "opennaas-roadm-proteus", "itests-helpers"),
noConsole(),
keepRuntimeFolder());
}
@Test
public void getInventoryCommandBasicTest() throws Exception
{
ResourceDescriptor resourceDescriptor = RepositoryHelper.newResourceDescriptor("roadm", resourceName);
List<CapabilityDescriptor> capabilityDescriptors = new ArrayList<CapabilityDescriptor>();
capabilityDescriptors.add(RepositoryHelper.newConnectionsCapabilityDescriptor());
capabilityDescriptors.add(RepositoryHelper.newQueueCapabilityDescriptor());
resourceDescriptor.setCapabilityDescriptors(capabilityDescriptors);
String resourceFriendlyID = resourceDescriptor.getInformation().getType() + ":" + resourceDescriptor.getInformation().getName();
IResource resource = repository.createResource(resourceDescriptor);
Assert.assertNotNull(resource);
createProtocolForResource(resource.getResourceIdentifier().getId());
repository.startResource(resource.getResourceDescriptor().getId());
try {
String responseStr;
// // FIXME refresh should skip the queue
// log.debug("executeCommandWithResponse(connections:getInventory -r " + resourceFriendlyID + ")");
// responseStr = (String) executeCommandWithResponse("connections:getInventory -r " + resourceFriendlyID);
// log.debug(responseStr);
// // Assert.assertNotNull(response);
// if (responseStr != null)
// Assert.fail("Error in the getInventory command");
// check model is updated (start Resource should get Inventory)
ProteusOpticalSwitch proteus = (ProteusOpticalSwitch) resource.getModel();
Assert.assertFalse(proteus.getLogicalDevices().isEmpty());
Assert.assertFalse(proteus.getFiberConnections().isEmpty());
int connectionsInitialSize = proteus.getFiberConnections().size();
ProteusOpticalSwitchCard srcCard = proteus.getCard(0, Integer.parseInt(srcCardNum));
Assert.assertNotNull(srcCard);
Assert.assertNotNull(srcCard.getChannelPlan());
ProteusOpticalSwitchCard dstCard = proteus.getCard(0, Integer.parseInt(dstCardNum));
Assert.assertNotNull(dstCard);
Assert.assertNotNull(dstCard.getChannelPlan());
log.debug("executeCommandWithResponse(connections:getInventory " + resourceFriendlyID + ")");
responseStr = (String) executeCommandWithResponse("connections:getInventory " + resourceFriendlyID);
log.debug(responseStr);
// Assert.assertNotNull(response);
if (responseStr != null)
Assert.fail("Error in the getInventory command");
// check model is updated
proteus = (ProteusOpticalSwitch) resource.getModel();
Assert.assertFalse(proteus.getLogicalDevices().isEmpty());
Assert.assertFalse(proteus.getFiberConnections().isEmpty());
srcCard = proteus.getCard(0, Integer.parseInt(srcCardNum));
Assert.assertNotNull(srcCard);
Assert.assertNotNull(srcCard.getChannelPlan());
dstCard = proteus.getCard(0, Integer.parseInt(dstCardNum));
Assert.assertNotNull(dstCard);
Assert.assertNotNull(dstCard.getChannelPlan());
} finally {
repository.stopResource(resource.getResourceIdentifier().getId());
repository.removeResource(resource.getResourceIdentifier().getId());
}
}
@Test
public void makeConnectionAndListCommandsTest() throws Exception {
ResourceDescriptor resourceDescriptor = RepositoryHelper.newResourceDescriptor("roadm", resourceName);
List<CapabilityDescriptor> capabilityDescriptors = new ArrayList<CapabilityDescriptor>();
capabilityDescriptors.add(RepositoryHelper.newConnectionsCapabilityDescriptor());
capabilityDescriptors.add(RepositoryHelper.newQueueCapabilityDescriptor());
resourceDescriptor.setCapabilityDescriptors(capabilityDescriptors);
String resourceFriendlyID = resourceDescriptor.getInformation().getType() + ":" + resourceDescriptor.getInformation().getName();
log.info("Creating resource...");
IResource resource = repository.createResource(resourceDescriptor);
Assert.assertNotNull(resource);
createProtocolForResource(resource.getResourceIdentifier().getId());
repository.startResource(resource.getResourceDescriptor().getId());
try {
String responseStr;
// // TODO should refresh manually????
// // FIXME refresh should skip the queue
// log.info("executeCommandWithResponse(connections:getInventory " + resourceFriendlyID + ")");
// responseStr = (String) executeCommandWithResponse("connections:getInventory " + resourceFriendlyID);
// log.debug(responseStr);
// // Assert.assertNotNull(response);
// if (responseStr != null)
// Assert.fail("Error in the getInventory command");
String srcPortId = chassisNum + "-" + srcCardNum + "-" + srcPortNum;
String dstPortId = chassisNum + "-" + dstCardNum + "-" + dstPortNum;
WDMChannelPlan channelPlan = (WDMChannelPlan) ((ProteusOpticalSwitch) resource.getModel()).getCard(Integer.parseInt(chassisNum),
Integer.parseInt(srcCardNum)).getChannelPlan();
DWDMChannel channel = (DWDMChannel) channelPlan.getChannel(32);
double lambda = channel.getLambda();
log.info("executeCommandWithResponse(connections:makeConnection " + resourceFriendlyID + " " + srcPortId + " " + lambda + " " + dstPortId + " " + lambda + ")");
responseStr = (String) executeCommandWithResponse("connections:makeConnection " + resourceFriendlyID + " " + srcPortId + " " + lambda + " " + dstPortId + " " + lambda);
log.debug(responseStr);
// Assert.assertNotNull(response);
if (responseStr != null)
Assert.fail("Error in the makeConnection command");
log.info("executeCommandWithResponse(queue:execute " + resourceFriendlyID + ")");
Integer response = (Integer) executeCommandWithResponse("queue:execute " + resourceFriendlyID);
log.debug(response);
// Assert.assertNotNull(response);
if (response != null)
Assert.fail("Error in the execute queue command");
// check model is updated
ProteusOpticalSwitch proteus = (ProteusOpticalSwitch) resource.getModel();
boolean found = false;
for (FiberConnection connection : proteus.getFiberConnections()) {
if (connection.getSrcCard().getModuleNumber() == Integer.parseInt(srcCardNum) &&
connection.getDstCard().getModuleNumber() == Integer.parseInt(dstCardNum) &&
connection.getSrcPort().getPortNumber() == Integer.parseInt(srcPortNum) &&
connection.getDstPort().getPortNumber() == Integer.parseInt(dstPortNum) &&
connection.getSrcFiberChannel().getLambda() == lambda &&
connection.getDstFiberChannel().getLambda() == lambda) {
found = true;
break;
}
}
Assert.assertTrue(found);
log.info("executeCommandWithResponse(connections:list " + resourceFriendlyID);
responseStr = (String) executeCommandWithResponse("connections:list " + resourceFriendlyID);
if (responseStr != null)
Assert.fail("Error in the listConnections command");
} finally {
repository.stopResource(resource.getResourceIdentifier().getId());
repository.removeResource(resource.getResourceIdentifier().getId());
}
}
@Test
public void removeConnectionCommandsTest() throws Exception {
ResourceDescriptor resourceDescriptor = RepositoryHelper.newResourceDescriptor("roadm", resourceName);
List<CapabilityDescriptor> capabilityDescriptors = new ArrayList<CapabilityDescriptor>();
capabilityDescriptors.add(RepositoryHelper.newConnectionsCapabilityDescriptor());
capabilityDescriptors.add(RepositoryHelper.newQueueCapabilityDescriptor());
resourceDescriptor.setCapabilityDescriptors(capabilityDescriptors);
String resourceFriendlyID = resourceDescriptor.getInformation().getType() + ":" + resourceDescriptor.getInformation().getName();
log.info("Creating resource...");
IResource resource = repository.createResource(resourceDescriptor);
Assert.assertNotNull(resource);
createProtocolForResource(resource.getResourceIdentifier().getId());
repository.startResource(resource.getResourceDescriptor().getId());
try {
String responseStr;
// // TODO should refresh manually????
// // FIXME refresh should skip the queue
// log.info("executeCommandWithResponse(connections:getInventory -r " + resourceFriendlyID + ")");
// responseStr = (String) executeCommandWithResponse("connections:getInventory -r " + resourceFriendlyID);
// log.debug(responseStr);
// // Assert.assertNotNull(response);
// if (responseStr != null)
// Assert.fail("Error in getInventory command");
String srcPortId = chassisNum + "-" + srcCardNum + "-" + srcPortNum;
String dstPortId = chassisNum + "-" + dstCardNum + "-" + dstPortNum;
WDMChannelPlan channelPlan = (WDMChannelPlan) ((ProteusOpticalSwitch) resource.getModel()).getCard(Integer.parseInt(chassisNum),
Integer.parseInt(srcCardNum)).getChannelPlan();
DWDMChannel channel = (DWDMChannel) channelPlan.getChannel(32);
double lambda = channel.getLambda();
log.info("executeCommandWithResponse(connections:makeConnection " + resourceFriendlyID + " " + srcPortId + " " + lambda + " " + dstPortId + " " + lambda + ")");
responseStr = (String) executeCommandWithResponse("connections:makeConnection " + resourceFriendlyID + " " + srcPortId + " " + lambda + " " + dstPortId + " " + lambda);
log.debug(responseStr);
// Assert.assertNotNull(response);
if (responseStr != null)
Assert.fail("Error in the makeConnection command");
// should print out of date information
log.info("executeCommandWithResponse(connections:list " + resourceFriendlyID);
responseStr = (String) executeCommandWithResponse("connections:list " + resourceFriendlyID);
if (responseStr != null)
Assert.fail("Error in the listConnections command");
log.info("executeCommandWithResponse(connections:removeConnection " + resourceFriendlyID + " " + srcPortId + " " + lambda + " " + dstPortId + " " + lambda + ")");
responseStr = (String) executeCommandWithResponse("connections:removeConnection " + resourceFriendlyID + " " + srcPortId + " " + lambda + " " + dstPortId + " " + lambda);
log.debug(responseStr);
// Assert.assertNotNull(response);
if (responseStr != null)
Assert.fail("Error in the removeConnection command");
log.info("executeCommandWithResponse(queue:execute " + resourceFriendlyID + ")");
Integer response = (Integer) executeCommandWithResponse("queue:execute " + resourceFriendlyID);
log.debug(response);
// Assert.assertNotNull(response);
if (response != null)
Assert.fail("Error in the execute queue command");
// check model is updated
ProteusOpticalSwitch proteus = (ProteusOpticalSwitch) resource.getModel();
boolean found = false;
for (FiberConnection connection : proteus.getFiberConnections()) {
if (connection.getSrcCard().getModuleNumber() == Integer.parseInt(srcCardNum) &&
connection.getDstCard().getModuleNumber() == Integer.parseInt(dstCardNum) &&
connection.getSrcPort().getPortNumber() == Integer.parseInt(srcPortNum) &&
connection.getDstPort().getPortNumber() == Integer.parseInt(dstPortNum) &&
connection.getSrcFiberChannel().getLambda() == lambda &&
connection.getDstFiberChannel().getLambda() == lambda) {
found = true;
break;
}
}
Assert.assertFalse(found);
} finally {
repository.stopResource(resource.getResourceIdentifier().getId());
repository.removeResource(resource.getResourceIdentifier().getId());
}
}
@Test
public void getInventoryCommandCompleteTest() throws Exception {
// connections:getInventory
// cards, number of connections
// -r (refresh model before)
ResourceDescriptor resourceDescriptor = RepositoryHelper.newResourceDescriptor("roadm", resourceName);
List<CapabilityDescriptor> capabilityDescriptors = new ArrayList<CapabilityDescriptor>();
capabilityDescriptors.add(RepositoryHelper.newConnectionsCapabilityDescriptor());
capabilityDescriptors.add(RepositoryHelper.newQueueCapabilityDescriptor());
resourceDescriptor.setCapabilityDescriptors(capabilityDescriptors);
String resourceFriendlyID = resourceDescriptor.getInformation().getType() + ":" + resourceDescriptor.getInformation().getName();
IResource resource = repository.createResource(resourceDescriptor);
Assert.assertNotNull(resource);
createProtocolForResource(resource.getResourceIdentifier().getId());
repository.startResource(resource.getResourceDescriptor().getId());
try {
String responseStr;
// // FIXME refresh should skip the queue
// log.debug("executeCommandWithResponse(connections:getInventory " + resourceFriendlyID + ")");
// responseStr = (String) executeCommandWithResponse("connections:getInventory " + resourceFriendlyID);
// log.debug(responseStr);
// // Assert.assertNotNull(response);
// if (responseStr != null)
// Assert.fail("Error in the getInventory command");
// check model is updated (startResource should have loaded inventory)
ProteusOpticalSwitch proteus = (ProteusOpticalSwitch) resource.getModel();
Assert.assertFalse(proteus.getLogicalDevices().isEmpty());
Assert.assertFalse(proteus.getFiberConnections().isEmpty());
int connectionsInitialSize = proteus.getFiberConnections().size();
ProteusOpticalSwitchCard srcCard = proteus.getCard(0, Integer.parseInt(srcCardNum));
Assert.assertNotNull(srcCard);
Assert.assertNotNull(srcCard.getChannelPlan());
ProteusOpticalSwitchCard dstCard = proteus.getCard(0, Integer.parseInt(dstCardNum));
Assert.assertNotNull(dstCard);
Assert.assertNotNull(dstCard.getChannelPlan());
log.debug("executeCommandWithResponse(connections:getInventory " + resourceFriendlyID + ")");
responseStr = (String) executeCommandWithResponse("connections:getInventory " + resourceFriendlyID);
log.debug(responseStr);
// Assert.assertNotNull(response);
if (responseStr != null)
Assert.fail("Error in the getInventory command");
// check model is updated
proteus = (ProteusOpticalSwitch) resource.getModel();
Assert.assertFalse(proteus.getLogicalDevices().isEmpty());
Assert.assertFalse(proteus.getFiberConnections().isEmpty());
srcCard = proteus.getCard(0, Integer.parseInt(srcCardNum));
Assert.assertNotNull(srcCard);
Assert.assertNotNull(srcCard.getChannelPlan());
dstCard = proteus.getCard(0, Integer.parseInt(dstCardNum));
Assert.assertNotNull(dstCard);
Assert.assertNotNull(dstCard.getChannelPlan());
String srcPortId = chassisNum + "-" + srcCardNum + "-" + srcPortNum;
String dstPortId = chassisNum + "-" + dstCardNum + "-" + dstPortNum;
WDMChannelPlan channelPlan = (WDMChannelPlan) ((ProteusOpticalSwitch) resource.getModel()).getCard(Integer.parseInt(chassisNum),
Integer.parseInt(srcCardNum)).getChannelPlan();
DWDMChannel channel = (DWDMChannel) channelPlan.getChannel(32);
double lambda = channel.getLambda();
log.info("executeCommandWithResponse(connections:makeConnection " + resourceFriendlyID + " " + srcPortId + " " + lambda + " " + dstPortId + " " + lambda + ")");
responseStr = (String) executeCommandWithResponse("connections:makeConnection " + resourceFriendlyID + " " + srcPortId + " " + lambda + " " + dstPortId + " " + lambda);
log.debug(responseStr);
// Assert.assertNotNull(response);
if (responseStr != null)
Assert.fail("Error in the makeConnection command");
log.debug("executeCommandWithResponse(queue:execute " + resourceFriendlyID + ")");
Integer response = (Integer) executeCommandWithResponse("queue:execute " + resourceFriendlyID);
log.debug(response);
// Assert.assertNotNull(response);
if (response != null)
Assert.fail("Error in the execute queue command");
log.debug("executeCommandWithResponse(connections:getInventory " + resourceFriendlyID + ")");
responseStr = (String) executeCommandWithResponse("connections:getInventory " + resourceFriendlyID);
log.debug(responseStr);
// Assert.assertNotNull(response);
if (responseStr != null)
Assert.fail("Error in the getInventory command");
// check model is updated
proteus = (ProteusOpticalSwitch) resource.getModel();
Assert.assertFalse(proteus.getLogicalDevices().isEmpty());
Assert.assertFalse(proteus.getFiberConnections().isEmpty());
Assert.assertTrue(proteus.getFiberConnections().size() > connectionsInitialSize);
srcCard = proteus.getCard(0, Integer.parseInt(srcCardNum));
Assert.assertNotNull(srcCard);
Assert.assertNotNull(srcCard.getChannelPlan());
dstCard = proteus.getCard(0, Integer.parseInt(dstCardNum));
Assert.assertNotNull(dstCard);
Assert.assertNotNull(dstCard.getChannelPlan());
} finally {
repository.stopResource(resource.getResourceIdentifier().getId());
repository.removeResource(resource.getResourceIdentifier().getId());
}
}
public void createProtocolForResource(String resourceId) throws ProtocolException {
protocolManager.getProtocolSessionManagerWithContext(resourceId, newWonesysSessionContext());
}
private ProtocolSessionContext newWonesysSessionContext() {
// String uri = System.getProperty("protocol.uri");
// if (uri == null || uri.equals("${protocol.uri}") || uri.isEmpty()) {
// uri = "mock://user:pass@host.net:2212/mocksubsystem";
// }
ProtocolSessionContext protocolSessionContext = new ProtocolSessionContext();
protocolSessionContext.addParameter("protocol.mock", "true");
protocolSessionContext.addParameter(ProtocolSessionContext.PROTOCOL,
"wonesys");
// ADDED
return protocolSessionContext;
}
public Object executeCommandWithResponse(String command) throws Exception {
// Run some commands to make sure they are installed properly
ByteArrayOutputStream outputError = new ByteArrayOutputStream();
PrintStream psE = new PrintStream(outputError);
ByteArrayOutputStream output = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(output);
CommandSession cs = commandProcessor.createSession(System.in, ps, psE);
Object commandOutput = null;
try {
commandOutput = cs.execute(command);
return commandOutput;
} catch (IllegalArgumentException e) {
Assert.fail("Action should have thrown an exception because: " + e.toString());
} catch (NoSuchMethodException a) {
log.error("Method for command not found: " + a.getLocalizedMessage());
Assert.fail("Method for command not found.");
} finally {
cs.close();
}
return commandOutput;
}
}