package net.i2p.stat; import java.util.Properties; import org.junit.Test; import junit.framework.TestCase; public class RateStatTest extends TestCase { @Test public void testNoRates() throws Exception { final long emptyArray[] = new long[0]; try { new RateStat("test", "test RateStat getters etc", "tests", emptyArray); fail("created a rate stat with no periods"); } catch (IllegalArgumentException expected){} } @Test public void testGettersEtc() throws Exception{ final long periods[] = new long[]{10}; RateStat rs = new RateStat("test", "test RateStat getters etc", "tests", periods); // Test basic getters assertEquals("test", rs.getName()); assertEquals("tests", rs.getGroupName()); assertEquals("test RateStat getters etc", rs.getDescription()); // There should be no data, so other getters should return defaults assertEquals(0.0, rs.getLifetimeAverageValue()); assertEquals(0, rs.getLifetimeEventCount()); assertNull(rs.getRate(2000)); } @SuppressWarnings("deprecation") @Test public void testAddingAndRemovingThrows() throws Exception { final long periods[] = new long[]{10}; RateStat rs = new RateStat("test", "test RateStat getters etc", "tests", periods); try { rs.addRate(1000); fail("adding periods should not be supported"); } catch (UnsupportedOperationException expected){} try { rs.removeRate(10); fail("removing periods should not be supported"); } catch (UnsupportedOperationException expected){} } @Test public void testRateStat() throws Exception{ RateStat rs = new RateStat("moo", "moo moo moo", "cow trueisms", new long[] { 60 * 1000, 60 * 60 * 1000, 24 * 60 * 60 * 1000}); for (int i = 0; i < 50; i++) { Thread.sleep(20); rs.addData(i * 100, 20); } rs.coalesceStats(); java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(2048); rs.store(baos, "rateStat.test"); byte data[] = baos.toByteArray(); Properties props = new Properties(); props.load(new java.io.ByteArrayInputStream(data)); RateStat loadedRs = new RateStat("moo", "moo moo moo", "cow trueisms", new long[] { 60 * 1000, 60 * 60 * 1000, 24 * 60 * 60 * 1000}); loadedRs.load(props, "rateStat.test", true); assertEquals(rs, loadedRs); } }