/*******************************************************************************
* 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 static org.junit.Assert.assertEquals;
import java.io.File;
import java.io.IOException;
import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.xml.ValidationException;
import org.junit.Test;
import org.opennms.netmgt.dao.DefaultDataCollectionConfigDao;
import org.opennms.test.ThrowableAnticipator;
import org.springframework.core.io.ByteArrayResource;
public class DataCollectionConfigFactoryTest {
private static File m_rrdRepository = new File(System.getProperty("java.io.tmpdir") + File.separator + "wonka" + File.separator + "rrd" + File.separator + "snmp");
private static String m_xml = "<?xml version=\"1.0\"?>\n" +
"<datacollection-config\n" +
" rrdRepository = \"" + m_rrdRepository.getAbsolutePath() + File.separator + "\">\n" +
" <snmp-collection name=\"default\"\n" +
" snmpStorageFlag = \"select\">\n" +
" <rrd step = \"300\">\n" +
" <rra>RRA:AVERAGE:0.5:1:8928</rra>\n" +
" <rra>RRA:AVERAGE:0.5:12:8784</rra>\n" +
" <rra>RRA:MIN:0.5:12:8784</rra>\n" +
" <rra>RRA:MAX:0.5:12:8784</rra>\n" +
" </rrd>\n" +
" <groups>\n" +
" <!-- data from standard (mib-2) sources -->\n" +
" <group name = \"mib2-interfaces\" ifType = \"all\">\n" +
" <mibObj oid=\".1.3.6.1.2.1.2.2.1.10\" instance=\"ifIndex\" alias=\"ifInOctets\" type=\"counter\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.2.2.1.11\" instance=\"ifIndex\" alias=\"ifInUcastpkts\" type=\"counter\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.2.2.1.12\" instance=\"ifIndex\" alias=\"ifInNUcastpkts\" type=\"counter\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.2.2.1.13\" instance=\"ifIndex\" alias=\"ifInDiscards\" type=\"counter\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.2.2.1.14\" instance=\"ifIndex\" alias=\"ifInErrors\" type=\"counter\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.2.2.1.16\" instance=\"ifIndex\" alias=\"ifOutOctets\" type=\"counter\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.2.2.1.17\" instance=\"ifIndex\" alias=\"ifOutUcastPkts\" type=\"counter\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.2.2.1.18\" instance=\"ifIndex\" alias=\"ifOutNUcastPkts\" type=\"counter\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.2.2.1.19\" instance=\"ifIndex\" alias=\"ifOutDiscards\" type=\"counter\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.2.2.1.20\" instance=\"ifIndex\" alias=\"ifOutErrors\" type=\"counter\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.31.1.1.1.6\" instance=\"ifIndex\" alias=\"ifHCInOctets\" type=\"counter\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.31.1.1.1.10\" instance=\"ifIndex\" alias=\"ifHCOutOctets\" type=\"counter\"/>\n" +
" </group>\n" +
" <group name=\"mib2-tcp\" ifType=\"ignore\">\n" +
" <mibObj oid=\".1.3.6.1.2.1.6.5\" instance=\"0\" alias=\"tcpActiveOpens\" type=\"Counter32\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.6.6\" instance=\"0\" alias=\"tcpPassiveOpens\" type=\"Counter32\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.6.7\" instance=\"0\" alias=\"tcpAttemptFails\" type=\"Counter32\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.6.8\" instance=\"0\" alias=\"tcpEstabResets\" type=\"Counter32\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.6.9\" instance=\"0\" alias=\"tcpCurrEstab\" type=\"Gauge32\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.6.10\" instance=\"0\" alias=\"tcpInSegs\" type=\"Counter32\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.6.11\" instance=\"0\" alias=\"tcpOutSegs\" type=\"Counter32\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.6.12\" instance=\"0\" alias=\"tcpRetransSegs\" type=\"Counter32\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.6.14\" instance=\"0\" alias=\"tcpInErrors\" type=\"Counter32\"/>\n" +
" <mibObj oid=\".1.3.6.1.2.1.6.15\" instance=\"0\" alias=\"tcpOutRsts\" type=\"Counter32\"/>\n" +
" </group>\n" +
" </groups>\n" +
" <systems>\n" +
" <systemDef name = \"Enterprise\">\n" +
" <sysoidMask>.1.3.6.1.4.1.</sysoidMask>\n" +
" <collect>\n" +
" <includeGroup>mib2-interfaces</includeGroup>\n" +
" <includeGroup>mib2-tcp</includeGroup>\n" +
" </collect>\n" +
" </systemDef> \n" +
"\n" +
" </systems>\n" +
" </snmp-collection>\n" +
"</datacollection-config>\n" +
"";
private String m_brocadeXmlFragment =
" <resourceType name=\"brocadeIndex\" label=\"Brocade Switches\">\n" +
" <persistenceSelectorStrategy class=\"foo\"/>\n" +
" <storageStrategy class=\"foo\"/>\n" +
" </resourceType>\n";
@Test
public void testSetInstance() throws MarshalException, ValidationException, IOException {
initDataCollectionFactory(m_xml);
assertEquals(m_rrdRepository.getAbsolutePath(), DataCollectionConfigFactory.getInstance().getRrdPath());
}
@Test
public void testValidResourceType() throws MarshalException, ValidationException, IOException {
String modifiedXml = m_xml.replaceFirst("ifIndex", "brocadeIndex").replaceFirst("<groups", m_brocadeXmlFragment + "<groups");
initDataCollectionFactory(modifiedXml);
}
@Test
public void testInvalidResourceType() throws MarshalException, ValidationException, IOException {
String modifiedXml = m_xml.replaceFirst("ifIndex", "brocadeIndex");
ThrowableAnticipator ta = new ThrowableAnticipator();
// ta.anticipate(new DataAccessResourceFailureException("Instance 'brocadeIndex' invalid in mibObj definition for OID '.1.3.6.1.2.1.2.2.1.10' for group 'mib2-interfaces'. Allowable instance values: any positive number, 'ifIndex', or any of the custom resourceTypes."));
ta.anticipate(new IllegalArgumentException("instance 'brocadeIndex' invalid in mibObj definition for OID '.1.3.6.1.2.1.2.2.1.10' in collection 'default' for group 'mib2-interfaces'. Allowable instance values: any positive number, 'ifIndex', or any of the configured resourceTypes: (none)"));
try {
initDataCollectionFactory(modifiedXml);
DataCollectionConfigFactory.getInstance().getConfiguredResourceTypes();
} catch (Throwable t) {
ta.throwableReceived(t);
}
ta.verifyAnticipated();
}
private void initDataCollectionFactory(String xmlConfig) {
DefaultDataCollectionConfigDao dataCollectionDao = new DefaultDataCollectionConfigDao();
dataCollectionDao.setConfigResource(new ByteArrayResource(xmlConfig.getBytes()));
dataCollectionDao.afterPropertiesSet();
DataCollectionConfigFactory.setInstance(dataCollectionDao);
}
}