package org.rrd4j.graph;
import java.awt.Color;
import java.io.IOException;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.rrd4j.data.Plottable;
public class StackTest {
@BeforeClass
public static void prepare() {
System.getProperties().setProperty("java.awt.headless","true");
}
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void test1() throws IOException {
RrdGraphDef def = new RrdGraphDef();
def.setStartTime(1);
def.setEndTime(100);
def.datasource("base1", new Plottable() {
@Override
public double getValue(long timestamp) {
return (timestamp % 2 == 0) ? Double.NaN : 1;
}});
def.datasource("base2", new Plottable() {
@Override
public double getValue(long timestamp) {
return (timestamp % 2 == 0) ? 1: Double.NaN;
}});
def.datasource("base3", new Plottable() {
@Override
public double getValue(long timestamp) {
return 1;
}});
def.line("base1", Color.BLUE);
def.stack("base2", Color.RED);
def.stack("base3", Color.RED);
new RrdGraph(def);
SourcedPlotElement base2 = (SourcedPlotElement) def.plotElements.get(1);
SourcedPlotElement base3 = (SourcedPlotElement) def.plotElements.get(2);
for(int i=1; i < 100; i++) {
Assert.assertEquals("base2 value failed", 1.0, base2.getValues()[i], 0.0000001);
Assert.assertEquals("base3 value failed", 2.0, base3.getValues()[i], 0.0000001);
}
}
@Test
public void test2() throws IOException {
RrdGraphDef def = new RrdGraphDef();
def.setStartTime(1);
def.setEndTime(100);
def.datasource("base1", new Plottable() {
@Override
public double getValue(long timestamp) {
return (timestamp % 2 == 0) ? Double.NaN : 1;
}});
def.datasource("base2", new Plottable() {
@Override
public double getValue(long timestamp) {
return (timestamp % 2 == 0) ? 1: Double.NaN;
}});
def.datasource("base3", new Plottable() {
@Override
public double getValue(long timestamp) {
return 1;
}});
def.line("base1", Color.BLUE);
def.line("base2", Color.RED, null, 1.0f, true);
def.area("base3", Color.RED, null, true);
new RrdGraph(def);
SourcedPlotElement base2 = (SourcedPlotElement) def.plotElements.get(1);
SourcedPlotElement base3 = (SourcedPlotElement) def.plotElements.get(2);
for(int i=1; i < 100; i++) {
Assert.assertEquals("base2 value failed", 1.0, base2.getValues()[i], 0.0000001);
Assert.assertEquals("base3 value failed", 2.0, base3.getValues()[i], 0.0000001);
}
}
@Test
public void fail() throws IOException {
RrdGraphDef def = new RrdGraphDef();
def.setStartTime(1);
def.setEndTime(100);
def.datasource("base1", new Plottable() {
@Override
public double getValue(long timestamp) {
return (timestamp % 2 == 0) ? Double.NaN : 1;
}});
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage("You have to stack graph onto something (line or area)");
def.line("base1", Color.RED, null, 1.0f, true);
}
}