/******************************************************************************* * 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.charts; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.sql.SQLException; import org.exolab.castor.xml.MarshalException; import org.exolab.castor.xml.ValidationException; import org.jfree.chart.JFreeChart; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.opennms.core.test.OpenNMSJUnit4ClassRunner; import org.opennms.core.utils.ThreadCategory; import org.opennms.netmgt.config.ChartConfigFactory; import org.opennms.netmgt.config.charts.BarChart; import org.opennms.netmgt.dao.db.JUnitConfigurationEnvironment; import org.opennms.netmgt.dao.db.JUnitTemporaryDatabase; import org.springframework.test.context.ContextConfiguration; @RunWith(OpenNMSJUnit4ClassRunner.class) @ContextConfiguration(locations={ "classpath:/META-INF/opennms/applicationContext-dao.xml", "classpath*:/META-INF/opennms/component-dao.xml" }) @JUnitConfigurationEnvironment @JUnitTemporaryDatabase(dirtiesContext=false) public class ChartUtilsTest { private static final String CHART_CONFIG = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<tns:chart-configuration xmlns:tns=\"http://xmlns.opennms.org/xsd/config/charts\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://xmlns.opennms.org/xsd/config/charts ../src/services/org/opennms/netmgt/config/chart-configuration.xsd \">\n" + "\n" + " <tns:bar-chart name=\"sample-bar-chart\" \n" + " variation=\"2d\" \n" + " domain-axis-label=\"Severity\" \n" + " show-legend=\"true\" \n" + " plot-orientation=\"vertical\" \n" + " draw-bar-outline=\"true\" \n" + " range-axis-label=\"Count\" \n" + " show-urls=\"false\"\n" + " show-tool-tips=\"false\">\n" + " \n" + " <tns:title font=\"SansSerif\" style=\"\" value=\"Alarms\" pitch=\"12\" />\n" + " <tns:image-size>\n" + " <tns:hz-size>\n" + " <tns:pixels>300</tns:pixels>\n" + " </tns:hz-size>\n" + " <tns:vt-size>\n" + " <tns:pixels>300</tns:pixels>\n" + " </tns:vt-size>\n" + " </tns:image-size>\n" + " <tns:sub-title position=\"top\" horizontal-alignment=\"center\">\n" + " <tns:title font=\"SansSerif\" style=\"\" value=\"Severity Chart\" pitch=\"10\" />\n" + " </tns:sub-title>\n" + " <tns:grid-lines visible=\"true\">\n" + " <tns:rgb>\n" + " <tns:red>\n" + " <tns:rgb-color>255</tns:rgb-color>\n" + " </tns:red>\n" + " <tns:green>\n" + " <tns:rgb-color>255</tns:rgb-color>\n" + " </tns:green>\n" + " <tns:blue>\n" + " <tns:rgb-color>255</tns:rgb-color>\n" + " </tns:blue>\n" + " </tns:rgb>\n" + " </tns:grid-lines>\n" + " <tns:series-def number=\"1\" series-name=\"Events\" use-labels=\"true\" >\n" + " <tns:jdbc-data-set db-name=\"opennms\" sql=\"select eventseverity, count(*) from events where eventseverity > 4 group by eventseverity\" />\n" + " <tns:rgb>\n" + " <tns:red>\n" + " <tns:rgb-color>255</tns:rgb-color>\n" + " </tns:red>\n" + " <tns:green>\n" + " <tns:rgb-color>255</tns:rgb-color>\n" + " </tns:green>\n" + " <tns:blue>\n" + " <tns:rgb-color>0</tns:rgb-color>\n" + " </tns:blue>\n" + " </tns:rgb>\n" + " </tns:series-def>\n" + " <tns:series-def number=\"1\" series-name=\"Alarms\" use-labels=\"true\" >\n" + " <tns:jdbc-data-set db-name=\"opennms\" sql=\"select severity, count(*) from alarms where severity > 4 group by severity\" />\n" + " <tns:rgb>\n" + " <tns:red>\n" + " <tns:rgb-color>255</tns:rgb-color>\n" + " </tns:red>\n" + " <tns:green>\n" + " <tns:rgb-color>0</tns:rgb-color>\n" + " </tns:green>\n" + " <tns:blue>\n" + " <tns:rgb-color>0</tns:rgb-color>\n" + " </tns:blue>\n" + " </tns:rgb>\n" + " </tns:series-def>\n" + " </tns:bar-chart>\n" + "</tns:chart-configuration>\n" + ""; // private ChartConfiguration m_config; @Before public void setUp() throws Exception { System.setProperty("java.awt.headless", "true"); initalizeChartFactory(); } @After public void tearDown() throws Exception { } @Test public void testGetBarChartConfig() throws MarshalException, ValidationException, FileNotFoundException, IOException { assertNotNull(ChartUtils.getBarChartConfigByName("sample-bar-chart")); assertTrue(ChartUtils.getBarChartConfigByName("sample-bar-chart").getClass() == BarChart.class); } @Test public void testGetBarChart() throws MarshalException, ValidationException, IOException, SQLException { JFreeChart barChart = ChartUtils.getBarChart("sample-bar-chart"); assertNotNull(barChart); //SubTitle count includes "LegendTitle" assertEquals(2, barChart.getSubtitleCount()); } @Test public void testGetChartWithInvalidChartName() throws MarshalException, ValidationException, IOException, SQLException { JFreeChart chart = null; try { chart = ChartUtils.getBarChart("opennms-rules!"); } catch (IllegalArgumentException e) { log().debug("testGetChartWithInvalidChartName: Good, this test is working."); } assertNull(chart); } @Test public void testGetChartAsFileOutputStream() throws FileNotFoundException, IOException, SQLException, ValidationException, MarshalException { final File tempFile = File.createTempFile("sample-bar-chart", "png"); OutputStream stream = new FileOutputStream(tempFile); ChartUtils.getBarChart("sample-bar-chart", stream); stream.close(); } @Test public void testGetChartAsBufferedImage() throws MarshalException, ValidationException, IOException, SQLException { BufferedImage bi = ChartUtils.getChartAsBufferedImage("sample-bar-chart"); assertEquals(300, bi.getHeight()); } private static void initalizeChartFactory() throws MarshalException, ValidationException, IOException { ChartConfigFactory.setInstance(new ChartConfigFactory()); ByteArrayInputStream rdr = new ByteArrayInputStream(CHART_CONFIG.getBytes("UTF-8")); ChartConfigFactory.parseXml(rdr); rdr.close(); // m_config = ChartConfigFactory.getInstance().getConfiguration(); } private ThreadCategory log() { return ThreadCategory.getInstance(getClass()); } }