package io.pcp.parfait.timing;
import junit.framework.TestCase;
public class MetricMeasurementTest extends TestCase {
public void testCannotStartTwice() {
MetricMeasurement timing = new MetricMeasurement(StandardThreadMetrics.CLOCK_TIME, Thread
.currentThread());
timing.startTimer();
try {
timing.startTimer();
fail();
} catch (IllegalStateException e) {
// Expected
}
}
public void testCannotPauseBeforeStarted() {
MetricMeasurement timing = new MetricMeasurement(StandardThreadMetrics.CLOCK_TIME, Thread
.currentThread());
try {
timing.pauseOwnTime();
fail();
} catch (IllegalStateException e) {
// Expected
}
}
public void testCannotResumeBeforeStarted() {
MetricMeasurement timing = new MetricMeasurement(StandardThreadMetrics.CLOCK_TIME, Thread
.currentThread());
try {
timing.resumeOwnTime();
fail();
} catch (IllegalStateException e) {
// Expected
}
}
public void testCannotStopBeforeStarted() {
MetricMeasurement timing = new MetricMeasurement(StandardThreadMetrics.CLOCK_TIME, Thread
.currentThread());
try {
timing.stopTimer();
fail();
} catch (IllegalStateException e) {
// Expected
}
}
public void testCannotPauseWhenPaused() {
MetricMeasurement timing = new MetricMeasurement(StandardThreadMetrics.CLOCK_TIME, Thread
.currentThread());
timing.startTimer();
timing.pauseOwnTime();
try {
timing.pauseOwnTime();
fail();
} catch (IllegalStateException e) {
// Expected
}
}
public void testCannotPauseAfterStop() {
MetricMeasurement timing = new MetricMeasurement(StandardThreadMetrics.CLOCK_TIME, Thread
.currentThread());
timing.startTimer();
timing.stopTimer();
try {
timing.pauseOwnTime();
fail();
} catch (IllegalStateException e) {
// Expected
}
}
public void testCannotResumeIfNotPaused() {
MetricMeasurement timing = new MetricMeasurement(StandardThreadMetrics.CLOCK_TIME, Thread
.currentThread());
timing.startTimer();
try {
timing.resumeOwnTime();
fail();
} catch (IllegalStateException e) {
// Expected
}
}
public void testCannotResumeAfterStop() {
MetricMeasurement timing = new MetricMeasurement(StandardThreadMetrics.CLOCK_TIME, Thread
.currentThread());
timing.startTimer();
timing.stopTimer();
try {
timing.resumeOwnTime();
fail();
} catch (IllegalStateException e) {
// Expected
}
}
public void testCannotStopUnlessStarted() {
MetricMeasurement timing = new MetricMeasurement(StandardThreadMetrics.CLOCK_TIME, Thread
.currentThread());
try {
timing.stopTimer();
fail();
} catch (IllegalStateException e) {
// Expected
}
}
public void testCannotAccessTotalTimeUntilStopped() {
MetricMeasurement timing = new MetricMeasurement(StandardThreadMetrics.CLOCK_TIME, Thread
.currentThread());
timing.startTimer();
try {
timing.totalValue();
fail();
} catch (IllegalStateException e) {
// Expected
}
}
public void testCannotAccessOwnTimeUntilStopped() {
MetricMeasurement timing = new MetricMeasurement(StandardThreadMetrics.CLOCK_TIME, Thread
.currentThread());
timing.startTimer();
try {
timing.ownTimeValue();
fail();
} catch (IllegalStateException e) {
// Expected
}
}
public void testSanityOfNumbers() {
// This test is unlikely to ever pick anything up but we may as well sanity check that the
// numbers make sense (own time isn't > than total time)
MetricMeasurement timing = new MetricMeasurement(StandardThreadMetrics.CLOCK_TIME, Thread
.currentThread());
timing.startTimer();
timing.pauseOwnTime();
timing.resumeOwnTime();
timing.stopTimer();
assertTrue(timing.ownTimeValue().getValue().longValue() >= 0);
assertTrue(timing.totalValue().getValue().longValue() >= 0);
assertTrue(timing.ownTimeValue().getValue().longValue() <= timing.totalValue().getValue().longValue());
}
public void testMetricName() {
MetricMeasurement timing = new MetricMeasurement(StandardThreadMetrics.CLOCK_TIME, Thread
.currentThread());
assertEquals(StandardThreadMetrics.CLOCK_TIME.getMetricName(), timing.getMetricName());
}
public void testUnitDisplay() {
MetricMeasurement timing = new MetricMeasurement(StandardThreadMetrics.CLOCK_TIME, Thread
.currentThread());
timing.startTimer();
timing.stopTimer();
assertTrue("Metric value should end with correct unit name", timing.ownTimeValue().toString()
.endsWith(StandardThreadMetrics.CLOCK_TIME.getUnit().toString()));
}
}