package com.github.triceo.splitlog;
import com.github.triceo.splitlog.api.*;
import org.assertj.core.api.Assertions;
import org.junit.Test;
public class ConsumerManagerTest extends DefaultFollowerBaseTest {
private static final String ID = "ID";
private static final MessageMeasure<Integer, LogWatch> MEASURE = new MessageMeasure<Integer, LogWatch>() {
@Override
public Integer initialValue() {
return 1;
}
@Override
public Integer update(final MessageMetric<Integer, LogWatch> metric, final Message evaluate,
final MessageDeliveryStatus status, final LogWatch source) {
final Integer value = metric.getValue();
return value + 2;
}
};
@Test(expected = IllegalArgumentException.class)
public void testDuplicateId() {
final MessageProducer<LogWatch> manager = new ConsumerManager<>(this.getLogWatch());
manager.startMeasuring(ConsumerManagerTest.MEASURE, ConsumerManagerTest.ID);
manager.startMeasuring(ConsumerManagerTest.MEASURE, ConsumerManagerTest.ID);
}
@Test(expected = IllegalArgumentException.class)
public void testNullId() {
new ConsumerManager<>(this.getLogWatch()).startMeasuring(ConsumerManagerTest.MEASURE, null);
}
@Test(expected = IllegalArgumentException.class)
public void testNullMeasure() {
new ConsumerManager<>(this.getLogWatch()).startMeasuring(null, ConsumerManagerTest.ID);
}
@Test
public void testProperRetrieval() {
final MessageProducer<LogWatch> manager = new ConsumerManager<>(this.getLogWatch());
Assertions.assertThat(manager.getMetric(ConsumerManagerTest.ID)).isNull();
final MessageMetric<Integer, LogWatch> metric = manager.startMeasuring(ConsumerManagerTest.MEASURE,
ConsumerManagerTest.ID);
Assertions.assertThat(manager.getMetric(ConsumerManagerTest.ID)).isSameAs(metric);
Assertions.assertThat(manager.getMetricId(metric)).isSameAs(ConsumerManagerTest.ID);
Assertions.assertThat(manager.stopMeasuring(ConsumerManagerTest.ID)).isTrue();
Assertions.assertThat(manager.stopMeasuring(metric)).isFalse();
Assertions.assertThat(manager.getMetric(ConsumerManagerTest.ID)).isNull();
Assertions.assertThat(manager.getMetricId(metric)).isNull();
}
@Test
public void testTermination() {
final ConsumerManager<LogWatch> manager = new ConsumerManager<>(this.getLogWatch());
Assertions.assertThat(manager.getMetric(ConsumerManagerTest.ID)).isNull();
// terminate by ID
MessageMetric<Integer, LogWatch> metric = manager.startMeasuring(ConsumerManagerTest.MEASURE,
ConsumerManagerTest.ID);
Assertions.assertThat(manager.stopMeasuring(ConsumerManagerTest.ID)).isTrue();
Assertions.assertThat(manager.stopMeasuring(metric)).isFalse();
Assertions.assertThat(manager.getMetric(ConsumerManagerTest.ID)).isNull();
Assertions.assertThat(manager.getMetricId(metric)).isNull();
// terminate by metric
metric = manager.startMeasuring(ConsumerManagerTest.MEASURE, ConsumerManagerTest.ID);
Assertions.assertThat(manager.stopMeasuring(metric)).isTrue();
Assertions.assertThat(manager.stopMeasuring(ConsumerManagerTest.ID)).isFalse();
Assertions.assertThat(manager.getMetric(ConsumerManagerTest.ID)).isNull();
Assertions.assertThat(manager.getMetricId(metric)).isNull();
// terminate all
metric = manager.startMeasuring(ConsumerManagerTest.MEASURE, ConsumerManagerTest.ID);
manager.stop();
Assertions.assertThat(manager.getMetric(ConsumerManagerTest.ID)).isNull();
Assertions.assertThat(manager.getMetricId(metric)).isNull();
}
}