/******************************************************************************* * 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.netmgt.config; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import junit.framework.TestCase; import org.exolab.castor.xml.MarshalException; import org.exolab.castor.xml.ValidationException; import org.opennms.core.test.MockLogAppender; import org.opennms.core.xml.CastorUtils; import org.opennms.netmgt.config.poller.Downtime; import org.opennms.netmgt.config.poller.Filter; import org.opennms.netmgt.config.poller.IncludeRange; import org.opennms.netmgt.config.poller.Package; import org.opennms.netmgt.config.poller.PollerConfiguration; import org.opennms.netmgt.config.poller.Rrd; import org.opennms.netmgt.config.poller.Service; import org.opennms.netmgt.mock.MockDatabase; import org.opennms.netmgt.mock.MockNetwork; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; public class PollerConfigFactoryTest extends TestCase { public static void main(String[] args) { junit.textui.TestRunner.run(PollerConfigFactoryTest.class); } public static final String POLLER_CONFIG = "\n" + "<poller-configuration\n" + " threads=\"10\"\n" + " nextOutageId=\"SELECT nextval(\'outageNxtId\')\"\n" + " serviceUnresponsiveEnabled=\"false\">\n" + " <node-outage status=\"on\" pollAllIfNoCriticalServiceDefined=\"true\"></node-outage>\n" + " <package name=\"default\">\n" + " <filter>IPADDR IPLIKE *.*.*.*</filter>\n" + " <rrd step = \"300\">\n" + " <rra>RRA:AVERAGE:0.5:1:2016</rra>\n" + " <rra>RRA:AVERAGE:0.5:12:4464</rra>\n" + " <rra>RRA:MIN:0.5:12:4464</rra>\n" + " <rra>RRA:MAX:0.5:12:4464</rra>\n" + " </rrd>\n" + " <service name=\"ICMP\" interval=\"300000\">\n" + " <parameter key=\"test-key\" value=\"test-value\"/>\n" + " <parameter key=\"any-parm\">" + " <config>" + " <data/>" + " </config>" + " </parameter>" + " </service>\n" + " <downtime begin=\"0\" end=\"30000\"/>\n" + " </package>\n" + " <monitor service=\"ICMP\" class-name=\"org.opennms.netmgt.poller.monitors.LdapMonitor\"/>\n"+ "</poller-configuration>\n"; protected void setUp() throws Exception { super.setUp(); MockLogAppender.setupLogging(); Resource dbConfig = new ClassPathResource("/org/opennms/netmgt/config/test-database-schema.xml"); InputStream s = dbConfig.getInputStream(); DatabaseSchemaConfigFactory dscf = new DatabaseSchemaConfigFactory(s); s.close(); DatabaseSchemaConfigFactory.setInstance(dscf); MockNetwork network = new MockNetwork(); network.setCriticalService("ICMP"); network.addNode(1, "Router"); network.addInterface("192.168.1.1"); network.addService("ICMP"); network.addService("SMTP"); network.addInterface("192.168.1.2"); network.addService("ICMP"); network.addService("SMTP"); network.addNode(2, "Server"); network.addInterface("192.168.1.3"); network.addService("ICMP"); network.addService("HTTP"); network.addNode(3, "Firewall"); network.addInterface("192.168.1.4"); network.addService("SMTP"); network.addService("HTTP"); network.addInterface("192.168.1.5"); network.addService("SMTP"); network.addService("HTTP"); network.addInterface("192.169.1.5"); network.addService("SMTP"); network.addService("HTTP"); network.addNode(4, "TestNode121"); network.addInterface("123.12.123.121"); network.addService("HTTP"); network.addNode(5, "TestNode122"); network.addInterface("123.12.123.122"); network.addService("HTTP"); MockDatabase db = new MockDatabase(); db.populate(network); DataSourceFactory.setInstance(db); } protected void tearDown() throws Exception { super.tearDown(); MockLogAppender.assertNoWarningsOrGreater(); } static class TestPollerConfigManager extends PollerConfigManager { private String m_xml; public TestPollerConfigManager(String xml, String localServer, boolean verifyServer) throws MarshalException, ValidationException, IOException { super(new ByteArrayInputStream(xml.getBytes("UTF-8")), localServer, verifyServer); save(); } public void update() throws IOException, MarshalException, ValidationException { m_config = CastorUtils.unmarshal(PollerConfiguration.class, new ByteArrayInputStream(m_xml.getBytes("UTF-8"))); setUpInternalData(); } protected void saveXml(String xml) throws IOException { m_xml = xml; } public String getXml() { return m_xml; } } public void testPollerConfigFactory() throws Exception { TestPollerConfigManager factory = new TestPollerConfigManager(POLLER_CONFIG, "localhost", false); assertNull(factory.getPackage("TestPkg")); Package pkg = new Package(); pkg.setName("TestPkg"); Filter filter = new Filter(); filter.setContent("IPADDR IPLIKE *.*.*.*"); pkg.setFilter(filter); Rrd rrd = new Rrd(); rrd.setStep(300); rrd.addRra("RRA:AVERAGE:0.5:1:2016"); pkg.setRrd(rrd); Service svc = new Service(); svc.setName("TestService"); svc.setInterval(300000); pkg.addService(svc); Downtime dt = new Downtime(); dt.setBegin(0); pkg.addDowntime(dt); IncludeRange inclde = new IncludeRange(); inclde.setBegin("192.169.0.0"); inclde.setEnd("192.169.255.255"); pkg.addIncludeRange(inclde); factory.addPackage(pkg); factory.save(); assertNotNull(factory.getPackage("TestPkg")); TestPollerConfigManager newFactory = new TestPollerConfigManager(factory.getXml(), "localhost", false); Package p = newFactory.getPackage("TestPkg"); assertNotNull(p); assertTrue(newFactory.isInterfaceInPackage("192.169.1.5", p)); assertFalse(newFactory.isInterfaceInPackage("192.168.1.5", p)); } public void testInterfaceInPackage() throws Exception { TestPollerConfigManager factory = new TestPollerConfigManager(POLLER_CONFIG, "localhost", false); Package pkg = factory.getPackage("default"); assertNotNull("Unable to find pkg default", pkg); assertTrue("Expected 192.168.1.1 to be in the package", factory.isInterfaceInPackage("192.168.1.1", pkg)); } public void testSpecific() throws Exception { TestPollerConfigManager factory = new TestPollerConfigManager(POLLER_CONFIG, "localhost", false); assertNull(factory.getPackage("TestPkg")); Package pkg = new Package(); pkg.setName("TestPkg"); Filter filter = new Filter(); filter.setContent("IPADDR != '0.0.0.0'"); pkg.setFilter(filter); Rrd rrd = new Rrd(); rrd.setStep(300); rrd.addRra("RRA:AVERAGE:0.5:1:2016"); pkg.setRrd(rrd); Service svc = new Service(); svc.setName("TestService"); svc.setInterval(300000); pkg.addService(svc); Downtime dt = new Downtime(); dt.setBegin(0); pkg.addDowntime(dt); pkg.addSpecific("123.12.123.121"); pkg.addSpecific("123.12.123.122"); factory.addPackage(pkg); factory.save(); assertNotNull(factory.getPackage("TestPkg")); TestPollerConfigManager newFactory = new TestPollerConfigManager(factory.getXml(), "localhost", false); Package p = newFactory.getPackage("TestPkg"); assertNotNull(p); System.out.println(factory.getXml()); assertTrue("Expect 123.12.123.121 to be part of the package", newFactory.isInterfaceInPackage("123.12.123.121", p)); assertTrue("Expect 123.12.123.122 to be part of the package", newFactory.isInterfaceInPackage("123.12.123.122", p)); assertFalse("Expected 192.168.1.1 to be excluded from the package", newFactory.isInterfaceInPackage("192.168.1.1", p)); } }