blob: 039b1ff7015b60d2f50b5c87b3e83191f2a9e247 [file] [log] [blame]
Jonathan Hart233a18a2015-03-02 17:24:58 -08001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2015-present Open Networking Foundation
Jonathan Hart233a18a2015-03-02 17:24:58 -08003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onlab.util;
17
18import org.junit.After;
19import org.junit.Before;
20import org.junit.Test;
21
22import static junit.framework.TestCase.fail;
23import static org.junit.Assert.assertEquals;
24import static org.junit.Assert.assertTrue;
25
26/**
27 * Unit tests for the sliding window counter.
28 */
Jonathan Hart233a18a2015-03-02 17:24:58 -080029public class SlidingWindowCounterTest {
30
31 private SlidingWindowCounter counter;
32
33 @Before
34 public void setUp() {
35 counter = new SlidingWindowCounter(2);
36 }
37
38 @After
39 public void tearDown() {
40 counter.destroy();
41 }
42
43 @Test
44 public void testIncrementCount() {
45 assertEquals(0, counter.get(1));
46 assertEquals(0, counter.get(2));
47 counter.incrementCount();
48 assertEquals(1, counter.get(1));
49 assertEquals(1, counter.get(2));
50 counter.incrementCount(2);
51 assertEquals(3, counter.get(2));
52 }
53
54 @Test
55 public void testSlide() {
56 counter.incrementCount();
57 counter.advanceHead();
58 assertEquals(0, counter.get(1));
59 assertEquals(1, counter.get(2));
60 counter.incrementCount(2);
61 assertEquals(2, counter.get(1));
62 assertEquals(3, counter.get(2));
63 }
64
65 @Test
66 public void testWrap() {
67 counter.incrementCount();
68 counter.advanceHead();
69 counter.incrementCount(2);
70 counter.advanceHead();
71 assertEquals(0, counter.get(1));
72 assertEquals(2, counter.get(2));
73 counter.advanceHead();
74 assertEquals(0, counter.get(1));
75 assertEquals(0, counter.get(2));
76
77 }
78
79 @Test
Jordan Haltermandf4b08a2019-03-05 18:44:03 -080080 public void testRates() {
81 assertEquals(0, counter.getWindowRate(), 0.01);
82 assertEquals(0, counter.getOverallRate(), 0.01);
83 assertEquals(0, counter.getOverallCount());
84 counter.incrementCount();
85 assertEquals(1, counter.getWindowRate(), 0.01);
86 assertEquals(1, counter.getOverallRate(), 0.01);
87 assertEquals(1, counter.getOverallCount());
88 counter.advanceHead();
89 counter.incrementCount();
90 counter.incrementCount();
91 assertEquals(1.5, counter.getWindowRate(), 0.01);
92 assertEquals(2, counter.getWindowRate(1), 0.01);
93 assertEquals(1.5, counter.getOverallRate(), 0.01);
94 assertEquals(3, counter.getOverallCount());
95 counter.advanceHead();
96 counter.incrementCount();
97 counter.incrementCount();
98 counter.incrementCount();
99 assertEquals(2.5, counter.getWindowRate(), 0.01);
100 assertEquals(2, counter.getOverallRate(), 0.01);
101 assertEquals(6, counter.getOverallCount());
102 }
103
104 @Test
Jonathan Hart233a18a2015-03-02 17:24:58 -0800105 public void testCornerCases() {
106 try {
107 counter.get(3);
108 fail("Exception should have been thrown");
109 } catch (IllegalArgumentException e) {
110 assertTrue(true);
111 }
112
113 try {
114 new SlidingWindowCounter(0);
115 fail("Exception should have been thrown");
116 } catch (IllegalArgumentException e) {
117 assertTrue(true);
118 }
119
120 try {
121 new SlidingWindowCounter(-1);
122 fail("Exception should have been thrown");
123 } catch (IllegalArgumentException e) {
124 assertTrue(true);
125 }
126 }
127}