1/*2 * Licensed to the Apache Software Foundation (ASF) under one3 * or more contributor license agreements. See the NOTICE file4 * distributed with this work for additional information5 * regarding copyright ownership. The ASF licenses this file6 * to you under the Apache License, Version 2.0 (the7 * "License"); you may not use this file except in compliance8 * with the License. You may obtain a copy of the License at9 *10 * http://www.apache.org/licenses/LICENSE-2.011 *12 * Unless required by applicable law or agreed to in writing, software13 * distributed under the License is distributed on an "AS IS" BASIS,14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.15 * See the License for the specific language governing permissions and16 * limitations under the License.17 */1819package org.apache.giraph.utils;
2021import org.apache.hadoop.util.Progressable;
22import org.junit.Test;
2324import junit.framework.Assert;
2526import java.lang.reflect.Field;
27import java.lang.reflect.Modifier;
28import java.util.concurrent.Callable;
29import java.util.concurrent.ExecutorService;
30import java.util.concurrent.Executors;
31import java.util.concurrent.FutureTask;
3233/**34 * Test ProgressableUtils35 */36publicclassTestProgressableUtils {
37 @Test
38publicvoid testProgressableUtils() throws NoSuchFieldException,
39 IllegalAccessException {
40finalint sleepTime = 1800;
41finalint msecPeriod = 500;
42 ExecutorService executor = Executors.newFixedThreadPool(1);
43 executor.submit(new Runnable() {
44 @Override
45publicvoid run() {
46try {
47 Thread.sleep(sleepTime);
48 } catch (InterruptedException e) {
49thrownew IllegalStateException();
50 }
51 }
52 });
53 executor.shutdown();
54CountProgressable countProgressable = newCountProgressable();
55 ProgressableUtils.awaitExecutorTermination(executor, countProgressable,
56 msecPeriod);
57 Assert.assertTrue(countProgressable.counter >= sleepTime / msecPeriod);
58 Assert.assertTrue(
59 countProgressable.counter <= (sleepTime + msecPeriod) / msecPeriod);
60 }
6162privatestaticclassCountProgressableimplements Progressable {
63privateint counter = 0;
6465 @Override
66publicvoid progress() {
67 counter++;
68 }
69 }
70 }