package org.opennaas.extensions.router.junos.actionssets.digester.test;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import junit.framework.Assert;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
import org.opennaas.extensions.router.junos.commandsets.digester.RoutingOptionsParser;
import org.opennaas.extensions.router.model.ComputerSystem;
import org.opennaas.extensions.router.model.GRETunnelConfiguration;
import org.opennaas.extensions.router.model.GRETunnelEndpoint;
import org.opennaas.extensions.router.model.GRETunnelService;
import org.opennaas.extensions.router.model.IPProtocolEndpoint;
import org.opennaas.extensions.router.model.NetworkPort;
import org.opennaas.extensions.router.model.ProtocolEndpoint;
import org.opennaas.extensions.router.model.RouteCalculationService;
import org.opennaas.extensions.router.model.Service;
import org.opennaas.extensions.router.model.System;
public class RoutingOptionsParserTest {
private Log log = LogFactory.getLog(RoutingOptionsParserTest.class);
@Test
public void testParseRoutingOptions() throws Exception {
String message = readStringFromFile("/parsers/getConfigWithRoutingOptionsAndRouterIdAndGRE.xml");
System model = createSampleModel();
RoutingOptionsParser parser = new RoutingOptionsParser(model);
parser.init();
parser.configurableParse(new ByteArrayInputStream(message.getBytes()));
System updatedModel = parser.getModel();
// check nextHopRoute is set
Assert.assertFalse(updatedModel.getNextHopRoute().isEmpty());
Assert.assertEquals(2, updatedModel.getNextHopRoute().size());
// check routerId is set
String routerId = null;
for (Service service : updatedModel.getHostedService()) {
if (service instanceof RouteCalculationService) {
Assert.assertNotNull("Existing RouteCalculationServices have routerId setted up.", ((RouteCalculationService) service).getRouterID());
if (routerId == null) {
routerId = ((RouteCalculationService) service).getRouterID();
} else {
Assert.assertEquals("routerId is the same in all RouteCalculationServices", routerId,
((RouteCalculationService) service).getRouterID());
}
}
/* GRE Tunnel Routing-options */
else if (service instanceof GRETunnelService) {
GRETunnelService greService = (GRETunnelService) service;
for (ProtocolEndpoint pE : greService.getProtocolEndpoint()) {
if (pE instanceof GRETunnelEndpoint) {
GRETunnelEndpoint gE = (GRETunnelEndpoint) pE;
Assert.assertTrue(gE.getNextHopRoutes().size() == 1);
}
}
}
}
log.info(parser.toPrint(updatedModel));
}
/**
* Simple parser. It was used for proves with xml files
*
* @param stream
* @return
*/
private String readStringFromFile(String pathFile) throws Exception {
String answer = null;
InputStream inputFile = getClass().getResourceAsStream(pathFile);
InputStreamReader streamReader = new InputStreamReader(inputFile);
StringBuffer fileData = new StringBuffer(1000);
BufferedReader reader = new BufferedReader(streamReader);
char[] buf = new char[1024];
int numRead = 0;
while ((numRead = reader.read(buf)) != -1) {
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
answer = fileData.toString();
return answer;
}
private System createSampleModel() {
System model = new ComputerSystem();
/* OSPF Service */
// RouteCalculationService service = new OSPFService();
// model.addHostedService(service);
// model.addHostedService(new OSPFService());
/* GRETunnel Service */
GRETunnelService greService = new GRETunnelService();
GRETunnelConfiguration greConfig = new GRETunnelConfiguration();
greConfig.setSourceAddress("192.168.1.1");
greConfig.setDestinationAddress("192.168.1.2");
greConfig.setKey(2);
greService.setGRETunnelConfiguration(greConfig);
greService.setName("gr-0/1/0");
GRETunnelEndpoint gE = new GRETunnelEndpoint();
gE.setIPv4Address("192.168.1.3");
gE.setSubnetMask("255.255.255.0");
greService.addProtocolEndpoint(gE);
model.addHostedService(greService);
/* IPProtocolEndpoint */
NetworkPort port = new NetworkPort();
port.setName("fe-0/3/1");
port.setPortNumber(0);
IPProtocolEndpoint pE = new IPProtocolEndpoint();
pE.setIPv4Address("10.10.10.10/8");
port.addProtocolEndpoint(pE);
model.addLogicalDevice(port);
return model;
}
}