/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 * * http://www.apache.org/licenses/LICENSE-2.0 * * 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 org.apache.hadoop.hdfs.server.namenode.top.window; import org.junit.Assert; import org.junit.Test; public class TestRollingWindow { final int WINDOW_LEN = 60000; final int BUCKET_CNT = 10; final int BUCKET_LEN = WINDOW_LEN / BUCKET_CNT; @Test public void testBasics() { RollingWindow window = new RollingWindow(WINDOW_LEN, BUCKET_CNT); long time = 1; Assert.assertEquals("The initial sum of rolling window must be 0", 0, window.getSum(time)); time = WINDOW_LEN + BUCKET_LEN * 3 / 2; Assert.assertEquals("The initial sum of rolling window must be 0", 0, window.getSum(time)); window.incAt(time, 5); Assert.assertEquals( "The sum of rolling window does not reflect the recent update", 5, window.getSum(time)); time += BUCKET_LEN; window.incAt(time, 6); Assert.assertEquals( "The sum of rolling window does not reflect the recent update", 11, window.getSum(time)); time += WINDOW_LEN - BUCKET_LEN; Assert.assertEquals( "The sum of rolling window does not reflect rolling effect", 6, window.getSum(time)); time += BUCKET_LEN; Assert.assertEquals( "The sum of rolling window does not reflect rolling effect", 0, window.getSum(time)); } @Test public void testReorderedAccess() { RollingWindow window = new RollingWindow(WINDOW_LEN, BUCKET_CNT); long time = 2 * WINDOW_LEN + BUCKET_LEN * 3 / 2; window.incAt(time, 5); time++; Assert.assertEquals( "The sum of rolling window does not reflect the recent update", 5, window.getSum(time)); long reorderedTime = time - 2 * BUCKET_LEN; window.incAt(reorderedTime, 6); Assert.assertEquals( "The sum of rolling window does not reflect the reordered update", 11, window.getSum(time)); time = reorderedTime + WINDOW_LEN; Assert.assertEquals( "The sum of rolling window does not reflect rolling effect", 5, window.getSum(time)); } }