1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.giraph.utils;
20
21 import org.apache.hadoop.util.Progressable;
22 import org.junit.Test;
23
24 import junit.framework.Assert;
25
26 import java.lang.reflect.Field;
27 import java.lang.reflect.Modifier;
28 import java.util.concurrent.Callable;
29 import java.util.concurrent.ExecutorService;
30 import java.util.concurrent.Executors;
31 import java.util.concurrent.FutureTask;
32
33
34
35
36 public class TestProgressableUtils {
37 @Test
38 public void testProgressableUtils() throws NoSuchFieldException,
39 IllegalAccessException {
40 final int sleepTime = 1800;
41 final int msecPeriod = 500;
42 ExecutorService executor = Executors.newFixedThreadPool(1);
43 executor.submit(new Runnable() {
44 @Override
45 public void run() {
46 try {
47 Thread.sleep(sleepTime);
48 } catch (InterruptedException e) {
49 throw new IllegalStateException();
50 }
51 }
52 });
53 executor.shutdown();
54 CountProgressable countProgressable = new CountProgressable();
55 ProgressableUtils.awaitExecutorTermination(executor, countProgressable,
56 msecPeriod);
57 Assert.assertTrue(countProgressable.counter >= sleepTime / msecPeriod);
58 Assert.assertTrue(
59 countProgressable.counter <= (sleepTime + msecPeriod) / msecPeriod);
60 }
61
62 private static class CountProgressable implements Progressable {
63 private int counter = 0;
64
65 @Override
66 public void progress() {
67 counter++;
68 }
69 }
70 }