nkeywal created HBASE-6884:
------------------------------

             Summary: Update documentation on unit tests
                 Key: HBASE-6884
                 URL: https://issues.apache.org/jira/browse/HBASE-6884
             Project: HBase
          Issue Type: Improvement
          Components: documentation
    Affects Versions: 0.96.0
            Reporter: nkeywal
            Priority: Minor
             Fix For: 0.96.0


Points to address:
- we don't have anymore JUnit rules in the tests
- we should document how to run the test faster.
- some stuff is not used (run only a category) and should be removed from the 
doc imho.

Below the proposal:

--

15.6.2. Unit Tests

HBase unit tests are subdivided into three categories: small, medium and large, 
with corresponding JUnit categories: SmallTests, MediumTests, LargeTests. JUnit 
categories are denoted using java annotations and look like this in your unit 
test code.

...
@Category(SmallTests.class)
public class TestHRegionInfo {

  @Test
  public void testCreateHRegionInfoName() throws Exception {
    // ...
  }
}

The above example shows how to mark a test as belonging to the small category. 
HBase uses a patched maven surefire plugin and maven profiles to implement its 
unit test characterizations. 



15.6.2.4. Running tests

Below we describe how to run the HBase junit categories.
15.6.2.4.1. Default: small and medium category tests

Running

mvn test

will execute all small tests in a single JVM (no fork) and then medium tests in 
a separate JVM for each test instance. Medium tests are NOT executed if there 
is an error in a small test. Large tests are NOT executed. There is one report 
for small tests, and one report for medium tests if they are executed.
15.6.2.4.2. Running all tests

Running

mvn test -P runAllTests

will execute small tests in a single JVM then medium and large tests in a 
separate JVM for each test. Medium and large tests are NOT executed if there is 
an error in a small test. Large tests are NOT executed if there is an error in 
a small or medium test. There is one report for small tests, and one report for 
medium and large tests if they are executed

15.6.2.4.3. Running a single test or all tests in a package

To run an individual test, e.g. MyTest, do

mvn test -P localTests -Dtest=MyTest

You can also pass multiple, individual tests as a comma-delimited list:

mvn test -P localTests -Dtest=MyTest1,MyTest2,MyTest3

You can also pass a package, which will run all tests under the package:

mvn test -P localTests -Dtest=org.apache.hadoop.hbase.client.*

The -P localTests will remove the JUnit category effect (without this specific 
profile, the categories are taken into account). Each junit tests is executed 
in a separate JVM (A fork per test class). There is no parallelization when 
localTests profile is set. You will see a new message at the end of the report: 
"[INFO] Tests are skipped". It's harmless.

15.6.2.4.4. Running test faster
[replace previous chapter]

By default, mvn test -P runAllTests runs 5 tests in parallel. It can be 
increased for many developper machine. Consider that you can have 2 tests in 
parallel per core, and you need about 2Gb of memory per test. Hence, if you 
have a 8 cores and 24Gb box, you can have 16 tests in parallel.

The setting is:
mvn test -P runAllTests -Dsurefire.secondPartThreadCount=12

To increase the speed, you can as well use a ramdisk. You will need 2Gb of 
memory to run all the test. You will also need to delete the files between two 
test run.
The typical way to configure a ramdisk on Linux is:

sudo mkdir /ram2G
sudo mount -t tmpfs -o size=2048M tmpfs /ram2G

You can then use it to run all HBase tests with the command:

mvn test -P runAllTests -Dsurefire.secondPartThreadCount=8 
-Dtest.build.data.basedirectory=/ram2G


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to