[ https://issues.apache.org/jira/browse/HBASE-4712?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13161470#comment-13161470 ]
Jesse Yates commented on HBASE-4712: ------------------------------------ bq. As most as possible, tests should use the default settings for the cluster. When they don't, they should document it. This will allow to share the cluster later. It would be cool if we could actually do that with the annotation. For instance: @LargeTest(modifications=false) would be a large test that hasn't made modifications to the minicluster. Makes it really easy to parallelize in the same jvm later. Another component I could see needing for the same jvm minicluster is a getUniqueTable() method. But lets put that off until we actually get there :) > Document rules for writing tests > -------------------------------- > > Key: HBASE-4712 > URL: https://issues.apache.org/jira/browse/HBASE-4712 > Project: HBase > Issue Type: Task > Components: test > Affects Versions: 0.92.0 > Reporter: nkeywal > Assignee: nkeywal > Priority: Minor > > We saw that some tests could be improved. Documenting the general rules could > help. > Proposal: > HBase tests are divided in three categories: small, medium and large, with > corresponding JUnit categories: SmallTest, MediumTest, LargeTest > Small tests are executed in parallel in a shared JVM. They must last less > than 15 seconds. They must NOT use a cluster. > Medium tests are executed in separate JVM. They must last less than 50 > seconds. They can use a cluster. They must not fail occasionally. > Small and medium tests must not need more than 30 minutes to run altogether. > Small and medium tests should be executed by the developers before submitting > a patch. > Large tests are everything else. They are typically integration tests, > non-regression tests for specific bugs, timeout tests, performance tests. > Tests rules & hints are: > - As most as possible, tests should be written as small tests. > - All tests should be written to support parallel execution on the same > machine, hence should not use shared resources as fixed ports or fixed file > names. > - All tests should be written to be as fast as possible. > - Tests should not overlog. More than 100 lines/second makes the logs complex > to read and use i/o that are hence not available for the other tests. > - Tests can be written with HBaseTestingUtility . This class offers helper > function to create a temp directory and do the cleanup, or to start a cluster. > - Sleeps: > - Tests should not do a 'Thread.sleep' without testing an ending > condition. This allows understanding what the test is waiting for. Moreover, > the test will work whatever the machine performances. > - Sleep should be minimal to be as fast as possible. Waiting for a > variable should be done in a 40ms sleep loop. Waiting for a socket operation > should be done in a 200 ms sleep loop. > - Tests using cluster: > - Tests using a HRegion do not have to start a cluster: A region can use > the local file system. > - Start/stopping a cluster cost around 10 seconds. They should not be > started per test method but per class. > - Started cluster must be shutdown using > HBaseTestingUtility#shutdownMiniCluster, which cleans the directories. > - As most as possible, tests should use the default settings for the > cluster. When they don't, they should document it. This will allow to share > the cluster later. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira