So reading around junit docs (https://github.com/junit-team/junit4/wiki/timeout-for-tests), looks like the reason is result of these two rules:
- @Test(timeout=X) applies only on the test function, and not on whole test fixture (@After, @Before, etc)
- Timeout rule applies on whole test fixture
TestRegionServerReportForDuty just has @Test(timeout=180000) and no Timeout rule unlike we have in so many other tests.
The test method, in the logs I have, runs in less then 60 sec. So it meets the timeout specified in @Test annotation.
However, we get stuck in tearDown, and since there is no Timeout rule, it keeps on running until surefire kills the JVM after forkedProcessTimeoutInSeconds (set to 900 sec).
Let use the "Timeout" rule instead of @Test(timeout=180000).
However, note that this won't solve the root cause of hangup. It'll just make the test fail neatly rather than getting stuck and requiring surefire plugin to kill the forked JVMs (see