package org.opennaas.extensions.router.junos.actionssets.velocity.test;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import junit.framework.Assert;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
import org.opennaas.core.resources.helpers.XmlHelper;
import org.opennaas.extensions.router.model.EnabledLogicalElement.EnabledState;
import org.opennaas.extensions.router.model.EthernetPort;
import org.opennaas.extensions.router.model.OSPFArea;
import org.opennaas.extensions.router.model.OSPFAreaConfiguration;
import org.opennaas.extensions.router.model.OSPFProtocolEndpoint;
import org.opennaas.extensions.router.model.OSPFService;
import org.opennaas.extensions.router.model.utils.IPUtilsHelper;
/**
* This class if for testing the ospf velocity templates to check input params and the output
*
* @author Jordi Puig
*
*/
public class OSPFVelocityTemplatesTest extends VelocityTemplatesTest {
private final Log log = LogFactory.getLog(OSPFVelocityTemplatesTest.class);
@Test
public void testAddOSPFInterfaceInAreaTemplate() throws Exception {
template = "/VM_files/ospfAddInterfaceInArea.vm";
Map<String, Object> extraParams = new HashMap<String, Object>();
extraParams.put("disabledState", EnabledState.DISABLED.toString());
extraParams.put("enabledState", EnabledState.ENABLED.toString());
extraParams.put("elementName", "");
extraParams.put("ipUtilsHelper", IPUtilsHelper.class);
String message = callVelocity(template, getOSPFArea(), extraParams);
Assert.assertNotNull(message);
Assert.assertTrue(message.contains("<name>0.0.0.0</name>"));
Assert.assertTrue(message.contains("<name>fe-0/0/2.1</name>"));
Assert.assertTrue(message.contains("<name>fe-0/0/2.2</name>"));
log.info(XmlHelper.formatXML(message));
}
@Test
public void testClearOSPFTemplate() throws Exception {
template = "/VM_files/ospfClear.vm";
String message = callVelocity(template, getOSPFService(), new HashMap<String, Object>());
Assert.assertNotNull(message);
Assert.assertTrue(message.contains("<ospf operation =\"delete\">"));
log.info(XmlHelper.formatXML(message));
}
@Test
public void testConfigureOSPFTemplate() throws Exception {
template = "/VM_files/ospfConfigure.vm";
Map<String, Object> extraParams = new HashMap<String, Object>();
extraParams.put("disabledState", EnabledState.DISABLED.toString());
extraParams.put("enabledState", EnabledState.ENABLED.toString());
String message = callVelocity(template, getOSPFService(), extraParams);
Assert.assertNotNull(message);
// TODO Use xpath to check xml tree is correct
Assert.assertTrue(message.contains("10.11.12.13"));
Assert.assertFalse(message.contains("<enable/>"));
log.info(XmlHelper.formatXML(message));
}
@Test
public void testConfigureOSPFTemplateWithoutRID() throws Exception {
template = "/VM_files/ospfConfigure.vm";
Map<String, Object> extraParams = new HashMap<String, Object>();
extraParams.put("disabledState", EnabledState.DISABLED.toString());
extraParams.put("enabledState", EnabledState.ENABLED.toString());
OSPFService service = getOSPFService();
service.setRouterID(null);
String message = callVelocity(template, service, extraParams);
Assert.assertNotNull(message);
log.info(XmlHelper.formatXML(message));
// TODO Use xpath to check xml tree is correct
Assert.assertFalse("Rpc message must not change routing-options", message.contains("routing-options"));
Assert.assertFalse("Rpc message must not change router-id", message.contains("router-id"));
log.info(XmlHelper.formatXML(message));
}
@Test
public void testConfigureOSPFAreaTemplate() throws Exception {
template = "/VM_files/ospfConfigureArea.vm";
Map<String, Object> extraParams = new HashMap<String, Object>();
extraParams.put("disabledState", EnabledState.DISABLED.toString());
extraParams.put("enabledState", EnabledState.ENABLED.toString());
extraParams.put("elementName", "");
extraParams.put("ipUtilsHelper", IPUtilsHelper.class);
String message = callVelocity(template, getOSPFAreaConfiguration(), extraParams);
Assert.assertNotNull(message);
Assert.assertTrue(message.contains("<name>0.0.0.0</name>"));
Assert.assertTrue(message.contains("<name>fe-0/0/2.1</name>"));
Assert.assertTrue(message.contains("<name>fe-0/0/2.2</name>"));
log.info(XmlHelper.formatXML(message));
}
@Test
public void testConfigureOSPFInterfaceStatusTemplate() throws Exception {
template = "/VM_files/ospfConfigureInterfaceStatus.vm";
Map<String, Object> extraParams = new HashMap<String, Object>();
extraParams.put("disabledState", EnabledState.DISABLED.toString());
extraParams.put("enabledState", EnabledState.ENABLED.toString());
extraParams.put("elementName", "");
extraParams.put("ipUtilsHelper", IPUtilsHelper.class);
// Enable
String message = callVelocity(template, getConfigureOSPFInterfaceStatusParameters(true), extraParams);
Assert.assertNotNull(message);
Assert.assertTrue(message.contains("<name>0.0.0.0</name>"));
Assert.assertTrue(message.contains("<name>fe-0/0/2.1</name>"));
Assert.assertTrue(message.contains("<name>fe-0/0/2.2</name>"));
Assert.assertFalse(message.contains("<disable/>"));
// Disable
message = callVelocity(template, getConfigureOSPFInterfaceStatusParameters(false), extraParams);
Assert.assertNotNull(message);
Assert.assertTrue(message.contains("<name>0.0.0.0</name>"));
Assert.assertTrue(message.contains("<name>fe-0/0/2.1</name>"));
Assert.assertTrue(message.contains("<name>fe-0/0/2.2</name>"));
Assert.assertTrue(message.contains("<disable/>"));
log.info(XmlHelper.formatXML(message));
}
@Test
public void testConfigureOSPFStatusTemplate() throws Exception {
template = "/VM_files/ospfConfigureStatus.vm";
Map<String, Object> extraParams = new HashMap<String, Object>();
extraParams.put("disabledState", EnabledState.DISABLED.toString());
extraParams.put("enabledState", EnabledState.ENABLED.toString());
OSPFService service = new OSPFService();
service.setEnabledState(EnabledState.ENABLED);
String message1 = callVelocity(template, service, extraParams);
Assert.assertNotNull(message1);
Assert.assertFalse(message1.contains("<disable/>"));
service.setEnabledState(EnabledState.DISABLED);
String message2 = callVelocity(template, service, extraParams);
Assert.assertTrue(message2.contains("<disable/>"));
service.setEnabledState(EnabledState.ENABLED);
String message3 = callVelocity(template, service, extraParams);
Assert.assertFalse(message3.contains("<disable/>"));
log.info(XmlHelper.formatXML(message1));
log.info(XmlHelper.formatXML(message2));
log.info(XmlHelper.formatXML(message3));
}
@Test
public void testRemoveOSPFTemplate() throws Exception {
template = "/VM_files/ospfClear.vm";
OSPFService service = new OSPFService();
service.setEnabledState(EnabledState.ENABLED);
String message = callVelocity(template, service, new HashMap<String, Object>());
Assert.assertNotNull(message);
Assert.assertTrue(message.contains("<ospf operation =\"delete\">"));
log.info(XmlHelper.formatXML(message));
}
@Test
public void testRemoveOSPFInterfaceInArea() throws Exception {
template = "/VM_files/ospfRemoveInterfaceInArea.vm";
Map<String, Object> extraParams = new HashMap<String, Object>();
extraParams.put("disabledState", EnabledState.DISABLED.toString());
extraParams.put("enableState", EnabledState.ENABLED.toString());
extraParams.put("ipUtilsHelper", IPUtilsHelper.class);
extraParams.put("elementName", "");
String message = callVelocity(template, getOSPFArea(), extraParams);
Assert.assertNotNull(message);
Assert.assertTrue(message.contains("<name>fe-0/0/2.1</name>"));
Assert.assertTrue(message.contains("<name>fe-0/0/2.2</name>"));
Assert.assertTrue(message.contains("<interface operation=\"delete\">"));
log.info(XmlHelper.formatXML(message));
}
/**
* Get the OSPFAreaConfiguration
*
* @return OSPFAreaConfiguration
* @throws IOException
*/
private OSPFAreaConfiguration getOSPFAreaConfiguration() throws IOException {
// Add OSPFArea and areaId = 0.0.0.0
OSPFAreaConfiguration ospfAreaConfiguration = new OSPFAreaConfiguration();
ospfAreaConfiguration.setOSPFArea(getOSPFArea());
return ospfAreaConfiguration;
}
/**
* Create a two OSPFProtocolEndpoint with the state like the state param
*
* @return List<OSPFProtocolEndpoint>
* @throws IOException
*/
private OSPFService getConfigureOSPFInterfaceStatusParameters(Boolean state) throws IOException {
OSPFService service = new OSPFService();
OSPFAreaConfiguration areaConfig = new OSPFAreaConfiguration();
service.addOSPFAreaConfiguration(areaConfig);
// Add OSPFArea and areaId = 0.0.0.0
OSPFArea ospfArea = new OSPFArea();
ospfArea.setAreaID(0);
areaConfig.setOSPFArea(ospfArea);
OSPFProtocolEndpoint endpoint1 = getOSPFProtocolEndpoint("fe-0/0/2", "1");
OSPFProtocolEndpoint endpoint2 = getOSPFProtocolEndpoint("fe-0/0/2", "2");
endpoint1.setEnabledState(state ? EnabledState.ENABLED : EnabledState.DISABLED);
endpoint2.setEnabledState(state ? EnabledState.ENABLED : EnabledState.DISABLED);
ospfArea.addEndpointInArea(endpoint1);
ospfArea.addEndpointInArea(endpoint2);
OSPFAreaConfiguration areaConfig2 = new OSPFAreaConfiguration();
service.addOSPFAreaConfiguration(areaConfig2);
// Add OSPFArea and areaId = 0.0.0.2
OSPFArea ospfArea2 = new OSPFArea();
ospfArea2.setAreaID(2);
areaConfig2.setOSPFArea(ospfArea2);
OSPFProtocolEndpoint endpoint3 = getOSPFProtocolEndpoint("fe-0/0/3", "1");
endpoint3.setEnabledState(state ? EnabledState.ENABLED : EnabledState.DISABLED);
ospfArea2.addEndpointInArea(endpoint3);
return service;
}
/**
* Create a OSPFArea
*
* @return OSPFArea
* @throws IOException
*/
private OSPFArea getOSPFArea() throws IOException {
// Add OSPFArea and areaId = 0.0.0.0
OSPFArea ospfArea = new OSPFArea();
ospfArea.setAreaID(0);
// Interface 1
ospfArea.addEndpointInArea(getOSPFProtocolEndpoint("fe-0/0/2", "1"));
// Interface 2
ospfArea.addEndpointInArea(getOSPFProtocolEndpoint("fe-0/0/2", "2"));
return ospfArea;
}
/**
* Create a OSPFProtocolEndpoint from the params
*
* @param areaId
* @param portName
* @return OSPFProtocolEndpoint
* @throws IOException
*/
private OSPFProtocolEndpoint getOSPFProtocolEndpoint(String name, String number) throws IOException {
OSPFProtocolEndpoint ospfProtocolEndpoint = new OSPFProtocolEndpoint();
ospfProtocolEndpoint.setName(name + "." + number);
ospfProtocolEndpoint.setEnabledState(EnabledState.ENABLED);
return ospfProtocolEndpoint;
}
/**
* Create a OSPFService
*
* @return
*/
private OSPFService getOSPFService() {
// create interfaces
EthernetPort port1 = new EthernetPort();
port1.setName("fe-0/3/0");
port1.setPortNumber(1);
EthernetPort port2 = new EthernetPort();
port2.setName("fe-0/3/0");
port2.setPortNumber(2);
EthernetPort port3 = new EthernetPort();
port3.setName("fe-0/3/1");
// create ospf config
OSPFService service = new OSPFService();
service.setRouterID("10.11.12.13");
// 1st area
OSPFAreaConfiguration areaConfig1 = new OSPFAreaConfiguration();
OSPFArea area1 = new OSPFArea();
area1.setAreaID(0l);
areaConfig1.setOSPFArea(area1);
OSPFProtocolEndpoint pep1 = new OSPFProtocolEndpoint();
pep1.setEnabledState(EnabledState.ENABLED);
OSPFProtocolEndpoint pep2 = new OSPFProtocolEndpoint();
pep2.setEnabledState(EnabledState.DISABLED);
pep1.addLogiaclPort(port1);
pep2.addLogiaclPort(port2);
area1.addEndpointInArea(pep1);
area1.addEndpointInArea(pep2);
service.addOSPFAreaConfiguration(areaConfig1);
// 2nd area
OSPFAreaConfiguration areaConfig2 = new OSPFAreaConfiguration();
OSPFArea area2 = new OSPFArea();
area2.setAreaID(1l);
areaConfig2.setOSPFArea(area2);
OSPFProtocolEndpoint pep3 = new OSPFProtocolEndpoint();
pep3.setEnabledState(EnabledState.ENABLED);
pep3.addLogiaclPort(port3);
area2.addEndpointInArea(pep3);
service.addOSPFAreaConfiguration(areaConfig2);
return service;
}
}