From 401227ba6aeb3c7767e88d41a7fa2990b3717648 Mon Sep 17 00:00:00 2001 From: tedyu Date: Wed, 21 Feb 2018 12:03:32 -0800 Subject: [PATCH] HBASE-20031 Unable to run integration test using mvn due to missing HBaseClassTestRule --- .../org/apache/hadoop/hbase/HBaseClassTestRule.java | 4 ++++ .../apache/hadoop/hbase/HBaseClassTestRuleChecker.java | 10 ++++++++++ src/main/asciidoc/_chapters/developer.adoc | 3 ++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseClassTestRule.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseClassTestRule.java index a41e3837956..c3bef0f32b9 100644 --- a/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseClassTestRule.java +++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseClassTestRule.java @@ -19,6 +19,7 @@ package org.apache.hadoop.hbase; import java.util.concurrent.TimeUnit; +import org.apache.hadoop.hbase.testclassification.IntegrationTests; import org.apache.hadoop.hbase.testclassification.LargeTests; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.apache.hadoop.hbase.testclassification.SmallTests; @@ -63,6 +64,9 @@ public final class HBaseClassTestRule implements TestRule { // All tests have a 10minute timeout. return TimeUnit.MINUTES.toSeconds(13); } + if (c == IntegrationTests.class) { + return TimeUnit.MINUTES.toSeconds(Long.MAX_VALUE); + } } throw new IllegalArgumentException( clazz.getName() + " does not have SmallTests/MediumTests/LargeTests in @Category"); diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseClassTestRuleChecker.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseClassTestRuleChecker.java index 97c657fb9bb..c37490316bb 100644 --- a/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseClassTestRuleChecker.java +++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/HBaseClassTestRuleChecker.java @@ -22,8 +22,12 @@ import static org.junit.Assert.fail; import java.lang.reflect.Field; import java.lang.reflect.Modifier; +import java.util.concurrent.TimeUnit; + +import org.apache.hadoop.hbase.testclassification.IntegrationTests; import org.apache.yetus.audience.InterfaceAudience; import org.junit.ClassRule; +import org.junit.experimental.categories.Category; import org.junit.runner.Description; import org.junit.runner.notification.RunListener; import org.junit.runner.notification.RunListener.ThreadSafe; @@ -37,6 +41,12 @@ public class HBaseClassTestRuleChecker extends RunListener { @Override public void testStarted(Description description) throws Exception { + Category[] categories = description.getTestClass().getAnnotationsByType(Category.class); + for (Class c : categories[0].value()) { + if (c == IntegrationTests.class) { + return; + } + } for (Field field : description.getTestClass().getFields()) { if (Modifier.isStatic(field.getModifiers()) && field.getType() == HBaseClassTestRule.class && field.isAnnotationPresent(ClassRule.class)) { diff --git a/src/main/asciidoc/_chapters/developer.adoc b/src/main/asciidoc/_chapters/developer.adoc index 3dbfe743b27..c752cd73167 100644 --- a/src/main/asciidoc/_chapters/developer.adoc +++ b/src/main/asciidoc/_chapters/developer.adoc @@ -1014,7 +1014,7 @@ The first three categories, `small`, `medium`, and `large`, are for test cases w type `$ mvn test`. In other words, these three categorizations are for HBase unit tests. The `integration` category is not for unit tests, but for integration tests. -These are run when you invoke `$ mvn verify`. +These are normally run when you invoke `$ mvn verify`. Integration tests are described in <>. Keep reading to figure which annotation of the set `small`, `medium`, and `large` @@ -1041,6 +1041,7 @@ Large Tests (((LargeTests))):: Integration Tests (((IntegrationTests))):: _Integration_ tests are system level tests. See <> for more info. + If you invoke `$ mvn test` on integration tests, there is no timeout for the test. [[hbase.unittests.cmds]] === Running tests