While investigating a flakey test (org.apache.oozie.sla.TestSLAJobEventListener.testOnJobEvent) I realized that some of the flakey SLA tests that I've seen lately are the same issue: The database has some leftover stuff from a previous test that its not expecting.
Normally this is easy to fix because we can simply call cleanUpDBTables(). However, cleanUpDBTables requires some of the Services to be running, so you have to call it after starting Services; but, some of the failures were occurring during Services initialization (specifically when SLAService initializes the SLACalculatorMemory, which tries to load some data from the database, which may be incomplete (e.g. SLA registration for a job that doesn't exist)). So, in this case, we can't call cleanUpDBTables() before or after starting Services.
This brings the larger issue that we should be cleaning up the database before every test anyway to make sure that the tests are truly independent and to prevent harmful leaking (just like we did a while back with the Services). I think we should have XTestCase.setup() call cleanUpDBTables() so that every test automatically it (and handle the Services dependency appropriately).