/******************************************************************************* * 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.netmgt.poller.monitors; import java.net.UnknownHostException; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Level; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.opennms.core.test.MockLogAppender; import org.opennms.core.test.OpenNMSJUnit4ClassRunner; import org.opennms.core.test.snmp.annotations.JUnitSnmpAgent; import org.opennms.core.utils.BeanUtils; import org.opennms.core.utils.InetAddressUtils; import org.opennms.core.utils.LogUtils; import org.opennms.netmgt.config.SnmpPeerFactory; import org.opennms.netmgt.mock.MockMonitoredService; import org.opennms.netmgt.model.PollStatus; import org.opennms.netmgt.poller.MonitoredService; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; /** * Test class for HostResourceSWRunMonitorTest. * * @author <A HREF="mailto:agalue@opennms.org">Alejandro Galue</A> * @author <A HREF="http://www.opennms.org/">OpenNMS </A> */ @RunWith(OpenNMSJUnit4ClassRunner.class) @ContextConfiguration(locations={ "classpath:/META-INF/opennms/applicationContext-proxy-snmp.xml" }) @JUnitSnmpAgent(port=HostResourceSWRunMonitorTest.TEST_SNMP_PORT,host=HostResourceSWRunMonitorTest.TEST_IP_ADDRESS, resource="classpath:org/opennms/netmgt/snmp/snmpTestData1.properties") public class HostResourceSWRunMonitorTest implements InitializingBean { static final int TEST_SNMP_PORT = 9161; static final String TEST_IP_ADDRESS = "127.0.0.1"; private Level m_defaultLogLevel = Level.WARN; @Autowired private SnmpPeerFactory m_snmpPeerFactory; @Override public void afterPropertiesSet() throws Exception { BeanUtils.assertAutowiring(this); } @Before public void setUp() throws Exception { MockLogAppender.setupLogging(); SnmpPeerFactory.setInstance(m_snmpPeerFactory); } @After public void tearDown() throws Exception { MockLogAppender.assertNotGreaterOrEqual(m_defaultLogLevel); } @Test public void testUnknownService() throws Exception { HostResourceSwRunMonitor monitor = new HostResourceSwRunMonitor(); Map<String, Object> parameters = createBasicParams(); parameters.put("service-name", "this service does not exist!"); PollStatus status = monitor.poll(createMonitor(), parameters); Assert.assertFalse(status.isAvailable()); log(status.getReason()); } @Test public void testMonitorWithRegex() throws Exception { HostResourceSwRunMonitor monitor = new HostResourceSwRunMonitor(); Map<String, Object> parameters = createBasicParams(); PollStatus status = monitor.poll(createMonitor(), parameters); Assert.assertTrue(status.isAvailable()); } @Test public void testMonitorWithoutRegex() throws Exception { HostResourceSwRunMonitor monitor = new HostResourceSwRunMonitor(); Map<String, Object> parameters = createBasicParams(); parameters.put("service-name", "eclipse"); PollStatus status = monitor.poll(createMonitor(), parameters); Assert.assertTrue(status.isAvailable()); } @Test public void testMinServices() throws Exception { HostResourceSwRunMonitor monitor = new HostResourceSwRunMonitor(); Map<String, Object> parameters = createBasicParams(); parameters.put("min-services", "2"); PollStatus status = monitor.poll(createMonitor(), parameters); Assert.assertTrue(status.isAvailable()); } @Test public void testInvalidMinServices() throws Exception { HostResourceSwRunMonitor monitor = new HostResourceSwRunMonitor(); Map<String, Object> parameters = createBasicParams(); parameters.put("min-services", "5"); PollStatus status = monitor.poll(createMonitor(), parameters); Assert.assertFalse(status.isAvailable()); log(status.getReason()); } @Test public void testMaxServices() throws Exception { HostResourceSwRunMonitor monitor = new HostResourceSwRunMonitor(); Map<String, Object> parameters = createBasicParams(); parameters.put("max-services", "5"); PollStatus status = monitor.poll(createMonitor(), parameters); Assert.assertTrue(status.isAvailable()); } @Test public void testInvalidMaxServices() throws Exception { HostResourceSwRunMonitor monitor = new HostResourceSwRunMonitor(); Map<String, Object> parameters = createBasicParams(); parameters.put("max-services", "3"); PollStatus status = monitor.poll(createMonitor(), parameters); Assert.assertFalse(status.isAvailable()); log(status.getReason()); } @Test public void testServicesRange() throws Exception { HostResourceSwRunMonitor monitor = new HostResourceSwRunMonitor(); Map<String, Object> parameters = createBasicParams(); parameters.put("min-services", "2"); parameters.put("max-services", "5"); PollStatus status = monitor.poll(createMonitor(), parameters); Assert.assertTrue(status.isAvailable()); } @Test public void testInvalidRange() throws Exception { m_defaultLogLevel = Level.ERROR; HostResourceSwRunMonitor monitor = new HostResourceSwRunMonitor(); Map<String, Object> parameters = createBasicParams(); parameters.put("min-services", "8"); parameters.put("max-services", "5"); PollStatus status = monitor.poll(createMonitor(), parameters); Assert.assertFalse(status.isAvailable()); log(status.getReason()); } @Test public void testServicesRangeWithoutMatchAll() throws Exception { HostResourceSwRunMonitor monitor = new HostResourceSwRunMonitor(); Map<String, Object> parameters = createBasicParams(); parameters.put("min-services", "1"); parameters.put("max-services", "3"); parameters.put("match-all", "false"); PollStatus status = monitor.poll(createMonitor(), parameters); Assert.assertTrue(status.isAvailable()); } @Test public void testInvalidServicesRange() throws Exception { HostResourceSwRunMonitor monitor = new HostResourceSwRunMonitor(); Map<String, Object> parameters = createBasicParams(); parameters.put("min-services", "1"); parameters.put("max-services", "3"); PollStatus status = monitor.poll(createMonitor(), parameters); Assert.assertFalse(status.isAvailable()); log(status.getReason()); } private Map<String, Object> createBasicParams() { Map<String, Object> parameters = new HashMap<String,Object>(); parameters.put("port", m_snmpPeerFactory.getAgentConfig(InetAddressUtils.getInetAddress(TEST_IP_ADDRESS)).getPort()); parameters.put("service-name", "~^(auto|sh).*"); parameters.put("match-all", "true"); return parameters; } private MonitoredService createMonitor() throws UnknownHostException { MonitoredService svc = new MockMonitoredService(1, "test-server", InetAddressUtils.getInetAddress(TEST_IP_ADDRESS), "SWRUN-TEST"); return svc; } private void log(String message) { LogUtils.debugf(this, message); } }