[ 
https://issues.apache.org/jira/browse/OOZIE-1114?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Robert Kanter updated OOZIE-1114:
---------------------------------

    Description: 
Some of the test classes keep a reference to the Services singleton as a class 
variable and then also re-create the Services in some of its test methods.  
This can cause it to not properly shut down all of the actual services, which 
can is causing (at least some of) the flakey test failures because some of 
those still running services interfere with some of the tests.  

The typical pattern where this issue is happening looks like this:
{code}
public class TestWhatever {
     private Services services1;

     setup() {
          services1 = new Services();
          services1.init();
     }

     testSomething() {
          Services.get().destroy();          // destroys services1's services
          Services services2 = new Services();     // services1 no longer 
points to the internal singleton
          services2.init();
     }

     tearDown() {
          services1.destroy();       // does not destroy the services started 
by services2, but does set the internal singleton to null so we've now lost the 
only remaining reference to those services
     }
{code}

You can see a concrete example of this by looking at 
TestStatusTransitService.testCoordStatusTransitServiceSuspendedWithError

In general, we should make sure to properly destroy the Services at the end of 
each test

  was:
Some of the test classes keep a reference to the Services singleton as a class 
variable and then also re-create the Services in some of its test methods.  
This can cause it to not properly shut down all of the actual services, which 
can is causing (at least some of) the flakey test failures because some of 
those still running services interfere with some of the tests.  

The typical pattern where this issue is happening looks like this:
{code}
public class TestWhatever {
     private Services services1;

     setup() {
          services1 = new Services();
          services1.init();
     }

     testSomething() {
          Services.get().destroy();          // destroys services1's services
          Services services2 = new Services();     // services1 no longer 
points to the internal singleton
          services2.init();
     }

     tearDown() {
          services1.destroy();       // does not destroy the services started 
by services2, but does set the internal singleton to null so we've now lost the 
only remaining reference to those services
     }
{code}

You can see a concrete example of this by looking at 
TestStatusTransitService.testCoordStatusTransitServiceSuspendedWithError

    
> Some tests don't use the Services singleton properly
> ----------------------------------------------------
>
>                 Key: OOZIE-1114
>                 URL: https://issues.apache.org/jira/browse/OOZIE-1114
>             Project: Oozie
>          Issue Type: Bug
>    Affects Versions: trunk
>            Reporter: Robert Kanter
>            Assignee: Robert Kanter
>             Fix For: trunk
>
>
> Some of the test classes keep a reference to the Services singleton as a 
> class variable and then also re-create the Services in some of its test 
> methods.  This can cause it to not properly shut down all of the actual 
> services, which can is causing (at least some of) the flakey test failures 
> because some of those still running services interfere with some of the 
> tests.  
> The typical pattern where this issue is happening looks like this:
> {code}
> public class TestWhatever {
>      private Services services1;
>      setup() {
>           services1 = new Services();
>           services1.init();
>      }
>      testSomething() {
>           Services.get().destroy();          // destroys services1's services
>           Services services2 = new Services();     // services1 no longer 
> points to the internal singleton
>           services2.init();
>      }
>      tearDown() {
>           services1.destroy();       // does not destroy the services started 
> by services2, but does set the internal singleton to null so we've now lost 
> the only remaining reference to those services
>      }
> {code}
> You can see a concrete example of this by looking at 
> TestStatusTransitService.testCoordStatusTransitServiceSuspendedWithError
> In general, we should make sure to properly destroy the Services at the end 
> of each test

--
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

Reply via email to