/******************************************************************************* * This file is part of OpenNMS(R). * * Copyright (C) 2010-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.dao; import java.io.File; import java.io.FileInputStream; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.opennms.core.test.MockLogAppender; import org.opennms.netmgt.config.MibObject; import org.opennms.netmgt.config.datacollection.DatacollectionConfig; import org.opennms.netmgt.config.datacollection.Group; import org.opennms.netmgt.config.datacollection.MibObj; import org.opennms.netmgt.config.datacollection.ResourceType; import org.opennms.netmgt.config.datacollection.SystemDef; import org.opennms.netmgt.config.datacollection.SnmpCollection; import org.opennms.netmgt.model.RrdRepository; import org.opennms.test.ConfigurationTestUtils; import org.springframework.core.io.InputStreamResource; /** * DefaultDataCollectionConfigDaoTest * * @author <a href="mail:agalue@opennms.org">Alejandro Galue</a> */ public class DefaultDataCollectionConfigDaoTest { @Before public void setUp() { MockLogAppender.setupLogging(); System.setProperty("opennms.home", "src/test/opennms-home"); ConfigurationTestUtils.setRelativeHomeDirectory("src/test/opennms-home"); } @After public void tearDown() { MockLogAppender.assertNoWarningsOrGreater(); } @Test public void testNewStyle() throws Exception { DefaultDataCollectionConfigDao dao = instantiateDao("datacollection-config.xml", true); executeTests(dao); } @Test public void testOldStyle() throws Exception { DefaultDataCollectionConfigDao oldDao = instantiateDao("examples/old-datacollection-config.xml", false); executeTests(oldDao); } @Test public void testCompareOldAndNewStyles() throws Exception { DefaultDataCollectionConfigDao newDao = instantiateDao("datacollection-config.xml", true); DefaultDataCollectionConfigDao oldDao = instantiateDao("examples/old-datacollection-config.xml", false); compareContent(oldDao.getContainer().getObject(), newDao.getContainer().getObject()); } /** * Use this test to test speed improvements for the data collection config parsing code. */ @Test @Ignore public void testLoadTimeOfDao() throws Exception { for (int i = 0; i < 100; i++) { instantiateDao("datacollection-config.xml", true); } } private void executeTests(DefaultDataCollectionConfigDao dao) { // Expected Values int netsnmpObjectsCount = 197; // bluecat.xml, netsnmp.xml, zeus.xml int ciscoObjectsCount = 44; int resourceTypesCount = 88; int systemDefCount = 141; // Execute Tests executeRepositoryTest(dao); executeMibObjectsTest(dao, ".1.3.6.1.4.1.8072.3.2.255", netsnmpObjectsCount); executeMibObjectsTest(dao, ".1.3.6.1.4.1.9.1.222", ciscoObjectsCount); executeResourceTypesTest(dao, resourceTypesCount); executeSystemDefCount(dao, systemDefCount); } private void executeRepositoryTest(DefaultDataCollectionConfigDao dao) { Assert.assertEquals("select", dao.getSnmpStorageFlag("default")); // Test Repository RrdRepository repository = dao.getRrdRepository("default"); Assert.assertNotNull(repository); Assert.assertEquals(300, repository.getStep()); // Test Step Assert.assertEquals(repository.getStep(), dao.getStep("default")); // Test RRA List List<String> rras = dao.getRRAList("default"); Assert.assertEquals(repository.getRraList().size(), rras.size()); } private DefaultDataCollectionConfigDao instantiateDao(String fileName, boolean setConfigDirectory) throws Exception { DefaultDataCollectionConfigDao dao = new DefaultDataCollectionConfigDao(); File configFile = new File("src/test/opennms-home/etc", fileName); if (setConfigDirectory) { File configFolder = new File(configFile.getParentFile(), "datacollection"); Assert.assertTrue(configFolder.isDirectory()); dao.setConfigDirectory(configFolder.getAbsolutePath()); } dao.setConfigResource(new InputStreamResource(new FileInputStream(configFile))); dao.afterPropertiesSet(); return dao; } private void executeSystemDefCount(DefaultDataCollectionConfigDao dao, int expectedCount) { DatacollectionConfig config = dao.getContainer().getObject(); int systemDefCount = 0; for (SnmpCollection collection : config.getSnmpCollectionCollection()) { systemDefCount += collection.getSystems().getSystemDefCount(); } Assert.assertEquals(expectedCount, systemDefCount); } private void executeResourceTypesTest(DefaultDataCollectionConfigDao dao, int expectedCount) { Map<String,ResourceType> resourceTypesMap = dao.getConfiguredResourceTypes(); Assert.assertNotNull(resourceTypesMap); Assert.assertEquals(expectedCount, resourceTypesMap.size()); Assert.assertTrue(resourceTypesMap.containsKey("frCircuitIfIndex")); // Used resource type Assert.assertTrue(resourceTypesMap.containsKey("wmiTcpipNetworkInterface")); // Unused resource type Assert.assertTrue(resourceTypesMap.containsKey("xmpFilesys")); // Unused resource type } private void executeMibObjectsTest(DefaultDataCollectionConfigDao dao, String systemOid, int expectedCount) { List<MibObject> mibObjects = dao.getMibObjectList("default", systemOid, "127.0.0.1", -1); Assert.assertNotNull(mibObjects); Assert.assertEquals(expectedCount, mibObjects.size()); } private void compareContent(DatacollectionConfig refObj, DatacollectionConfig newObj) { Set<String> resourceTypes = new HashSet<String>(); Set<String> systemDefs = new HashSet<String>(); Set<String> groups = new HashSet<String>(); for (SnmpCollection collection : refObj.getSnmpCollectionCollection()) { for (SystemDef sd : collection.getSystems().getSystemDefCollection()) { systemDefs.add(sd.getName()); for (String group : sd.getCollect().getIncludeGroupCollection()) { groups.add(group); } } for (Group g : collection.getGroups().getGroupCollection()) { if (groups.contains(g.getName())) { for (MibObj mo : g.getMibObjCollection()) { String i = mo.getInstance(); if (!i.matches("\\d+") && !i.equals("ifIndex")) resourceTypes.add(mo.getInstance()); } } } } for (SnmpCollection collection : newObj.getSnmpCollectionCollection()) { for (Group g : collection.getGroups().getGroupCollection()) { for (MibObj mo : g.getMibObjCollection()) { String i = mo.getInstance(); if (!i.matches("\\d+") && !i.equals("ifIndex")) resourceTypes.remove(mo.getInstance()); } } for (SystemDef sd : collection.getSystems().getSystemDefCollection()) { systemDefs.remove(sd.getName()); for (String group : sd.getCollect().getIncludeGroupCollection()) { groups.remove(group); } } } if (systemDefs.size() > 0) { Assert.fail("There are un-configured system definitions on the new datacollection: " + systemDefs); } if (groups.size() > 0) { Assert.fail("There are un-configured groups on the new datacollection: " + groups); } if (resourceTypes.size() > 0) { Assert.fail("There are un-configured resourceTypes on the new datacollection: " + resourceTypes); } } }