/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 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.jasper.rrdtool;
import java.io.FileReader;
import java.io.Reader;
import java.util.Date;
import net.sf.jasperreports.engine.JRField;
import net.sf.jasperreports.engine.JRPropertiesHolder;
import net.sf.jasperreports.engine.JRPropertiesMap;
import org.exolab.castor.xml.Unmarshaller;
import org.junit.Assert;
import org.junit.Test;
public class RrdtoolDataSourceTest {
private class RrdField implements JRField {
private String name;
private Class<?> value;
public RrdField(String name, Class<?> value) {
this.name = name;
this.value = value;
}
public JRPropertiesHolder getParentProperties() {
return null;
}
public JRPropertiesMap getPropertiesMap() {
return null;
}
public boolean hasProperties() {
return false;
}
public String getDescription() {
return null;
}
public String getName() {
return name;
}
public Class<?> getValueClass() {
return value;
}
public String getValueClassName() {
return value.getName();
}
public void setDescription(String arg0) {
}
@Override
public Object clone() {
return null;
}
}
@Test
public void testCommand() {
System.setProperty("rrd.binary", "/usr/bin/rrdtool");
String queryString = "--start 1287005100 --end 1287018990\n DEF:xx=src/test/resources/http-8980.jrb:http-8980:AVERAGE\n DEF:zz=src/test/resources/ssh.jrb:ssh:AVERAGE\r\n XPORT:xx:HttpLatency XPORT:zz:SshLatency";
System.err.println(queryString);
String command = System.getProperty("rrd.binary") + " xport " + queryString.replaceAll("[\r\n]+", " ").replaceAll("\\s+", " ");
System.err.println("single line: " + command);
}
@Test
public void testEmptyData() throws Exception {
RrdtoolDataSource ds = new RrdtoolDataSource(null);
Assert.assertFalse(ds.next());
}
@Test
public void testRrdData() throws Exception {
Reader reader = new FileReader("src/test/resources/rrdtool-xport.xml");
Xport xport = (Xport) Unmarshaller.unmarshal(Xport.class, reader);
Assert.assertEquals("SampleData", xport.getMeta().getLegend().getEntry(0).getContent());
Assert.assertEquals(13, xport.getData().getRowCount());
RrdtoolDataSource ds = new RrdtoolDataSource(xport);
Assert.assertTrue(ds.next());
Date d1 = (Date) ds.getFieldValue(new RrdField("Timestamp", Date.class));
Assert.assertEquals(new Date(1206312900000L).toString(), d1.toString());
Double v1 = (Double) ds.getFieldValue(new RrdField("SampleData", Double.class));
Assert.assertEquals(new Double(19.86), v1);
Assert.assertTrue(ds.next());
Date d2 = (Date) ds.getFieldValue(new RrdField("Timestamp", Date.class));
Assert.assertEquals(new Date(1206313200000L).toString(), d2.toString());
Double v2 = (Double) ds.getFieldValue(new RrdField("SampleData", Double.class));
Assert.assertEquals(new Double(Double.NaN), v2);
Assert.assertTrue(ds.next());
Date d3 = (Date) ds.getFieldValue(new RrdField("Timestamp", Date.class));
Assert.assertEquals(new Date(1206313500000L).toString(), d3.toString());
Double v3 = (Double) ds.getFieldValue(new RrdField("SampleData", Double.class));
Assert.assertEquals(new Double(Double.NaN), v3);
Assert.assertTrue(ds.next());
Date d4 = (Date) ds.getFieldValue(new RrdField("Timestamp", Date.class));
Assert.assertEquals(new Date(1206313800000L).toString(), d4.toString());
Double v4 = (Double) ds.getFieldValue(new RrdField("SampleData", Double.class));
Assert.assertEquals(new Double(26.00), v4);
for (int i=4; i<13; i++)
ds.next();
Date d13 = (Date) ds.getFieldValue(new RrdField("Timestamp", Date.class));
Assert.assertEquals(new Date(1206316500000L).toString(), d13.toString());
Double v13 = (Double) ds.getFieldValue(new RrdField("SampleData", Double.class));
Assert.assertEquals(new Double(50.00), v13);
Assert.assertFalse(ds.next());
}
}