stefanbirkner / system-rules

A collection of JUnit rules for testing code which uses java.lang.System.
http://stefanbirkner.github.io/system-rules
Other
546 stars 71 forks source link

ExpectedSystemExit doesn't work in multi-threading environment #44

Open akryvtsun opened 8 years ago

akryvtsun commented 8 years ago

In integration testing if a test is executed on the one thread but System.exit(...) is called on another ExpectedSystemExit work unstable. If the test is finished faster then another thread calls System.exit(...) then current ExpectedSystemExit implementation fails the test.

The solution is to delay the test thread till System.exit(...) is called or time out time is finished. It's possible to use java.util.concurrent.CountDownLatch for this but I couldn't find ability to do the latch count down somewhere in NoExitSecurityManager.

P.S. if ExpectedSystemExit work as a Rule in multi-threading environment isn't break any JUnit conventions I can prepare pull request for the fix.

akryvtsun commented 8 years ago

@stefanbirkner FYI: I've implemented needed functionality in my code using your ProvideSecurityManager and my custom thread-friendly analog of your internal NoExitSecurityManager class.

stefanbirkner commented 8 years ago

Could you provide a pull request that fixes the issue? That would be very helpful.

akryvtsun commented 8 years ago

@stefanbirkner thank you for interest. I'll provide PR.

akryvtsun commented 8 years ago

@stefanbirkner pls, review provided PR with the fix https://github.com/stefanbirkner/system-rules/pull/46 All tests are green but some firebug check was failed and I can't clearly understand what exactly.

stefanbirkner commented 8 years ago

Thanks for the pull request. I cannot review it the next two weeks, but I review it afterwards.

akryvtsun commented 8 years ago

@stefanbirkner NP. let me know if you will have some notes, remarks etc.