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 Builder builder() {
53 return new CategoryBasedTimeout.Builder();
54 }
55
56 public static class Builder extends Timeout.Builder {
57 public Timeout.Builder withTimeout(Class<?> clazz) {
58 Annotation annotation = clazz.getAnnotation(Category.class);
59 if (annotation != null) {
60 Category category = (Category)annotation;
61 for (Class<?> c: category.value()) {
62 if (c == SmallTests.class) {
63
64 return withTimeout(30, TimeUnit.SECONDS);
65 } else if (c == MediumTests.class) {
66
67 return withTimeout(180, TimeUnit.SECONDS);
68 } else if (c == LargeTests.class) {
69
70 return withTimeout(10, TimeUnit.MINUTES);
71 }
72 }
73 }
74 return this;
75 }
76 }
77 }