package org.rrd4j.core; import static org.rrd4j.ConsolFun.AVERAGE; import static org.rrd4j.DsType.GAUGE; import java.io.IOException; import java.util.HashSet; import java.util.Set; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; public class BigStringsTest { @Rule public TemporaryFolder testFolder = new TemporaryFolder(); @Test public void testBackend() throws IOException { RrdMemoryBackend backend = new RrdMemoryBackend(""); char c = '\ue001'; Assert.assertTrue(c >= '\ue000' && c <= '\uf8ff'); StringBuffer builder = new StringBuffer(); backend.setLength(6400 * 6400 + 10); int pos = 0; String previous = null; for (int i = 0 ; i < 80 ; i++) { previous = builder.toString(); builder.append(i % 10); backend.writeString(pos, builder.toString()); Assert.assertEquals("Not read String", builder.toString(), backend.readString(pos)); if (!previous.isEmpty()) { Assert.assertEquals("Not read String", previous, backend.readString(pos - RrdPrimitive.STRING_LENGTH * 2)); } pos += RrdPrimitive.STRING_LENGTH * 2; } } @Test public void testBigRrd() throws IOException { String[] dsNames = new String[]{"012345678901234567890123456789", "01234567890123456789", "0123456789012345678901234567890123456789"}; Set<String> dsNamesSet = new HashSet<>(dsNames.length); String rrdPath = testFolder.getRoot().getCanonicalPath() + "FILE.rrd"; RrdDef rrdDef = new RrdDef(rrdPath, 0, 300); rrdDef.setVersion(2); for (String dsName: dsNames) { rrdDef.addDatasource(dsName, GAUGE, 600, 0, Double.NaN); dsNamesSet.add(dsName); } rrdDef.addArchive(AVERAGE, 0.5, 1, 600); RrdDb rrdDb = new RrdDb(rrdDef); rrdDb.close(); rrdDb = new RrdDb(rrdPath); for(Datasource ds: rrdDb.getDatasources()) { Assert.assertTrue("Unexpected ds name: " + ds.getName(), dsNamesSet.contains(ds.getName())); } rrdDb.close(); } }