/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2006-2011 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc.
*
* OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
*
* OpenNMS(R) is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
* by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* OpenNMS(R) is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenNMS(R). If not, see:
* http://www.gnu.org/licenses/
*
* For more information contact:
* OpenNMS(R) Licensing <license@opennms.org>
* http://www.opennms.org/
* http://www.opennms.com/
*******************************************************************************/
package org.opennms.web.svclayer.support;
import static org.easymock.EasyMock.expect;
import static org.opennms.core.utils.InetAddressUtils.addr;
import java.net.InetAddress;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Set;
import java.util.TreeSet;
import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
import org.opennms.netmgt.dao.ApplicationDao;
import org.opennms.netmgt.dao.GraphDao;
import org.opennms.netmgt.dao.LocationMonitorDao;
import org.opennms.netmgt.dao.MonitoredServiceDao;
import org.opennms.netmgt.dao.ResourceDao;
import org.opennms.netmgt.dao.support.MockResourceType;
import org.opennms.netmgt.model.OnmsApplication;
import org.opennms.netmgt.model.OnmsAttribute;
import org.opennms.netmgt.model.OnmsIpInterface;
import org.opennms.netmgt.model.OnmsLocationMonitor;
import org.opennms.netmgt.model.OnmsLocationSpecificStatus;
import org.opennms.netmgt.model.OnmsMonitoredService;
import org.opennms.netmgt.model.OnmsMonitoringLocationDefinition;
import org.opennms.netmgt.model.OnmsNode;
import org.opennms.netmgt.model.OnmsResource;
import org.opennms.netmgt.model.OnmsServiceType;
import org.opennms.netmgt.model.PollStatus;
import org.opennms.netmgt.model.PrefabGraph;
import org.opennms.netmgt.model.OnmsLocationMonitor.MonitorStatus;
import org.opennms.test.ThrowableAnticipator;
import org.opennms.test.mock.EasyMockUtils;
import org.opennms.web.command.DistributedStatusDetailsCommand;
import org.opennms.web.svclayer.SimpleWebTable;
import org.opennms.web.svclayer.SimpleWebTable.Cell;
import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import org.springframework.validation.ObjectError;
public class DefaultDistributedStatusServiceTest extends TestCase {
private DefaultDistributedStatusService m_service = new DefaultDistributedStatusService();
private EasyMockUtils m_easyMockUtils = new EasyMockUtils();
private MonitoredServiceDao m_monitoredServiceDao = m_easyMockUtils.createMock(MonitoredServiceDao.class);
private LocationMonitorDao m_locationMonitorDao = m_easyMockUtils.createMock(LocationMonitorDao.class);
private ApplicationDao m_applicationDao = m_easyMockUtils.createMock(ApplicationDao.class);
private ResourceDao m_resourceDao = m_easyMockUtils.createMock(ResourceDao.class);
private GraphDao m_graphDao = m_easyMockUtils.createMock(GraphDao.class);
private OnmsMonitoringLocationDefinition m_locationDefinition1;
private OnmsMonitoringLocationDefinition m_locationDefinition2;
private OnmsMonitoringLocationDefinition m_locationDefinition3;
private OnmsLocationMonitor m_locationMonitor1_1;
private OnmsLocationMonitor m_locationMonitor2_1;
private OnmsLocationMonitor m_locationMonitor2_2;
private OnmsApplication m_application1;
private OnmsApplication m_application2;
private Collection<OnmsMonitoredService> m_services;
private OnmsNode m_node;
private String m_ip;
private Set<OnmsMonitoredService> m_applicationServices1;
private Set<OnmsMonitoredService> m_applicationServices2;
private static final SimpleDateFormat s_dbDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.mmm");
public final static String IGNORE_MATCH = "**IGNORE*MATCH**";
@Override
protected void setUp() throws Exception {
super.setUp();
m_service.setMonitoredServiceDao(m_monitoredServiceDao);
m_service.setLocationMonitorDao(m_locationMonitorDao);
m_service.setApplicationDao(m_applicationDao);
m_service.setResourceDao(m_resourceDao);
m_service.setGraphDao(m_graphDao);
m_service.afterPropertiesSet();
m_locationDefinition1 = new OnmsMonitoringLocationDefinition("Raleigh", "raleigh", "OpenNMS NC");
m_locationDefinition2 = new OnmsMonitoringLocationDefinition("Durham", "durham", "OpenNMS NC");
m_locationDefinition3 = new OnmsMonitoringLocationDefinition("Columbus", "columbus", "OpenNMS OH");
m_application1 = new OnmsApplication();
m_application1.setName("Application 1");
m_application2 = new OnmsApplication();
m_application2.setName("Application 2");
m_locationMonitor1_1 = new OnmsLocationMonitor();
m_locationMonitor1_1.setId(1);
m_locationMonitor1_1.setLastCheckInTime(new Date());
m_locationMonitor1_1.setDefinitionName("Raleigh");
m_locationMonitor1_1.setStatus(MonitorStatus.STARTED);
assertEquals("location monitor 1.1 status", MonitorStatus.STARTED, m_locationMonitor1_1.getStatus());
m_locationMonitor2_1 = new OnmsLocationMonitor();
m_locationMonitor2_1.setId(2);
m_locationMonitor2_1.setLastCheckInTime(new Date());
m_locationMonitor2_1.setDefinitionName("Durham");
m_locationMonitor2_1.setStatus(MonitorStatus.STARTED);
assertEquals("location monitor 2.1 status", MonitorStatus.STARTED, m_locationMonitor2_1.getStatus());
m_locationMonitor2_2 = new OnmsLocationMonitor();
m_locationMonitor2_2.setId(3);
m_locationMonitor2_2.setDefinitionName("Durham");
m_locationMonitor2_2.setStatus(MonitorStatus.STARTED);
assertEquals("location monitor 2.2 status", MonitorStatus.STARTED, m_locationMonitor2_2.getStatus());
List<String> serviceNames = new ArrayList<String>();
serviceNames.add("ICMP");
serviceNames.add("DNS");
serviceNames.add("HTTP");
serviceNames.add("HTTPS");
Collections.shuffle(serviceNames); // shuffle to test sorting
m_node = new OnmsNode();
m_ip = "1.1.1.1";
m_node.setLabel("Node 1");
m_node.setId(1);
// Can't shuffle since it's a set
m_services = new HashSet<OnmsMonitoredService>();
m_services.add(new OnmsMonitoredService(new OnmsIpInterface(m_ip, m_node), new OnmsServiceType("ICMP")));
m_services.add(new OnmsMonitoredService(new OnmsIpInterface(m_ip, m_node), new OnmsServiceType("DNS")));
m_services.add(new OnmsMonitoredService(new OnmsIpInterface(m_ip, m_node), new OnmsServiceType("HTTP")));
m_services.add(new OnmsMonitoredService(new OnmsIpInterface(m_ip, m_node), new OnmsServiceType("HTTPS")));
// Can't shuffle since these since they are sets
m_applicationServices1 = new TreeSet<OnmsMonitoredService>();
m_applicationServices1.add(findMonitoredService(m_services, m_ip, "HTTP"));
m_applicationServices1.add(findMonitoredService(m_services, m_ip, "HTTPS"));
// m_application1.setMemberServices(applicationServices1);
m_applicationServices2 = new TreeSet<OnmsMonitoredService>();
m_applicationServices2.add(findMonitoredService(m_services, m_ip, "HTTPS"));
// m_application2.setMemberServices(applicationServices2);
/*
m_application2 = new OnmsApplication();
m_application2.setLabel("Application 2");
// XXX shuffle to verify sorting? create new list and do: Collections.shuffle(applicationServices2)
m_application2.setMemberServices(applicationServices1);
*/
}
public void testFindLocationSpecificStatusNullLocation() {
DistributedStatusDetailsCommand command = new DistributedStatusDetailsCommand();
Errors errors = new BindException(command, "command");
command.setApplication(m_application1.getName());
ThrowableAnticipator ta = new ThrowableAnticipator();
ta.anticipate(new IllegalArgumentException("location cannot be null"));
try {
m_service.findLocationSpecificStatus(command, errors);
} catch (Throwable t) {
ta.throwableReceived(t);
}
ta.verifyAnticipated();
}
public void testFindLocationSpecificStatusNullApplication() {
DistributedStatusDetailsCommand command = new DistributedStatusDetailsCommand();
Errors errors = new BindException(command, "command");
command.setLocation(m_locationDefinition1.getName());
ThrowableAnticipator ta = new ThrowableAnticipator();
ta.anticipate(new IllegalArgumentException("application cannot be null"));
try {
m_service.findLocationSpecificStatus(command, errors);
} catch (Throwable t) {
ta.throwableReceived(t);
}
ta.verifyAnticipated();
}
public void testFindLocationSpecificStatusInvalidLocation() {
DistributedStatusDetailsCommand command = new DistributedStatusDetailsCommand();
Errors errors = new BindException(command, "command");
command.setLocation("invalid location");
command.setApplication(m_application1.getName());
expect(m_locationMonitorDao.findMonitoringLocationDefinition(command.getLocation())).andReturn(null);
ThrowableAnticipator ta = new ThrowableAnticipator();
ta.anticipate(new IllegalArgumentException("Could not find location for location name \"" + command.getLocation() + "\""));
m_easyMockUtils.replayAll();
try {
m_service.findLocationSpecificStatus(command, errors);
} catch (Throwable t) {
ta.throwableReceived(t);
}
m_easyMockUtils.verifyAll();
ta.verifyAnticipated();
}
public void testFindLocationSpecificStatusInvalidApplication() {
DistributedStatusDetailsCommand command = new DistributedStatusDetailsCommand();
Errors errors = new BindException(command, "command");
command.setLocation(m_locationDefinition1.getName());
command.setApplication("invalid application");
expect(m_locationMonitorDao.findMonitoringLocationDefinition(m_locationDefinition1.getName())).andReturn(m_locationDefinition1);
expect(m_applicationDao.findByName(command.getApplication())).andReturn(null);
ThrowableAnticipator ta = new ThrowableAnticipator();
ta.anticipate(new IllegalArgumentException("Could not find application for application name \"" + command.getApplication() + "\""));
m_easyMockUtils.replayAll();
try {
m_service.findLocationSpecificStatus(command, errors);
} catch (Throwable t) {
ta.throwableReceived(t);
}
m_easyMockUtils.verifyAll();
ta.verifyAnticipated();
}
public void testFindLocationSpecificStatus() {
DistributedStatusDetailsCommand command = new DistributedStatusDetailsCommand();
Errors errors = new BindException(command, "command");
command.setLocation(m_locationDefinition1.getName());
command.setApplication(m_application1.getName());
expectEverything();
expect(m_monitoredServiceDao.findByApplication(m_application1)).andReturn(m_applicationServices1);
m_easyMockUtils.replayAll();
List<OnmsLocationSpecificStatus> status =
m_service.findLocationSpecificStatus(command, errors);
m_easyMockUtils.verifyAll();
assertEquals("status list size", 2, status.size());
}
public void testCreateStatus() {
// We run five times to catch sorting differences (if we don't sort)
for (int i = 0; i < 5; i++) {
runTestCreateStatus();
}
}
public void runTestCreateStatus() {
DistributedStatusDetailsCommand command = new DistributedStatusDetailsCommand();
Errors errors = new BindException(command, "command");
command.setLocation(m_locationDefinition1.getName());
command.setApplication(m_application1.getName());
expectEverything();
expect(m_monitoredServiceDao.findByApplication(m_application1)).andReturn(m_applicationServices1);
m_easyMockUtils.replayAll();
SimpleWebTable table = m_service.createStatusTable(command, errors);
m_easyMockUtils.verifyAll();
SimpleWebTable expectedTable = new SimpleWebTable();
expectedTable.setTitle("Distributed poller view for Application 1 from Raleigh location");
expectedTable.addColumn("Node", "");
expectedTable.addColumn("Monitor", "");
expectedTable.addColumn("Service", "");
expectedTable.addColumn("Status", "");
expectedTable.addColumn("Response", "");
expectedTable.addColumn("Last Status Change", "");
expectedTable.addColumn("Last Update", "");
expectedTable.newRow();
expectedTable.addCell("Node 1", "Normal", "element/node.jsp?node=1");
expectedTable.addCell("Raleigh-1", "", "distributed/locationMonitorDetails.htm?monitorId=1");
expectedTable.addCell("HTTP", "", "element/service.jsp?ifserviceid=null");
expectedTable.addCell("Up", "bright");
expectedTable.addCell("", "");
expectedTable.addCell(IGNORE_MATCH, "");
expectedTable.addCell(IGNORE_MATCH, "");
expectedTable.newRow();
expectedTable.addCell("Node 1", "Indeterminate", "element/node.jsp?node=1");
expectedTable.addCell("Raleigh-1", "", "distributed/locationMonitorDetails.htm?monitorId=1");
expectedTable.addCell("HTTPS", "", "element/service.jsp?ifserviceid=null");
expectedTable.addCell("Unknown", "bright");
expectedTable.addCell("No status recorded for this service from this location", "");
expectedTable.addCell(IGNORE_MATCH, "");
expectedTable.addCell(IGNORE_MATCH, "");
assertTableEquals(expectedTable, table);
}
public void testCreateStatusPutUnreportedServicesLast() {
DistributedStatusDetailsCommand command = new DistributedStatusDetailsCommand();
Errors errors = new BindException(command, "command");
command.setLocation(m_locationDefinition1.getName());
command.setApplication(m_application1.getName());
expect(m_applicationDao.findByName("Application 1")).andReturn(m_application1);
expect(m_locationMonitorDao.findMonitoringLocationDefinition(m_locationDefinition1.getName())).andReturn(m_locationDefinition1);
expect(m_locationMonitorDao.findByLocationDefinition(m_locationDefinition1)).andReturn(Collections.singleton(m_locationMonitor1_1));
OnmsMonitoredService httpService = findMonitoredService(m_services, m_ip, "HTTP");
OnmsMonitoredService httpsService = findMonitoredService(m_services, m_ip, "HTTPS");
expect(m_locationMonitorDao.getMostRecentStatusChange(m_locationMonitor1_1, httpService)).andReturn(null);
expect(m_locationMonitorDao.getMostRecentStatusChange(m_locationMonitor1_1, httpsService)).andReturn(new OnmsLocationSpecificStatus(m_locationMonitor1_1, httpsService, PollStatus.available()));
expect(m_monitoredServiceDao.findByApplication(m_application1)).andReturn(m_applicationServices1);
m_easyMockUtils.replayAll();
SimpleWebTable table = m_service.createStatusTable(command, errors);
m_easyMockUtils.verifyAll();
SimpleWebTable expectedTable = new SimpleWebTable();
expectedTable.setTitle("Distributed poller view for Application 1 from Raleigh location");
expectedTable.addColumn("Node", "");
expectedTable.addColumn("Monitor", "");
expectedTable.addColumn("Service", "");
expectedTable.addColumn("Status", "");
expectedTable.addColumn("Response", "");
expectedTable.addColumn("Last Status Change", "");
expectedTable.addColumn("Last Update", "");
expectedTable.newRow();
expectedTable.addCell("Node 1", "Normal", "element/node.jsp?node=1");
expectedTable.addCell("Raleigh-1", "", "distributed/locationMonitorDetails.htm?monitorId=1");
expectedTable.addCell("HTTPS", "", "element/service.jsp?ifserviceid=null");
expectedTable.addCell("Up", "bright");
expectedTable.addCell("", "");
expectedTable.addCell(IGNORE_MATCH, "");
expectedTable.addCell(IGNORE_MATCH, "");
expectedTable.newRow();
expectedTable.addCell("Node 1", "Indeterminate", "element/node.jsp?node=1");
expectedTable.addCell("Raleigh-1", "", "distributed/locationMonitorDetails.htm?monitorId=1");
expectedTable.addCell("HTTP", "", "element/service.jsp?ifserviceid=null");
expectedTable.addCell("Unknown", "bright");
expectedTable.addCell("No status recorded for this service from this location", "");
expectedTable.addCell(IGNORE_MATCH, "");
expectedTable.addCell(IGNORE_MATCH, "");
assertTableEquals(expectedTable, table);
}
public void testCreateStatusNoLocationMonitor() {
DistributedStatusDetailsCommand command = new DistributedStatusDetailsCommand();
Errors errors = new BindException(command, "command");
command.setLocation(m_locationDefinition3.getName());
command.setApplication(m_application2.getName());
expect(m_applicationDao.findByName("Application 2")).andReturn(m_application2);
expect(m_locationMonitorDao.findMonitoringLocationDefinition(m_locationDefinition3.getName())).andReturn(m_locationDefinition3);
expect(m_locationMonitorDao.findByLocationDefinition(m_locationDefinition3)).andReturn(new HashSet<OnmsLocationMonitor>());
m_easyMockUtils.replayAll();
SimpleWebTable table = m_service.createStatusTable(command, errors);
Errors errorsOut = table.getErrors();
assertEquals("Number of errors", 1, errorsOut.getErrorCount());
assertEquals("Number of global errors", 1, errorsOut.getGlobalErrorCount());
assertEquals("Number of field errors", 0, errorsOut.getFieldErrorCount());
ObjectError e = (ObjectError) errorsOut.getGlobalErrors().get(0);
assertEquals("Error code 0", "location.no-monitors", e.getCode());
assertEquals("Error 0 argument count", 2, e.getArguments().length);
assertEquals("Error argument 0.0", "Application 2", e.getArguments()[0]);
assertEquals("Error argument 0.0", "Columbus", e.getArguments()[1]);
m_easyMockUtils.verifyAll();
}
public void testCreateFacilityStatusTableNoStartDate() {
ThrowableAnticipator ta = new ThrowableAnticipator();
ta.anticipate(new IllegalArgumentException("argument start cannot be null"));
m_easyMockUtils.replayAll();
try {
m_service.createFacilityStatusTable(null, new Date());
} catch (Throwable t) {
ta.throwableReceived(t);
}
ta.verifyAnticipated();
m_easyMockUtils.verifyAll();
}
public void testCreateFacilityStatusTableNoEndDate() {
ThrowableAnticipator ta = new ThrowableAnticipator();
ta.anticipate(new IllegalArgumentException("argument end cannot be null"));
m_easyMockUtils.replayAll();
try {
m_service.createFacilityStatusTable(new Date(), null);
} catch (Throwable t) {
ta.throwableReceived(t);
}
ta.verifyAnticipated();
m_easyMockUtils.verifyAll();
}
public void testCreateFacilityStatusTableStateDateNotBefore() {
Date start = new Date();
Date end = new Date(start.getTime() - 1000); // one second before start time
ThrowableAnticipator ta = new ThrowableAnticipator();
ta.anticipate(new IllegalArgumentException("start date (" + start + ") must be older than end date (" + end + ")"));
m_easyMockUtils.replayAll();
try {
m_service.createFacilityStatusTable(start, end);
} catch (Throwable t) {
ta.throwableReceived(t);
}
ta.verifyAnticipated();
m_easyMockUtils.verifyAll();
}
public void testCreateFacilityStatusTableDatesEqual() {
Date startAndEnd = new Date();
ThrowableAnticipator ta = new ThrowableAnticipator();
ta.anticipate(new IllegalArgumentException("start date (" + startAndEnd + ") must be older than end date (" + startAndEnd + ")"));
m_easyMockUtils.replayAll();
try {
m_service.createFacilityStatusTable(startAndEnd, startAndEnd);
} catch (Throwable t) {
ta.throwableReceived(t);
}
ta.verifyAnticipated();
m_easyMockUtils.verifyAll();
}
public void testCreateFacilityStatusTableNoApplications() {
expect(m_locationMonitorDao.findAllMonitoringLocationDefinitions()).andReturn(Collections.singletonList(m_locationDefinition1));
expect(m_applicationDao.findAll()).andReturn(new ArrayList<OnmsApplication>());
ThrowableAnticipator ta = new ThrowableAnticipator();
ta.anticipate(new IllegalArgumentException("there are no applications"));
Date start = new Date();
Date end = new Date(start.getTime() + 1000); // one second after start time
m_easyMockUtils.replayAll();
try {
m_service.createFacilityStatusTable(start, end);
} catch (Throwable t) {
ta.throwableReceived(t);
}
ta.verifyAnticipated();
m_easyMockUtils.verifyAll();
}
public void testCreateFacilityStatusTable() throws Exception {
// No need to shuffle, since this is a list
List<OnmsMonitoringLocationDefinition> locationDefinitions = new LinkedList<OnmsMonitoringLocationDefinition>();
locationDefinitions.add(m_locationDefinition1);
locationDefinitions.add(m_locationDefinition2);
locationDefinitions.add(m_locationDefinition3);
List<OnmsApplication> applications = new LinkedList<OnmsApplication>();
applications.add(m_application1);
applications.add(m_application2);
Collections.shuffle(applications);
OnmsMonitoredService httpService = findMonitoredService(m_services, m_ip, "HTTP");
OnmsMonitoredService httpsService = findMonitoredService(m_services, m_ip, "HTTPS");
OnmsMonitoredService icmpService = findMonitoredService(m_services, m_ip, "ICMP");
Collection<OnmsLocationSpecificStatus> mostRecentStatuses = new LinkedList<OnmsLocationSpecificStatus>();
mostRecentStatuses.add(createStatus(m_locationMonitor1_1, httpService, PollStatus.available(), "20061011-00:00:00"));
mostRecentStatuses.add(createStatus(m_locationMonitor1_1, httpsService, PollStatus.available(), "20061012-06:00:00"));
mostRecentStatuses.add(createStatus(m_locationMonitor2_1, httpService, PollStatus.available(), "20061011-00:00:00"));
mostRecentStatuses.add(createStatus(m_locationMonitor2_1, httpsService, PollStatus.available(), "20061012-06:00:00"));
mostRecentStatuses.add(createStatus(m_locationMonitor2_2, httpService, PollStatus.available(), "20061011-00:00:00"));
mostRecentStatuses.add(createStatus(m_locationMonitor2_2, httpsService, PollStatus.available(), "20061012-06:00:00"));
Collection<OnmsLocationSpecificStatus> statusChanges = new LinkedList<OnmsLocationSpecificStatus>();
statusChanges.add(createStatus(m_locationMonitor1_1, httpService, PollStatus.available(), "20061011-00:00:00"));
statusChanges.add(createStatus(m_locationMonitor1_1, httpsService, PollStatus.unavailable(), "20061012-00:00:00"));
statusChanges.add(createStatus(m_locationMonitor1_1, httpsService, PollStatus.available(), "20061012-06:00:00"));
statusChanges.add(createStatus(m_locationMonitor1_1, icmpService, PollStatus.down(), "20061010-06:00:00"));
Date startDate = s_dbDate.parse("2006-10-12 00:00:00.0");
Date endDate = s_dbDate.parse("2006-10-13 00:00:00.0");
expect(m_locationMonitorDao.findAllMonitoringLocationDefinitions()).andReturn(locationDefinitions);
expect(m_applicationDao.findAll()).andReturn(applications);
expect(m_locationMonitorDao.getAllMostRecentStatusChanges()).andReturn(mostRecentStatuses);
expect(m_locationMonitorDao.findByLocationDefinition(locationDefinitions.get(0))).andReturn(Collections.singleton(m_locationMonitor1_1));
Collection<OnmsLocationMonitor> monitors2 = new HashSet<OnmsLocationMonitor>();
monitors2.add(m_locationMonitor2_1);
monitors2.add(m_locationMonitor2_2);
expect(m_locationMonitorDao.findByLocationDefinition(locationDefinitions.get(1))).andReturn(monitors2);
expect(m_locationMonitorDao.findByLocationDefinition(locationDefinitions.get(2))).andReturn(new HashSet<OnmsLocationMonitor>());
expect(m_locationMonitorDao.getStatusChangesBetween(startDate, endDate)).andReturn(statusChanges);
expect(m_locationMonitorDao.getAllStatusChangesAt(startDate)).andReturn(new HashSet<OnmsLocationSpecificStatus>());
expect(m_monitoredServiceDao.findByApplication(m_application1)).andReturn(m_applicationServices1).times(3);
expect(m_monitoredServiceDao.findByApplication(m_application2)).andReturn(m_applicationServices2).times(3);
m_easyMockUtils.replayAll();
SimpleWebTable table = m_service.createFacilityStatusTable(startDate, endDate);
m_easyMockUtils.verifyAll();
SimpleWebTable expectedTable = new SimpleWebTable();
expectedTable.setTitle("Distributed Poller Status Summary");
expectedTable.addColumn("Area", "");
expectedTable.addColumn("Location", "");
expectedTable.addColumn("Application 1", "");
expectedTable.addColumn("Application 2", "");
expectedTable.newRow();
expectedTable.addCell("OpenNMS NC", "");
expectedTable.addCell("Raleigh", "");
expectedTable.addCell("75.000%", "Normal", "distributedStatusHistory.htm?location=Raleigh&application=Application+1");
expectedTable.addCell("75.000%", "Normal", "distributedStatusHistory.htm?location=Raleigh&application=Application+2");
expectedTable.newRow();
expectedTable.addCell("OpenNMS NC", "");
expectedTable.addCell("Durham", "");
expectedTable.addCell("No data", "Normal");
expectedTable.addCell("No data", "Normal");
expectedTable.newRow();
expectedTable.addCell("OpenNMS OH", "");
expectedTable.addCell("Columbus", "");
expectedTable.addCell("No data", "Indeterminate");
expectedTable.addCell("No data", "Indeterminate");
assertTableEquals(expectedTable, table);
}
/*
* XXX need to check sorting
*/
public void testCreateFacilityStatusTableOneApplicationOneOfTwoLocationsReporting() throws Exception {
OnmsApplication app = m_application2;
// No need to shuffle, since this is a list
List<OnmsMonitoringLocationDefinition> locationDefinitions = new LinkedList<OnmsMonitoringLocationDefinition>();
locationDefinitions.add(m_locationDefinition1);
locationDefinitions.add(m_locationDefinition2);
OnmsMonitoredService httpsService = findMonitoredService(m_services, m_ip, "HTTPS");
Collection<OnmsLocationSpecificStatus> mostRecentStatuses = new LinkedList<OnmsLocationSpecificStatus>();
mostRecentStatuses.add(createStatus(m_locationMonitor1_1, httpsService, PollStatus.available(), "20061011-00:00:00"));
Collection<OnmsLocationSpecificStatus> statusChanges = new LinkedList<OnmsLocationSpecificStatus>();
statusChanges.add(createStatus(m_locationMonitor1_1, httpsService, PollStatus.available(), "20061011-00:00:00"));
Date startDate = s_dbDate.parse("2006-10-12 00:00:00.0");
Date endDate = s_dbDate.parse("2006-10-13 00:00:00.0");
expect(m_locationMonitorDao.findAllMonitoringLocationDefinitions()).andReturn(locationDefinitions);
expect(m_applicationDao.findAll()).andReturn(Collections.singletonList(app));
expect(m_locationMonitorDao.getAllMostRecentStatusChanges()).andReturn(mostRecentStatuses);
expect(m_locationMonitorDao.findByLocationDefinition(locationDefinitions.get(0))).andReturn(Collections.singleton(m_locationMonitor1_1));
expect(m_locationMonitorDao.findByLocationDefinition(locationDefinitions.get(1))).andReturn(Collections.singleton(m_locationMonitor2_1));
expect(m_locationMonitorDao.getStatusChangesBetween(startDate, endDate)).andReturn(statusChanges);
expect(m_locationMonitorDao.getAllStatusChangesAt(startDate)).andReturn(new HashSet<OnmsLocationSpecificStatus>());
expect(m_monitoredServiceDao.findByApplication(app)).andReturn(m_applicationServices2).times(2);
m_easyMockUtils.replayAll();
SimpleWebTable table = m_service.createFacilityStatusTable(startDate, endDate);
m_easyMockUtils.verifyAll();
SimpleWebTable expectedTable = new SimpleWebTable();
expectedTable.setTitle("Distributed Poller Status Summary");
expectedTable.addColumn("Area", "");
expectedTable.addColumn("Location", "");
expectedTable.addColumn(app.getName(), "");
expectedTable.newRow();
expectedTable.addCell("OpenNMS NC", "");
expectedTable.addCell("Raleigh", "");
expectedTable.addCell("100.000%", "Normal", "distributedStatusHistory.htm?location=Raleigh&application=Application+2");
expectedTable.newRow();
expectedTable.addCell("OpenNMS NC", "");
expectedTable.addCell("Durham", "");
expectedTable.addCell("No data", "Indeterminate");
assertTableEquals(expectedTable, table);
}
/*
* XXX need to check sorting
*/
public void testCreateFacilityStatusTableLayoutApplicationsVertically() throws Exception {
// No need to shuffle, since this is a list
List<OnmsMonitoringLocationDefinition> locationDefinitions = new LinkedList<OnmsMonitoringLocationDefinition>();
locationDefinitions.add(m_locationDefinition1);
locationDefinitions.add(m_locationDefinition2);
locationDefinitions.add(m_locationDefinition3);
List<OnmsApplication> applications = new LinkedList<OnmsApplication>();
applications.add(m_application1);
applications.add(m_application2);
Collections.shuffle(applications);
OnmsMonitoredService httpService = findMonitoredService(m_services, m_ip, "HTTP");
OnmsMonitoredService httpsService = findMonitoredService(m_services, m_ip, "HTTPS");
OnmsMonitoredService icmpService = findMonitoredService(m_services, m_ip, "ICMP");
Collection<OnmsLocationSpecificStatus> mostRecentStatuses = new LinkedList<OnmsLocationSpecificStatus>();
mostRecentStatuses.add(createStatus(m_locationMonitor1_1, httpService, PollStatus.available(), "20061011-00:00:00"));
mostRecentStatuses.add(createStatus(m_locationMonitor1_1, httpsService, PollStatus.available(), "20061012-06:00:00"));
mostRecentStatuses.add(createStatus(m_locationMonitor2_1, httpService, PollStatus.available(), "20061011-00:00:00"));
mostRecentStatuses.add(createStatus(m_locationMonitor2_1, httpsService, PollStatus.available(), "20061012-06:00:00"));
mostRecentStatuses.add(createStatus(m_locationMonitor2_2, httpService, PollStatus.available(), "20061011-00:00:00"));
mostRecentStatuses.add(createStatus(m_locationMonitor2_2, httpsService, PollStatus.available(), "20061012-06:00:00"));
Collection<OnmsLocationSpecificStatus> statusChanges = new LinkedList<OnmsLocationSpecificStatus>();
statusChanges.add(createStatus(m_locationMonitor1_1, httpService, PollStatus.available(), "20061011-00:00:00"));
statusChanges.add(createStatus(m_locationMonitor1_1, httpsService, PollStatus.unavailable(), "20061012-00:00:00"));
statusChanges.add(createStatus(m_locationMonitor1_1, httpsService, PollStatus.available(), "20061012-06:00:00"));
statusChanges.add(createStatus(m_locationMonitor1_1, icmpService, PollStatus.down(), "20061010-06:00:00"));
Date startDate = s_dbDate.parse("2006-10-12 00:00:00.0");
Date endDate = s_dbDate.parse("2006-10-13 00:00:00.0");
expect(m_locationMonitorDao.findAllMonitoringLocationDefinitions()).andReturn(locationDefinitions);
expect(m_applicationDao.findAll()).andReturn(applications);
expect(m_locationMonitorDao.getAllMostRecentStatusChanges()).andReturn(mostRecentStatuses);
expect(m_locationMonitorDao.findByLocationDefinition(locationDefinitions.get(0))).andReturn(Collections.singleton(m_locationMonitor1_1));
Collection<OnmsLocationMonitor> monitors2 = new HashSet<OnmsLocationMonitor>();
monitors2.add(m_locationMonitor2_1);
monitors2.add(m_locationMonitor2_2);
expect(m_locationMonitorDao.findByLocationDefinition(locationDefinitions.get(1))).andReturn(monitors2);
expect(m_locationMonitorDao.findByLocationDefinition(locationDefinitions.get(2))).andReturn(new HashSet<OnmsLocationMonitor>());
expect(m_locationMonitorDao.getStatusChangesBetween(startDate, endDate)).andReturn(statusChanges);
expect(m_locationMonitorDao.getAllStatusChangesAt(startDate)).andReturn(new HashSet<OnmsLocationSpecificStatus>());
expect(m_monitoredServiceDao.findByApplication(m_application1)).andReturn(m_applicationServices1).times(3);
expect(m_monitoredServiceDao.findByApplication(m_application2)).andReturn(m_applicationServices2).times(3);
m_service.setLayoutApplicationsVertically(true);
m_easyMockUtils.replayAll();
SimpleWebTable table = m_service.createFacilityStatusTable(startDate, endDate);
m_easyMockUtils.verifyAll();
SimpleWebTable expectedTable = new SimpleWebTable();
expectedTable.setTitle("Distributed Poller Status Summary");
expectedTable.addColumn("Application", "");
expectedTable.addColumn("Raleigh", "");
expectedTable.addColumn("Durham", "");
expectedTable.addColumn("Columbus", "");
expectedTable.newRow();
expectedTable.addCell("Application 1", "");
expectedTable.addCell("75.000%", "Normal", "distributedStatusHistory.htm?location=Raleigh&application=Application+1");
expectedTable.addCell("No data", "Normal");
expectedTable.addCell("No data", "Indeterminate");
expectedTable.newRow();
expectedTable.addCell("Application 2", "");
expectedTable.addCell("75.000%", "Normal", "distributedStatusHistory.htm?location=Raleigh&application=Application+2");
expectedTable.addCell("No data", "Normal");
expectedTable.addCell("No data", "Indeterminate");
assertTableEquals(expectedTable, table);
}
public void testPercentageCalculationAllAvailableStartInMiddleOfDay() throws ParseException {
OnmsMonitoredService httpService = findMonitoredService(m_services, m_ip, "HTTP");
OnmsMonitoredService httpsService = findMonitoredService(m_services, m_ip, "HTTPS");
Collection<OnmsLocationSpecificStatus> statuses = new HashSet<OnmsLocationSpecificStatus>();
statuses.add(createStatus(m_locationMonitor1_1, httpService, PollStatus.available(), "20061011-00:00:00"));
statuses.add(createStatus(m_locationMonitor1_1, httpService, PollStatus.available(), "20061012-00:00:00"));
statuses.add(createStatus(m_locationMonitor1_1, httpsService, PollStatus.available(), "20061012-06:00:00"));
statuses.add(createStatus(m_locationMonitor1_1, httpService, PollStatus.available(), "20061013-00:00:00"));
Date startDate = s_dbDate.parse("2006-10-12 00:00:00.0");
Date endDate = s_dbDate.parse("2006-10-13 00:00:00.0");
m_easyMockUtils.replayAll();
String percentage = m_service.calculatePercentageUptime(m_applicationServices1, statuses, startDate, endDate);
m_easyMockUtils.verifyAll();
assertEquals("percentage", "100.000%", percentage);
}
public void testPercentageCalculationOneUnavailableThenAvailaleInMiddleOfDay() throws ParseException {
OnmsMonitoredService httpService = findMonitoredService(m_services, m_ip, "HTTP");
OnmsMonitoredService httpsService = findMonitoredService(m_services, m_ip, "HTTPS");
Collection<OnmsLocationSpecificStatus> statuses = new HashSet<OnmsLocationSpecificStatus>();
statuses.add(createStatus(m_locationMonitor1_1, httpService, PollStatus.available(), "20061011-00:00:00"));
statuses.add(createStatus(m_locationMonitor1_1, httpService, PollStatus.available(), "20061012-00:00:00"));
statuses.add(createStatus(m_locationMonitor1_1, httpsService, PollStatus.unavailable(), "20061012-00:00:00"));
statuses.add(createStatus(m_locationMonitor1_1, httpsService, PollStatus.available(), "20061012-06:00:00"));
statuses.add(createStatus(m_locationMonitor1_1, httpService, PollStatus.available(), "20061013-00:00:00"));
Date startDate = s_dbDate.parse("2006-10-12 00:00:00.0");
Date endDate = s_dbDate.parse("2006-10-13 00:00:00.0");
m_easyMockUtils.replayAll();
String percentage = m_service.calculatePercentageUptime(m_applicationServices1, statuses, startDate, endDate);
m_easyMockUtils.verifyAll();
assertEquals("percentage", "75.000%", percentage);
}
public void testDetails() {
List<OnmsMonitoringLocationDefinition> locationDefinitions = new LinkedList<OnmsMonitoringLocationDefinition>();
locationDefinitions.add(m_locationDefinition1);
locationDefinitions.add(m_locationDefinition2);
locationDefinitions.add(m_locationDefinition3);
expect(m_locationMonitorDao.findAllMonitoringLocationDefinitions()).andReturn(locationDefinitions);
List<OnmsApplication> applications = new ArrayList<OnmsApplication>();
applications.add(m_application1);
applications.add(m_application2);
expect(m_applicationDao.findAll()).andReturn(applications);
expect(m_locationMonitorDao.findMonitoringLocationDefinition("Durham")).andReturn(m_locationDefinition2);
expect(m_applicationDao.findByName("Application 2")).andReturn(m_application2);
List<OnmsLocationMonitor> monitors = new ArrayList<OnmsLocationMonitor>();
monitors.add(m_locationMonitor2_1);
monitors.add(m_locationMonitor2_2);
expect(m_locationMonitorDao.findByLocationDefinition(m_locationDefinition2)).andReturn(monitors);
for (OnmsMonitoredService service : m_applicationServices2) {
m_locationMonitorDao.initialize(service.getIpInterface());
m_locationMonitorDao.initialize(service.getIpInterface().getNode());
}
String locationName = m_locationDefinition2.getName();
String applicationName = m_application2.getName();
String monitorId = "";
String timeSpan = "Last Day";
String previousLocation = "";
expect(m_monitoredServiceDao.findByApplication(m_application2)).andReturn(m_applicationServices2).times(2);
expectResourceDaoCall(m_locationMonitor2_1, m_applicationServices2);
m_easyMockUtils.replayAll();
DistributedStatusHistoryModel summary = m_service.createHistoryModel(locationName, monitorId, applicationName, timeSpan, previousLocation);
m_easyMockUtils.verifyAll();
assertNotNull("summary should not be null", summary);
assertNotNull("summary locations list should not be null", summary.getLocations());
assertNotNull("summary applications list should not be null", summary.getApplications());
assertNotNull("summary chosen location should not be null", summary.getChosenLocation());
assertNotNull("summary chosen application should not be null", summary.getChosenApplication());
assertNotNull("summary error list should not be null", summary.getErrors());
assertEquals("summary locations list size", locationDefinitions.size(), summary.getLocations().size());
assertEquals("summary applications list size", applications.size(), summary.getApplications().size());
assertEquals("summary error list size: " + summary.getErrors(), 0, summary.getErrors().size());
// Verify sorting of applications
assertEquals("summary applications 1", m_application1, summary.getApplications().get(0));
assertEquals("summary applications 2", m_application2, summary.getApplications().get(1));
// Verify chosen ones
assertEquals("summary chosen location", m_locationDefinition2, summary.getChosenLocation());
assertEquals("summary chosen application", m_application2, summary.getChosenApplication());
// And verify that they are in the lists in the right place
assertEquals("summary chosen location matches list", summary.getLocations().get(1), summary.getChosenLocation());
assertEquals("summary chosen application matches list", summary.getApplications().get(1), summary.getChosenApplication());
assertEquals("graph URL map size", 1, summary.getServiceGraphs().size());
assertNotNull("graph 0 URL should not be null", summary.getServiceGraphs().iterator().next().getUrl());
}
private void expectResourceDaoCall(OnmsLocationMonitor monitor, Collection<OnmsMonitoredService> services) {
PrefabGraph httpGraph = new PrefabGraph("http", "title", new String[] { "http" }, "command", new String[0], new String[0], 0, new String[] { "distributedStatus" }, null, null, null, new String[0]);
PrefabGraph httpsGraph = new PrefabGraph("https", "title", new String[] { "https" }, "command", new String[0], new String[0], 0, new String[] { "distributedStatus" }, null, null, null, new String[0]);
for (OnmsMonitoredService service : services) {
OnmsResource resource = new OnmsResource("foo", "even more foo", new MockResourceType(), new HashSet<OnmsAttribute>(0));
expect(m_resourceDao.getResourceForIpInterface(service.getIpInterface(), monitor)).andReturn(resource);
expect(m_graphDao.getPrefabGraphsForResource(resource)).andReturn(new PrefabGraph[] { httpGraph, httpsGraph });
}
expect(m_graphDao.getPrefabGraph(httpGraph.getName())).andReturn(httpGraph).anyTimes();
expect(m_graphDao.getPrefabGraph(httpsGraph.getName())).andReturn(httpsGraph).atLeastOnce();
}
public void testWrongLocationDetails() {
List<OnmsMonitoringLocationDefinition> locationDefinitions = new LinkedList<OnmsMonitoringLocationDefinition>();
locationDefinitions.add(m_locationDefinition1);
locationDefinitions.add(m_locationDefinition2);
locationDefinitions.add(m_locationDefinition3);
expect(m_locationMonitorDao.findAllMonitoringLocationDefinitions()).andReturn(locationDefinitions);
List<OnmsApplication> applications = new ArrayList<OnmsApplication>();
applications.add(m_application1);
applications.add(m_application2);
expect(m_applicationDao.findAll()).andReturn(applications);
expect(m_locationMonitorDao.findMonitoringLocationDefinition("Raleigh-bad")).andReturn(null);
expect(m_applicationDao.findByName("Application 2")).andReturn(m_application2);
List<OnmsLocationMonitor> monitors = new ArrayList<OnmsLocationMonitor>();
monitors.add(m_locationMonitor1_1);
expect(m_locationMonitorDao.findByLocationDefinition(m_locationDefinition1)).andReturn(monitors);
for (OnmsMonitoredService service : m_applicationServices2) {
m_locationMonitorDao.initialize(service.getIpInterface());
m_locationMonitorDao.initialize(service.getIpInterface().getNode());
}
String locationName = "Raleigh-bad";
String applicationName = m_application2.getName();
String monitorId = "";
String previousLocation = "";
String timeSpan = "";
expect(m_monitoredServiceDao.findByApplication(m_application2)).andReturn(m_applicationServices2).times(2);
expectResourceDaoCall(m_locationMonitor1_1, m_applicationServices2);
m_easyMockUtils.replayAll();
DistributedStatusHistoryModel summary = m_service.createHistoryModel(locationName, monitorId, applicationName, timeSpan, previousLocation);
m_easyMockUtils.verifyAll();
assertNotNull("summary should not be null", summary);
assertNotNull("summary locations list should not be null", summary.getLocations());
assertNotNull("summary applications list should not be null", summary.getApplications());
assertNotNull("summary chosen location should not be null", summary.getChosenLocation());
assertNotNull("summary chosen application should not be null", summary.getChosenApplication());
assertNotNull("summary error list should not be null", summary.getErrors());
assertEquals("summary locations list size", locationDefinitions.size(), summary.getLocations().size());
assertEquals("summary applications list size", applications.size(), summary.getApplications().size());
assertEquals("summary error list size", 1, summary.getErrors().size());
// Verify sorting of applications
assertEquals("summary applications 1", m_application1, summary.getApplications().get(0));
assertEquals("summary applications 2", m_application2, summary.getApplications().get(1));
// Verify errors
assertEquals("summary error 1", "Could not find location definition 'Raleigh-bad'", summary.getErrors().get(0));
// Verify chosen ones
assertEquals("summary chosen location", m_locationDefinition1, summary.getChosenLocation());
assertEquals("summary chosen application", m_application2, summary.getChosenApplication());
// And verify that they are in the lists in the right place
assertEquals("summary chosen location matches list", summary.getLocations().get(0), summary.getChosenLocation());
assertEquals("summary chosen application matches list", summary.getApplications().get(1), summary.getChosenApplication());
}
public void testWrongApplicationDetails() {
List<OnmsMonitoringLocationDefinition> locationDefinitions = new LinkedList<OnmsMonitoringLocationDefinition>();
locationDefinitions.add(m_locationDefinition1);
locationDefinitions.add(m_locationDefinition2);
locationDefinitions.add(m_locationDefinition3);
expect(m_locationMonitorDao.findAllMonitoringLocationDefinitions()).andReturn(locationDefinitions);
List<OnmsApplication> applications = new ArrayList<OnmsApplication>();
applications.add(m_application1);
applications.add(m_application2);
expect(m_applicationDao.findAll()).andReturn(applications);
expect(m_locationMonitorDao.findMonitoringLocationDefinition(m_locationDefinition2.getName())).andReturn(m_locationDefinition2);
expect(m_applicationDao.findByName("Big Bad Voodoo Daddy Application")).andReturn(null);
List<OnmsLocationMonitor> monitors = new ArrayList<OnmsLocationMonitor>();
monitors.add(m_locationMonitor2_1);
monitors.add(m_locationMonitor2_2);
expect(m_locationMonitorDao.findByLocationDefinition(m_locationDefinition2)).andReturn(monitors);
for (OnmsMonitoredService service : m_applicationServices1) {
m_locationMonitorDao.initialize(service.getIpInterface());
m_locationMonitorDao.initialize(service.getIpInterface().getNode());
}
String locationName = m_locationDefinition2.getName();
String applicationName = "Big Bad Voodoo Daddy Application";
String monitorId = "";
String previousLocation = "";
String timeSpan = "";
expect(m_monitoredServiceDao.findByApplication(m_application1)).andReturn(m_applicationServices1).times(2);
expectResourceDaoCall(m_locationMonitor2_1, m_applicationServices1);
m_easyMockUtils.replayAll();
DistributedStatusHistoryModel summary = m_service.createHistoryModel(locationName, monitorId, applicationName, timeSpan, previousLocation);
m_easyMockUtils.verifyAll();
assertNotNull("summary should not be null", summary);
assertNotNull("summary locations list should not be null", summary.getLocations());
assertNotNull("summary applications list should not be null", summary.getApplications());
assertNotNull("summary chosen location should not be null", summary.getChosenLocation());
assertNotNull("summary chosen application should not be null", summary.getChosenApplication());
assertNotNull("summary error list should not be null", summary.getErrors());
assertEquals("summary locations list size", locationDefinitions.size(), summary.getLocations().size());
assertEquals("summary applications list size", applications.size(), summary.getApplications().size());
assertEquals("summary error list size", 1, summary.getErrors().size());
// Verify sorting of applications
assertEquals("summary applications 1", m_application1, summary.getApplications().get(0));
assertEquals("summary applications 2", m_application2, summary.getApplications().get(1));
// Verify errors
assertEquals("summary error 1", "Could not find application 'Big Bad Voodoo Daddy Application'", summary.getErrors().get(0));
// Verify chosen ones
assertEquals("summary chosen location", m_locationDefinition2, summary.getChosenLocation());
assertEquals("summary chosen application", m_application1, summary.getChosenApplication());
// And verify that they are in the lists in the right place
assertEquals("summary chosen location matches list", summary.getLocations().get(1), summary.getChosenLocation());
assertEquals("summary chosen application matches list", summary.getApplications().get(0), summary.getChosenApplication());
}
private OnmsLocationSpecificStatus createStatus(OnmsLocationMonitor locationMonitor,
OnmsMonitoredService service, PollStatus status, String timestamp) {
SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd-HH:mm:ss");
try {
status.setTimestamp(f.parse(timestamp));
} catch (ParseException e) {
AssertionFailedError error = new AssertionFailedError("Could not parse timestamp \"" + timestamp + "\"");
error.initCause(e);
throw error;
}
return new OnmsLocationSpecificStatus(locationMonitor, service, status);
}
public void assertTableEquals(SimpleWebTable expectedTable, SimpleWebTable table) {
assertEquals("table title", expectedTable.getTitle(), table.getTitle());
assertEquals("number of table columns headers", expectedTable.getColumnHeaders().size(), table.getColumnHeaders().size());
ListIterator<Cell> columnHeaderIterator = expectedTable.getColumnHeaders().listIterator();
for (Cell tableColumnHeader : table.getColumnHeaders()) {
assertEquals("column header " + (columnHeaderIterator.nextIndex() + 1), columnHeaderIterator.next(), tableColumnHeader);
}
assertEquals("number of rows", expectedTable.getRows().size(), table.getRows().size());
ListIterator<List<Cell>> expectedRowIterator = expectedTable.getRows().listIterator();
for (List<Cell> row : table.getRows()) {
List<Cell> expectedRow = expectedRowIterator.next();
assertEquals("row " + (expectedRowIterator.previousIndex() + 1) + " column count", expectedRow.size(), row.size());
ListIterator<Cell> expectedColumnIterator = expectedRow.listIterator();
for (Cell column : row) {
Cell expectedColumn = expectedColumnIterator.next();
String rowColumn = "row "
+ (expectedRowIterator.previousIndex() + 1) + " column "
+ (expectedColumnIterator.previousIndex() + 1) + " ";
if (!IGNORE_MATCH.equals(expectedColumn.getContent())) {
assertEquals(rowColumn + "content",
expectedColumn.getContent(),
column.getContent());
}
if (!IGNORE_MATCH.equals(expectedColumn.getStyleClass())) {
assertEquals(rowColumn + "styleClass",
expectedColumn.getStyleClass(),
column.getStyleClass());
}
if (!IGNORE_MATCH.equals(expectedColumn.getLink())) {
assertEquals(rowColumn + "link",
expectedColumn.getLink(),
column.getLink());
}
}
}
}
public void expectEverything() {
expect(m_applicationDao.findByName("Application 1")).andReturn(m_application1);
expect(m_locationMonitorDao.findMonitoringLocationDefinition(m_locationDefinition1.getName())).andReturn(m_locationDefinition1);
expect(m_locationMonitorDao.findByLocationDefinition(m_locationDefinition1)).andReturn(Collections.singleton(m_locationMonitor1_1));
OnmsMonitoredService httpService = findMonitoredService(m_services, m_ip, "HTTP");
OnmsMonitoredService httpsService = findMonitoredService(m_services, m_ip, "HTTPS");
expect(m_locationMonitorDao.getMostRecentStatusChange(m_locationMonitor1_1, httpService)).andReturn(new OnmsLocationSpecificStatus(m_locationMonitor1_1, httpService, PollStatus.available()));
expect(m_locationMonitorDao.getMostRecentStatusChange(m_locationMonitor1_1, httpsService)).andReturn(null);
}
public OnmsMonitoredService findMonitoredService(Collection<OnmsMonitoredService> services, String interfaceIp, String serviceName) {
return findMonitoredService(services, addr(interfaceIp), serviceName);
}
private OnmsMonitoredService findMonitoredService(Collection<OnmsMonitoredService> services, InetAddress ipaddr, String serviceName) {
for (OnmsMonitoredService service : services) {
if (ipaddr.equals(service.getIpAddress()) && serviceName.equals(service.getServiceName())) {
return service;
}
}
fail("Could not find service \"" + serviceName + "\" on interface \"" + ipaddr + "\"");
// This will never be reached due to the above fail()
return null;
}
}