public void testRolling() { MockedClock time = new MockedClock(); RollingNumberEvent type = RollingNumberEvent.THREAD_MAX_ACTIVE; RollingNumber counter = new RollingNumber(time, 20, 2); // iterate over 20 buckets on a queue sized for 2 for (int i = 0; i < 20; i++) { // first bucket counter.GetCurrentBucket(); try { time.Increment(counter.BucketSizeInMs); } catch (Exception) { // ignore } counter.GetValueOfLatestBucket(type); Assert.Equal(2, counter.GetValues(type).Count()); // System.out.println("Head: " + counter.buckets.state.get().head); // System.out.println("Tail: " + counter.buckets.state.get().tail); } }
public void testCumulativeCounterAfterRolling() { MockedClock time = new MockedClock(); RollingNumberEvent type = RollingNumberEvent.SUCCESS; RollingNumber counter = new RollingNumber(time, 20, 2); Assert.Equal(0, counter.GetCumulativeSum(type)); // iterate over 20 buckets on a queue sized for 2 for (int i = 0; i < 20; i++) { // first bucket counter.Increment(type); try { time.Increment(counter.BucketSizeInMs); } catch (Exception) { // ignore } counter.GetValueOfLatestBucket(type); Assert.Equal(2, counter.GetValues(type).Count()); } // cumulative count should be 20 (for the number of loops above) regardless of buckets rolling Assert.Equal(20, counter.GetCumulativeSum(type)); }
public void testUpdateMax2() { MockedClock time = new MockedClock(); RollingNumber counter = new RollingNumber(time, 200, 10); // increment counter.UpdateRollingMax(RollingNumberEvent.THREAD_MAX_ACTIVE, 10); counter.UpdateRollingMax(RollingNumberEvent.THREAD_MAX_ACTIVE, 30); counter.UpdateRollingMax(RollingNumberEvent.THREAD_MAX_ACTIVE, 20); // we should have 1 bucket var buckets = counter.GetBuckets().ToArray(); Assert.Equal(1, buckets.Length); // the count should be 30 Assert.Equal(30, counter.buckets.First().GetMaxUpdater(RollingNumberEvent.THREAD_MAX_ACTIVE)); Assert.Equal(30, counter.GetRollingMaxValue(RollingNumberEvent.THREAD_MAX_ACTIVE)); // sleep to get to a new bucket time.Increment(counter.BucketSizeInMs * 3); counter.UpdateRollingMax(RollingNumberEvent.THREAD_MAX_ACTIVE, 30); counter.UpdateRollingMax(RollingNumberEvent.THREAD_MAX_ACTIVE, 30); counter.UpdateRollingMax(RollingNumberEvent.THREAD_MAX_ACTIVE, 50); // we should have 2 buckets buckets = counter.GetBuckets().ToArray(); Assert.Equal(2, buckets.Length); // the count Assert.Equal(50, buckets.First().GetMaxUpdater(RollingNumberEvent.THREAD_MAX_ACTIVE)); Assert.Equal(50, counter.GetValueOfLatestBucket(RollingNumberEvent.THREAD_MAX_ACTIVE)); // values per bucket var values = counter.GetValues(RollingNumberEvent.THREAD_MAX_ACTIVE).ToArray(); Assert.Equal(30, values[1]); // oldest bucket Assert.Equal(50, values[0]); // latest bucket }