/******************************************************************************* * This file is part of OpenNMS(R). * * Copyright (C) 2009-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.event.filter; import static org.junit.Assert.assertEquals; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.opennms.core.utils.BeanUtils; import org.opennms.core.utils.InetAddressUtils; import org.opennms.netmgt.dao.DatabasePopulator; import org.opennms.netmgt.dao.db.JUnitConfigurationEnvironment; import org.opennms.netmgt.dao.db.JUnitTemporaryDatabase; import org.opennms.core.test.OpenNMSJUnit4ClassRunner; import org.opennms.netmgt.model.OnmsDistPoller; import org.opennms.netmgt.model.OnmsEvent; import org.opennms.netmgt.model.OnmsSeverity; import org.opennms.web.alarm.filter.AlarmIdFilter; import org.opennms.web.event.Event; import org.opennms.web.event.WebEventRepository; import org.opennms.web.filter.Filter; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.ApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.transaction.annotation.Transactional; @RunWith(OpenNMSJUnit4ClassRunner.class) @ContextConfiguration(locations= { "classpath:/META-INF/opennms/applicationContext-dao.xml", "classpath*:/META-INF/opennms/component-dao.xml", "classpath*:/META-INF/opennms/component-service.xml", "classpath:/daoWebRepositoryTestContext.xml", "classpath:/jdbcWebRepositoryTestContext.xml" }) @JUnitConfigurationEnvironment @JUnitTemporaryDatabase public class WebEventRepositoryFilterTest implements InitializingBean { @Autowired DatabasePopulator m_dbPopulator; @Autowired @Qualifier("dao") WebEventRepository m_daoEventRepo; @Autowired @Qualifier("jdbc") WebEventRepository m_jdbcEventRepo; @Autowired ApplicationContext m_appContext; @Override public void afterPropertiesSet() throws Exception { BeanUtils.assertAutowiring(this); } @Before public void setUp(){ m_dbPopulator.populateDatabase(); OnmsEvent event = new OnmsEvent(); event.setDistPoller(getDistPoller("localhost", "127.0.0.1")); event.setAlarm(m_dbPopulator.getAlarmDao().get(1)); event.setNode(m_dbPopulator.getNode1()); event.setEventUei("uei.opennms.org/test2"); event.setEventTime(new Date()); event.setEventSource("test"); event.setEventCreateTime(new Date()); event.setEventSeverity(OnmsSeverity.CLEARED.getId()); event.setEventLog("Y"); event.setEventDisplay("Y"); event.setIfIndex(11); event.setIpAddr(InetAddressUtils.getInetAddress("192.168.1.1")); event.setEventLogMsg("This is a test log message"); event.setEventDescr("This is a test event"); event.setServiceType(m_dbPopulator.getServiceTypeDao().get(1)); m_dbPopulator.getEventDao().save(event); m_dbPopulator.getEventDao().flush(); } private OnmsDistPoller getDistPoller(String localhost, String localhostIp) { OnmsDistPoller distPoller = m_dbPopulator.getDistPollerDao().get(localhost); if (distPoller == null) { distPoller = new OnmsDistPoller(localhost, localhostIp); m_dbPopulator.getDistPollerDao().save(distPoller); m_dbPopulator.getDistPollerDao().flush(); } return distPoller; } @Test @JUnitTemporaryDatabase // Relies on specific IDs so we need a fresh database public void testEventIdFilter(){ EventIdFilter filter = new EventIdFilter(1); assert1Result(filter); } @Test @JUnitTemporaryDatabase // Relies on specific IDs so we need a fresh database public void testEventIdListFilter(){ int[] ids = {1}; EventIdListFilter filter = new EventIdListFilter(ids); assert1Result(filter); } @Test @JUnitTemporaryDatabase // Relies on specific IDs so we need a fresh database public void testAcknowledgeByFilter(){ AcknowledgedByFilter filter = new AcknowledgedByFilter("TestUser"); EventCriteria criteria = new EventCriteria(filter); Event[] events = m_daoEventRepo.getMatchingEvents(criteria); assertEquals(0, events.length); m_daoEventRepo.acknowledgeMatchingEvents("TestUser", new Date(), new EventCriteria(new EventIdFilter(1))); events = m_daoEventRepo.getMatchingEvents(criteria); assertEquals(1, events.length); assertEquals("TestUser", events[0].getAcknowledgeUser()); m_daoEventRepo.unacknowledgeAll(); events = m_jdbcEventRepo.getMatchingEvents(criteria); assertEquals(0, events.length); m_daoEventRepo.acknowledgeAll("TestUser", new Date()); events = m_jdbcEventRepo.getMatchingEvents(criteria); assertEquals(2, events.length); } @Test @Transactional public void testAfterDateFilter(){ AfterDateFilter filter = new AfterDateFilter(yesterday()); Event[] events = getMatchingDaoEvents(filter); assertEquals(2, events.length); events = getMatchingJdbcEvents(filter); assertEquals(2, events.length); } @Test @JUnitTemporaryDatabase // Relies on specific IDs so we need a fresh database public void testAlarmIdFilter(){ AlarmIdFilter filter = new AlarmIdFilter(1); Event[] events = getMatchingDaoEvents(filter); assertEquals(1, events.length); events = getMatchingJdbcEvents(filter); assertEquals(1, events.length); } @Test @Transactional public void testBeforeDateFilter(){ BeforeDateFilter filter = new BeforeDateFilter(new Date()); Event[] events = getMatchingDaoEvents(filter); assertEquals(2, events.length); events = getMatchingJdbcEvents(filter); assertEquals(2, events.length); } @Test @Transactional public void testDescriptionSubstringFilterTest(){ DescriptionSubstringFilter filter = new DescriptionSubstringFilter("test event"); Event[] events = getMatchingDaoEvents(filter); assertEquals(1, events.length); assertEquals("This is a test event", events[0].getDescription()); events = getMatchingJdbcEvents(filter); assertEquals(1, events.length); assertEquals("This is a test event", events[0].getDescription()); } @Test @Transactional public void testExactUEIFilter(){ ExactUEIFilter filter = new ExactUEIFilter("uei.opennms.org/test2"); Event[] events = getMatchingDaoEvents(filter); assertEquals(1, events.length); assertEquals("uei.opennms.org/test2", events[0].getUei()); events = getMatchingJdbcEvents(new ExactUEIFilter("uei.opennms.org/test")); assertEquals(1, events.length); assertEquals("uei.opennms.org/test", events[0].getUei()); } @Test @Transactional public void testIfIndexFilter(){ IfIndexFilter filter = new IfIndexFilter(11); Event[] events = getMatchingDaoEvents(filter); assertEquals(1, events.length); events = getMatchingJdbcEvents(filter); assertEquals(1, events.length); events = getMatchingDaoEvents(new IfIndexFilter(1)); assertEquals(0, events.length); events = getMatchingJdbcEvents(new IfIndexFilter(1)); assertEquals(0, events.length); } @Test @Transactional public void testInterfaceFilter(){ InterfaceFilter filter = new InterfaceFilter("192.168.1.1"); Event[] events = getMatchingDaoEvents(filter); assertEquals(1, events.length); assertEquals("192.168.1.1", events[0].getIpAddress()); events = getMatchingJdbcEvents(filter); assertEquals(1, events.length); assertEquals("192.168.1.1", events[0].getIpAddress()); } @Test @Transactional public void testIpAddrLikeFilter(){ IPAddrLikeFilter filter = new IPAddrLikeFilter("192.168.*.*"); Event[] events = getMatchingDaoEvents(filter); assertEquals(1, events.length); events = getMatchingJdbcEvents(filter); assertEquals(1, events.length); filter = new IPAddrLikeFilter("193.168"); events = getMatchingDaoEvents(filter); assertEquals(0, events.length); events = getMatchingJdbcEvents(filter); assertEquals(0, events.length); } @Test @Transactional public void testLogMessageMatchesAny(){ LogMessageMatchesAnyFilter filter = new LogMessageMatchesAnyFilter("This is a"); Event[] events = getMatchingDaoEvents(filter); assertEquals(1, events.length); events = null; events = getMatchingJdbcEvents(filter); assertEquals(1, events.length); } @Test @Transactional public void testLogMessageSubstringFilter(){ LogMessageSubstringFilter filter = new LogMessageSubstringFilter("is a test"); Event[] events = getMatchingDaoEvents(filter); assertEquals(1, events.length); events = getMatchingJdbcEvents(filter); assertEquals(1, events.length); } @Test @Transactional public void testNegativeAcknowledgedByFilter(){ NegativeAcknowledgedByFilter filter = new NegativeAcknowledgedByFilter("TestUser"); Event[] events = getMatchingDaoEvents(filter); assertEquals(2, events.length); events = null; events = getMatchingJdbcEvents(filter); assertEquals(2, events.length); m_daoEventRepo.acknowledgeAll("TestUser", new Date()); events = getMatchingDaoEvents(filter); assertEquals(0, events.length); events = getMatchingJdbcEvents(filter); assertEquals(0, events.length); } @Test @Transactional public void testNegativeExactUeiFilter(){ NegativeExactUEIFilter filter = new NegativeExactUEIFilter("uei.opennms.org/test2"); Event[] events = getMatchingDaoEvents(filter); assertEquals(1, events.length); events = getMatchingJdbcEvents(filter); assertEquals(1, events.length); filter = new NegativeExactUEIFilter("uei.opennms.org/nontest"); events = getMatchingDaoEvents(filter); assertEquals(2, events.length); events = getMatchingJdbcEvents(filter); assertEquals(2, events.length); } @Test @Transactional public void testNegativeInterfaceFilter(){ NegativeInterfaceFilter filter = new NegativeInterfaceFilter("192.168.1.1"); Event[] events = getMatchingDaoEvents(filter); assertEquals(1, events.length); events = getMatchingJdbcEvents(filter); assertEquals(1, events.length); filter = new NegativeInterfaceFilter("27.0.0.1"); events = getMatchingDaoEvents(filter); assertEquals(2, events.length); events = getMatchingJdbcEvents(filter); assertEquals(2, events.length); } @Test @Transactional public void testNegativeNodeFilter(){ NegativeNodeFilter filter = new NegativeNodeFilter(m_dbPopulator.getNode2().getId(), m_appContext); Event[] events = getMatchingDaoEvents(filter); assertEquals(2, events.length); events = getMatchingJdbcEvents(filter); assertEquals(2, events.length); filter = new NegativeNodeFilter(m_dbPopulator.getNode1().getId(), m_appContext); events = getMatchingDaoEvents(filter); assertEquals(1, events.length); events = getMatchingJdbcEvents(filter); assertEquals(1, events.length); assertEquals("node is not node1", filter.getTextDescription()); } @Test @Transactional public void testNegativePartialUeiFilter(){ NegativePartialUEIFilter filter = new NegativePartialUEIFilter("uei.opennms.org"); Event[] events = getMatchingDaoEvents(filter); assertEquals(0, events.length); events = getMatchingJdbcEvents(filter); assertEquals(0, events.length); filter = new NegativePartialUEIFilter("puei.org.opennms"); events = getMatchingDaoEvents(filter); assertEquals(2, events.length); events = getMatchingJdbcEvents(filter); assertEquals(2, events.length); } @Test @JUnitTemporaryDatabase // Relies on specific IDs so we need a fresh database public void testNegativeServiceFilter(){ NegativeServiceFilter filter = new NegativeServiceFilter(1, m_appContext); Event[] events = getMatchingDaoEvents(filter); assertEquals(1, events.length); events = getMatchingJdbcEvents(filter); assertEquals(1, events.length); filter = new NegativeServiceFilter(2, m_appContext); events = getMatchingDaoEvents(filter); assertEquals(2, events.length); events = getMatchingJdbcEvents(filter); assertEquals(2, events.length); } @Test @Transactional public void testNegativeSeverityFilter(){ NegativeSeverityFilter filter = new NegativeSeverityFilter(OnmsSeverity.CRITICAL.getId()); Event[] events = getMatchingDaoEvents(filter); assertEquals(2, events.length); events = getMatchingJdbcEvents(filter); assertEquals(2, events.length); filter = new NegativeSeverityFilter(OnmsSeverity.CLEARED.getId()); events = getMatchingDaoEvents(filter); assertEquals(1, events.length); events = getMatchingJdbcEvents(filter); assertEquals(1, events.length); } @Test @JUnitTemporaryDatabase // Relies on specific IDs so we need a fresh database public void testNodeFilter(){ NodeFilter filter = new NodeFilter(1, m_appContext); Event[] events = getMatchingDaoEvents(filter); assertEquals(1, events.length); events = getMatchingJdbcEvents(filter); assertEquals(1, events.length); filter = new NodeFilter(2, m_appContext); events = getMatchingDaoEvents(filter); assertEquals(0, events.length); events = getMatchingJdbcEvents(filter); assertEquals(0, events.length); assertEquals("node=node2", filter.getTextDescription()); } @Test @Transactional public void testNodeNameLikeFilter(){ NodeNameLikeFilter filter = new NodeNameLikeFilter("node1"); Event[] events = getMatchingDaoEvents(filter); assertEquals(1, events.length); events = getMatchingJdbcEvents(filter); assertEquals(1, events.length); filter = new NodeNameLikeFilter("testNode"); events = getMatchingDaoEvents(filter); assertEquals(0, events.length); events = getMatchingJdbcEvents(filter); assertEquals(0, events.length); } @Test @Transactional public void testPartialUeiFilter(){ PartialUEIFilter filter = new PartialUEIFilter("uei.opennms.org/t"); Event[] events = getMatchingDaoEvents(filter); assertEquals(2, events.length); events = getMatchingJdbcEvents(filter); assertEquals(2, events.length); filter = new PartialUEIFilter("unknown"); events = getMatchingDaoEvents(filter); assertEquals(0, events.length); events = getMatchingJdbcEvents(filter); assertEquals(0, events.length); } @Test @JUnitTemporaryDatabase // Relies on specific IDs so we need a fresh database public void testServiceFilter(){ ServiceFilter filter = new ServiceFilter(2, m_appContext); Event[] events = getMatchingDaoEvents(filter); assertEquals(0, events.length); events = getMatchingJdbcEvents(filter); assertEquals(0, events.length); filter = new ServiceFilter(1, m_appContext); events = getMatchingDaoEvents(filter); assertEquals(1, events.length); events = getMatchingJdbcEvents(filter); assertEquals(1, events.length); } @Test @Transactional public void testSeverityFilter(){ SeverityFilter filter = new SeverityFilter(OnmsSeverity.CLEARED.getId()); Event[] events = getMatchingDaoEvents(filter); assertEquals(1, events.length); events = getMatchingJdbcEvents(filter); assertEquals(1, events.length); filter = new SeverityFilter(OnmsSeverity.MAJOR.getId()); events = getMatchingDaoEvents(filter); assertEquals(0, events.length); events = getMatchingJdbcEvents(filter); assertEquals(0, events.length); } private static EventCriteria getCriteria(Filter... filters){ return new EventCriteria(filters); } private Event[] getMatchingDaoEvents(Filter...filters) { return m_daoEventRepo.getMatchingEvents(getCriteria(filters)); } private Event[] getMatchingJdbcEvents(Filter...filters){ return m_jdbcEventRepo.getMatchingEvents(getCriteria(filters)); } private void assert1Result(Filter filter){ EventCriteria criteria = new EventCriteria(filter); Event[] events = m_jdbcEventRepo.getMatchingEvents(criteria); assertEquals(1, events.length); events = m_daoEventRepo.getMatchingEvents(criteria); assertEquals(1, events.length); } private static Date yesterday() { Calendar cal = new GregorianCalendar(); cal.add( Calendar.DATE, -1 ); return cal.getTime(); } }