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