1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase;
19
20 import java.lang.annotation.Annotation;
21 import java.util.concurrent.TimeUnit;
22
23 import org.apache.hadoop.hbase.testclassification.LargeTests;
24 import org.apache.hadoop.hbase.testclassification.MediumTests;
25 import org.apache.hadoop.hbase.testclassification.SmallTests;
26 import org.junit.experimental.categories.Category;
27 import org.junit.internal.runners.statements.FailOnTimeout;
28 import org.junit.rules.TestRule;
29 import org.junit.rules.Timeout;
30 import org.junit.runner.Description;
31 import org.junit.runners.model.Statement;
32
33
34
35
36
37 public class CategoryBasedTimeout extends Timeout {
38
39 @Deprecated
40 public CategoryBasedTimeout(int millis) {
41 super(millis);
42 }
43
44 public CategoryBasedTimeout(long timeout, TimeUnit timeUnit) {
45 super(timeout, timeUnit);
46 }
47
48 protected CategoryBasedTimeout(Builder builder) {
49 super(builder);
50 }
51
52 public static Timeout forClass(Class<?> clazz) {
53 return CategoryBasedTimeout.builder().withTimeout(clazz).withLookingForStuckThread(true)
54 .build();
55 }
56
57 public static Builder builder() {
58 return new CategoryBasedTimeout.Builder();
59 }
60
61 public static class Builder extends Timeout.Builder {
62 public Timeout.Builder withTimeout(Class<?> clazz) {
63 Annotation annotation = clazz.getAnnotation(Category.class);
64 if (annotation != null) {
65 Category category = (Category)annotation;
66 for (Class<?> c: category.value()) {
67 if (c == SmallTests.class) {
68
69 return withTimeout(30, TimeUnit.SECONDS);
70 } else if (c == MediumTests.class) {
71
72 return withTimeout(180, TimeUnit.SECONDS);
73 } else if (c == LargeTests.class) {
74
75 return withTimeout(10, TimeUnit.MINUTES);
76 }
77 }
78 }
79 return this;
80 }
81 }
82 }