package org.opennaas.extensions.router.junos.actionssets.actions.test.vrrp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import junit.framework.Assert;
import net.i2cat.netconf.rpc.Query;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.easymock.Capture;
import org.easymock.EasyMock;
import org.easymock.IAnswer;
import org.junit.Before;
import org.junit.Test;
import org.opennaas.core.resources.action.ActionResponse;
import org.opennaas.core.resources.helpers.XmlHelper;
import org.opennaas.core.resources.protocol.IProtocolSession;
import org.opennaas.core.resources.protocol.IProtocolSessionManager;
import org.opennaas.core.resources.protocol.ProtocolException;
import org.opennaas.extensions.router.junos.actionssets.ActionConstants;
import org.opennaas.extensions.router.junos.actionssets.actions.JunosAction;
import org.opennaas.extensions.router.junos.actionssets.actions.test.ActionTestHelper;
import org.opennaas.extensions.router.junos.actionssets.actions.vrrp.ConfigureVRRPAction;
import org.opennaas.extensions.router.junos.actionssets.actions.vrrp.UnconfigureVRRPAction;
import org.opennaas.extensions.router.junos.actionssets.actions.vrrp.UpdateVRRPPriorityAction;
import org.opennaas.extensions.router.junos.actionssets.actions.vrrp.UpdateVRRPVirtualIPAddressAction;
import org.opennaas.extensions.router.model.ComputerSystem;
import org.xml.sax.SAXException;
/**
* @author Julio Carlos Barrera
*/
public class VRRPActionTest {
private Log log = LogFactory.getLog(VRRPActionTest.class);
private JunosAction action;
private IProtocolSessionManager mockProtocolSessionManager;
private IProtocolSession mockProtocolSession;
private Capture<Query> message;
@Before
public void init() {
try {
prepareMocks();
} catch (ProtocolException e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
private void prepareMocks() throws ProtocolException {
mockProtocolSession = EasyMock.createMock(IProtocolSession.class);
message = new Capture<Query>();
mockProtocolSession.sendReceive(EasyMock.capture(message));
EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
public Object answer() throws Throwable {
return null;
}
});
mockProtocolSessionManager = EasyMock.createMock(IProtocolSessionManager.class);
EasyMock.expect(mockProtocolSessionManager.getSessionById(EasyMock.anyObject(String.class), EasyMock.anyBoolean())).andReturn(
mockProtocolSession);
EasyMock.expect(mockProtocolSessionManager.obtainSessionByProtocol(EasyMock.anyObject(String.class), EasyMock.anyBoolean())).andReturn(
mockProtocolSession);
EasyMock.replay(mockProtocolSession);
EasyMock.replay(mockProtocolSessionManager);
}
@Test
public void configureVRRPTest() {
log.info("Testing ConfigureVRRP");
action = new ConfigureVRRPAction();
action.setModelToUpdate(new ComputerSystem());
action.setParams(ActionTestHelper.newParamsVRRPGroupWithOneEndpoint().getProtocolEndpoint().get(0));
try {
ActionResponse response = action.execute(mockProtocolSessionManager);
Assert.assertTrue(response.getActionID().equals(ActionConstants.VRRP_CONFIGURE));
Assert.assertEquals(action.getTemplate(), "/VM_files/configureVRRP.vm");
// read expected message into a String
String expectedMessage = textFileToString("/actions/configureVRRP.xml");
assertEqualXMLConfigurations(expectedMessage, message.getValue().getConfig());
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
@Test
public void unconfigureVRRPTest() {
log.info("Testing UnconfigureVRRP");
action = new UnconfigureVRRPAction();
action.setModelToUpdate(new ComputerSystem());
action.setParams(ActionTestHelper.newParamsVRRPGroupWithOneEndpoint().getProtocolEndpoint().get(0));
try {
ActionResponse response = action.execute(mockProtocolSessionManager);
Assert.assertTrue(response.getActionID().equals(ActionConstants.VRRP_UNCONFIGURE));
Assert.assertEquals(action.getTemplate(), "/VM_files/unconfigureVRRP.vm");
// read expected message into a String
String expectedMessage = textFileToString("/actions/unconfigureVRRP.xml");
assertEqualXMLConfigurations(expectedMessage, message.getValue().getConfig());
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
@Test
public void updateVirtualIPAddressTest() {
log.info("Testing UpdateVirtualIPAddress");
action = new UpdateVRRPVirtualIPAddressAction();
action.setModelToUpdate(new ComputerSystem());
action.setParams(ActionTestHelper.newParamsVRRPGroupWithOneEndpoint().getProtocolEndpoint().get(0));
try {
ActionResponse response = action.execute(mockProtocolSessionManager);
Assert.assertTrue(response.getActionID().equals(ActionConstants.VRRP_UPDATE_IP_ADDRESS));
Assert.assertEquals(action.getTemplate(), "/VM_files/updateVRRPIPAddress.vm");
// read expected message into a String
String expectedMessage = textFileToString("/actions/updateVRRPIPAddress.xml");
assertEqualXMLConfigurations(expectedMessage, message.getValue().getConfig());
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
@Test
public void updatePriorityTest() {
log.info("Testing UpdatePriority");
action = new UpdateVRRPPriorityAction();
action.setModelToUpdate(new ComputerSystem());
action.setParams(ActionTestHelper.newParamsVRRPGroupWithOneEndpoint().getProtocolEndpoint().get(0));
try {
ActionResponse response = action.execute(mockProtocolSessionManager);
Assert.assertTrue(response.getActionID().equals(ActionConstants.VRRP_UPDATE_PRIORITY));
Assert.assertEquals(action.getTemplate(), "/VM_files/updateVRRPPriority.vm");
// read expected message into a String
String expectedMessage = textFileToString("/actions/updateVRRPPriority.xml");
assertEqualXMLConfigurations(expectedMessage, message.getValue().getConfig());
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
private void assertEqualXMLConfigurations(String expectedXMLConfiguration, String generatedXMLConfiguration) throws IOException, SAXException,
TransformerException, ParserConfigurationException {
// XML-format messages and compare both
log.trace("Produced XML configuration:\n" + generatedXMLConfiguration);
log.trace("Expected XML configuration:\n" + expectedXMLConfiguration);
Assert.assertTrue("Generated configuration XML and expected configuration XML must be equal",
XmlHelper.compareXMLStrings(generatedXMLConfiguration, expectedXMLConfiguration));
}
private String textFileToString(String fileLocation) throws IOException {
String fileString = "";
BufferedReader br = new BufferedReader(
new InputStreamReader(getClass().getResourceAsStream(fileLocation)));
String line;
while ((line = br.readLine()) != null) {
fileString += line;
}
br.close();
return fileString;
}
}