/* * 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 gobblin.util.limiter; import org.testng.Assert; import org.testng.annotations.Test; import com.google.common.collect.Lists; public class MultiLimiterTest { @Test public void test() throws Exception { CountBasedLimiter countLimiter1 = new CountBasedLimiter(3); CountBasedLimiter countLimiter2 = new CountBasedLimiter(1); MultiLimiter multiLimiter = new MultiLimiter(countLimiter1, countLimiter2); // Can only take 1 permit (limiter2 has only 1 permit available) Assert.assertNotNull(multiLimiter.acquirePermits(1)); Assert.assertNull(multiLimiter.acquirePermits(1)); // limiter1 has 1 leftover permit (one consumed in the failed second permit above) Assert.assertNotNull(countLimiter1.acquirePermits(1)); Assert.assertNull(countLimiter1.acquirePermits(1)); // limiter2 has not leftover permits Assert.assertNull(countLimiter2.acquirePermits(1)); } public void testConstructor() throws Exception { CountBasedLimiter countLimiter1 = new CountBasedLimiter(3); CountBasedLimiter countLimiter2 = new CountBasedLimiter(3); CountBasedLimiter countLimiter3 = new CountBasedLimiter(3); NoopLimiter noopLimiter = new NoopLimiter(); MultiLimiter multiLimiter1 = new MultiLimiter(countLimiter1, countLimiter2); Assert.assertEquals(multiLimiter1.getUnderlyingLimiters(), Lists.newArrayList(countLimiter1, countLimiter2)); // Noop limiters get filtered MultiLimiter multiLimiter2 = new MultiLimiter(countLimiter1, noopLimiter); Assert.assertEquals(multiLimiter2.getUnderlyingLimiters(), Lists.newArrayList(countLimiter1)); // multilimiters get expanded MultiLimiter multiLimiter3 = new MultiLimiter(multiLimiter1, countLimiter3); Assert.assertEquals(multiLimiter3.getUnderlyingLimiters(), Lists.newArrayList(countLimiter1, countLimiter2, countLimiter3)); // deduplication MultiLimiter multiLimiter4 = new MultiLimiter(countLimiter1, countLimiter1); Assert.assertEquals(multiLimiter4.getUnderlyingLimiters(), Lists.newArrayList(countLimiter1)); // deduplication on expanded multilimiters MultiLimiter multiLimiter5 = new MultiLimiter(multiLimiter1, countLimiter1); Assert.assertEquals(multiLimiter5.getUnderlyingLimiters(), Lists.newArrayList(countLimiter1, countLimiter2)); } }