pleaseStop() can be called only inside Surefire. So your solution has to be embedded in Surefire and the feature has to configured. Unfortunately it's by design of JUnit. RunNotifier cannot be exposed because it must be only one instance and we need to instantiate it and have it under the control in Surefire. Therefore this feature has to be internal and implement a hook between RunListener and RunNotifier which already exists in Surefire. This is the support I was talking about in one of my previous emails.
T On Sat, Oct 5, 2019 at 5:57 PM Debraj Manna <[email protected]> wrote: > Enrico apache-bookeeper seems to be using timeout in @Test as I can see > from their github repo here > < > https://github.com/apache/bookkeeper/search?q=%40Test%28timeout+%3D&unscoped_q=%40Test%28timeout+%3D > > > . > > Tibor how can I pass an instance of RunNotifier to a class extending from > RunListener so that I can call pleaseStop() from the listener when the > timeout of a test expires? Is there any example code I can refer to? > > I am using Junit 4.12 and maven-surefire 2.22.2 > > On Sat, Oct 5, 2019 at 6:27 PM Tibor Digana <[email protected]> > wrote: > > > Some users may have a requirement to stop the exertion when a test hangs. > > Other users woul maybe prefer to interrupt the test and continue with > next > > test. > > This would lead to configuration with more than one config value => POJO > in > > new config parameter. > > > > On Sat, Oct 5, 2019 at 2:17 PM Debraj Manna <[email protected]> > > wrote: > > > > > Thanks again Enrico. I will try to find out from apache-bookmark code > or > > > check in apache-bookkeper mailing list. > > > > > > Yes Tibor I am looking for a global timeout without explicitly adding > the > > > timeout annotation in all of my tests / classes. I am not using > > forkCount > > > > 1. I get your testStarted part but it is still not clear to me about > > > calling 'pleaseStop() on the listener'. Are you suggesting to add this > in > > > each of my test classes? Can you explain this a bit more? > > > > > > On Fri, Oct 4, 2019 at 11:52 PM Tibor Digana <[email protected]> > > > wrote: > > > > > > > Hi Debraj, > > > > > > > > It depends on your requirements. > > > > > > > > As I initially understood your email, every test method wants to have > > > > implicit timeout value even without the annotation @Timeout. > > > > Then the testStarted is important event even your code will see when > > the > > > > test method has started and timeout can be easily computed. > > > > Of course you need to use an extra thread which checks the end > events. > > > > > > > > > > > > > > https://junit.org/junit4/javadoc/4.12/org/junit/runner/notification/RunListener.html#testStarted(org.junit.runner.Description) > > > > Your code can call the method "pleaseStop()" on the listener. I think > > it > > > > would not be reliable algorithm in all use cases if you use forkCount > > > 1 > > > > and there you will need to have our support. > > > > > > > > Is it this what you need, the global timeout with the same value on > > every > > > > test method? > > > > > > > > Cheers > > > > Tibor > > > > > > > > On Fri, Oct 4, 2019 at 4:30 PM Debraj Manna < > [email protected]> > > > > wrote: > > > > > > > > > Enrico > > > > > > > > > > If I get the approach correctly then all my junit4 tests should > have > > > > > timeout specified (either via @Test or via @Rule) then only I can > use > > > the > > > > > listener. But the problem is we are having more than 2000 tests and > > > > > specifying a timeout in each of the tests/classes is cumbersome. > > > > > > > > > > Correct me if I have misunderstood anything. > > > > > > > > > > > > > > > > > > > > On Fri, Oct 4, 2019 at 3:18 PM Debraj Manna < > > [email protected]> > > > > > wrote: > > > > > > > > > > > Yeah sure ... thanks. > > > > > > > > > > > > On Thu, Oct 3, 2019 at 7:50 PM Tibor Digana < > > [email protected]> > > > > > > wrote: > > > > > > > > > > > >> Hi Debraj, > > > > > >> > > > > > >> There is nice technical idea from Enrico. > > > > > >> If you apply it and you are convinced that it would work > properly > > > for > > > > > all > > > > > >> the Java community, feel free to show it and we can discuss it > on > > > how > > > > we > > > > > >> would adopt your solution in Surefire project. > > > > > >> > > > > > >> Cheers > > > > > >> Tibor17 > > > > > >> > > > > > >> On Thu, Oct 3, 2019 at 2:49 PM Debraj Manna < > > > [email protected] > > > > > > > > > > >> wrote: > > > > > >> > > > > > >> > Sometimes I have maven surefire tests that get hung, due to > > either > > > > > >> races or > > > > > >> > deadlocks. > > > > > >> > > > > > > >> > When this happens I have to discover what slave is being used, > > and > > > > > then > > > > > >> I > > > > > >> > have to log on that slave, sudo to jenkins account and execute > > > > either > > > > > >> > jstack or kill -3 > > > > > >> > > > > > > >> > I am looking for a simple solution like doing jstack / kill -3 > > > when > > > > > >> someone > > > > > >> > presses abort button on the jenkins. > > > > > >> > > > > > > >> > Can someone suggest how can I automate this or some better way > > of > > > > > >> handling > > > > > >> > this? > > > > > >> > > > > > > >> > > > > > > > > > > > > > > > > > > > > >
