diff --git a/opennms-config/src/main/java/org/opennms/netmgt/config/DefaultDataCollectionConfigDao.java b/opennms-config/src/main/java/org/opennms/netmgt/config/DefaultDataCollectionConfigDao.java index bb7e72c..5467690 100644 --- a/opennms-config/src/main/java/org/opennms/netmgt/config/DefaultDataCollectionConfigDao.java +++ b/opennms-config/src/main/java/org/opennms/netmgt/config/DefaultDataCollectionConfigDao.java @@ -621,11 +621,12 @@ public class DefaultDataCollectionConfigDao extends AbstractJaxbConfigDao getResourceTypes() { if (isDataCollectionConfigChanged()) { try { + LOG.debug("The data collection configuration has been changed, reloading resource types."); initResourceTypes(); } catch (IOException e) { LOG.error("Can't reload resource types.", e); diff --git a/opennms-dao/src/test/java/org/opennms/netmgt/dao/DefaultDataCollectionConfigDaoTest.java b/opennms-dao/src/test/java/org/opennms/netmgt/dao/DefaultDataCollectionConfigDaoTest.java index 841f69b..a28ce33 100644 --- a/opennms-dao/src/test/java/org/opennms/netmgt/dao/DefaultDataCollectionConfigDaoTest.java +++ b/opennms-dao/src/test/java/org/opennms/netmgt/dao/DefaultDataCollectionConfigDaoTest.java @@ -30,11 +30,14 @@ package org.opennms.netmgt.dao; import java.io.File; import java.io.FileInputStream; +import java.io.FileWriter; +import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.commons.io.FileUtils; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -51,6 +54,7 @@ import org.opennms.netmgt.config.datacollection.ResourceType; import org.opennms.netmgt.config.datacollection.SnmpCollection; import org.opennms.netmgt.config.datacollection.SystemDef; import org.opennms.netmgt.rrd.RrdRepository; +import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.InputStreamResource; /** @@ -59,14 +63,14 @@ import org.springframework.core.io.InputStreamResource; * @author Alejandro Galue */ 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(); @@ -76,6 +80,12 @@ public class DefaultDataCollectionConfigDaoTest { public void testNewStyle() throws Exception { DefaultDataCollectionConfigDao dao = instantiateDao("datacollection-config.xml", true); executeTests(dao); + SnmpCollection def = dao.getContainer().getObject().getSnmpCollection("default"); + Assert.assertEquals(0, def.getResourceTypes().size()); + SnmpCollection rt = dao.getContainer().getObject().getSnmpCollection("__resource_type_collection"); + Assert.assertEquals(88, rt.getResourceTypes().size()); + Assert.assertEquals(0, rt.getSystems().getSystemDefs().size()); + Assert.assertEquals(0, rt.getGroups().getGroups().size()); } @Test @@ -91,6 +101,43 @@ public class DefaultDataCollectionConfigDaoTest { compareContent(oldDao.getContainer().getObject(), newDao.getContainer().getObject()); } + @Test + public void testReload() throws Exception { + Date now = new Date(); + + File source = new File("src/test/opennms-home/etc"); + File dest = new File("src/target/opennms-home-test/etc"); + dest.mkdirs(); + FileUtils.copyDirectory(source, dest, true); + File target = new File(dest, "datacollection-config.xml"); + Date currentDate = new Date(target.lastModified()); + Assert.assertTrue(currentDate.before(now)); + + // Initialize the DAO with auto-reload + DefaultDataCollectionConfigDao dao = new DefaultDataCollectionConfigDao(); + dao.setConfigDirectory(new File(dest, "datacollection").getAbsolutePath()); + dao.setConfigResource(new FileSystemResource(target)); + dao.setReloadCheckInterval(1000l); + dao.afterPropertiesSet(); + + // Verify that it has not been reloaded + Assert.assertNotNull(dao.getContainer().getObject()); + Assert.assertTrue(currentDate.after(dao.getLastUpdate())); + + // Modify the file to trigger the reload. + FileWriter w = new FileWriter(target, true); + w.write(""); + w.close(); + currentDate = new Date(target.lastModified()); + Assert.assertFalse(currentDate.before(now)); + + // Wait and check if the data was changed. + Thread.sleep(2000l); + Assert.assertFalse(currentDate.after(dao.getLastUpdate())); + + FileUtils.deleteDirectory(dest); + } + /** * Use this test to test speed improvements for the data collection config parsing code. */