/**
* Copyright 2013 Netflix, Inc.
* <p/>
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.netflix.servo.monitor;
import com.netflix.servo.annotations.DataSourceType;
import com.netflix.servo.tag.Tag;
import com.netflix.servo.util.ManualClock;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
public class PeakRateCounterTest extends AbstractMonitorTest<PeakRateCounter> {
final ManualClock clock = new ManualClock(0);
@Override
public PeakRateCounter newInstance(String name) {
return new PeakRateCounter(MonitorConfig.builder(name).build(), clock);
}
@Test
public void testIncrement() throws Exception {
PeakRateCounter c = newInstance("foo");
assertEquals(c.getValue().longValue(), 0L);
for (int i = 0; i < 5; i++) {
clock.set(i * 1000L);
c.increment();
}
assertEquals(c.getValue().longValue(), 1L,
"Delta of 5 in 5 seconds, e.g. peak rate = average, 1 per second");
for (int i = 0; i < 5; i++) {
clock.set((5 + i) * 1000L);
c.increment(3);
}
assertEquals(c.getValue().longValue(), 3L,
"Delta of 15 in 5 seconds, e.g. peak rate = average, 3 per second");
clock.set(10 * 1000L);
c.increment(10);
for (int i = 0; i < 3; i++) {
clock.set((11 + i) * 1000L);
c.increment(3);
}
c.increment();
assertEquals(c.getValue().longValue(), 10L,
"Delta of 15 in 5 seconds, e.g. peak rate = 10, average = 3, min = 1 per second");
clock.set(19 * 1000L);
assertEquals(c.getValue().longValue(), 10L,
"Delta of 0 in 5 seconds, e.g. peak rate = previous max, 10 per second");
}
@Test
public void testHasRightType() throws Exception {
Tag type = newInstance("foo").getConfig().getTags().getTag(DataSourceType.KEY);
assertEquals(type.getValue(), "GAUGE");
}
@Test
public void testEqualsAndHashCodeName() throws Exception {
PeakRateCounter c1 = newInstance("1234567890");
PeakRateCounter c2 = newInstance("1234567890");
assertEquals(c1, c2);
assertEquals(c1.hashCode(), c2.hashCode());
c2 = c1;
assertEquals(c2, c1);
}
}