+1 to Kirk's comments. Also, regarding (c), using AssumeThat [1] (or, alternatively & IMO preferrably, [2]) might provide some temporary relief.
[1] https://junit.org/junit4/javadoc/latest/org/junit/Assume.html [2] https://joel-costigliola.github.io/assertj/core-8/api/org/assertj/core/api/Assumptions.html On Thu, Jan 2, 2020 at 11:46 AM Kirk Lund <kl...@apache.org> wrote: > The Geode code base has 328 tests across 145 files with @Ignore. The vast > majority of these were disabled pre-Geode because the previous group's > policy was to disable any test that failed in CI, then file a bug system > ticket, fix it, and re-enable it. However, the process never followed > through beyond disabling the test and filing a ticket. Since that was the > old pre-Apache bug system, most of us don't have access to it. > > From a Pivotal point-of-view, it's possible that every Geode commit that > passes precheckin but then breaks a Pivotal Hydra test could have been > caught by one of those disabled tests. So we are probably already > experiencing pain and paying the price for not re-enabling these tests (in > at least some cases). > > @Ignore was introduced in JUnit 4, but most of these tests were JUnit 3 > style. After I upgraded us to JUnit 4, I found every JUnit 3 style of test > that had been disabled by renaming the test, fixed the name of the test, > and added @Test plus @Ignore so that we can at least be aware of how many > tests are disabled and actively search for them. I tried to add include a > comment in the annotation if I could figure out why it was disabled. Some > of these comments are things like (a) TRAC ticket # if known, (b) not yet > implemented, (c) skip test for this configuration, (d) not yet implemented > for partitioned region, etc. Sometimes I just reused a java comment that > the disabler left above the disabled test. > > More info on some of those @Ignore comments: > > (b) not yet implemented -- this means probably means the test was never > finished and should just be deleted but it might also be another example of > (c) or (d) in certain test classes > > (c) skip test for this configuration -- this is a class that extends > another test class but one or more test methods are overridden with @Ignore > to prevent the test from running in the subclass because it's invalid for > that configuration -- we can't just delete these, we have to remove > class-hierarchy (stop extending test classes!) which will result in some > redundancy between two test classes > > I do not think we should blindly delete them all, and I think we need to > spend time studying each one individually to determine what the state of > the test is and what should be done for it. So even if many in our > community want to just delete all tests with @Ignore, that's not going to > work in at least half of the test classes. You'll have to tease apart > sub-classes from super-classes. > > Plus you won't actually know that the test has other coverage unless you > spend the time analyzing it, which is what I think we should do. > > Some quick examples: > > *1) ClientServerTimeSyncDUnitTest* > > Notes: this test class has only two tests and both are @Ignored, so maybe > deleting them isn't the best answer. > > testClientTimeAdvances is marked with @Ignore("Bug 52327"). #52327 is > "ClientServerTimeSyncDUnitTest.testClientTimeAdvances fails intermittently" > > testClientTimeSlowsDown is marked with @Ignore("not yet implemented") which > either means the test was never finished or the functionality it's trying > to test was never finished in the product code. It looks like the test > never had any assertions. > > Personally, I don't think I'd want to delete either of these tests. I would > prefer to fix them up. > > If we really care about Apache Geode, our test coverage, and the quality of > the product, then I think we should separate super-sub classes that force > us to disable test in sub-class that are invalid test cases and fix analyze > each test on a case-by-case basis to determine what should be done. And I > believe that the default approach for each test should be to fix it rather > than delete it. > > *2) DistributedAckPersistentRegionCCEDUnitTest* > > > geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedAckPersistentRegionCCEDUnitTest.java:41: > @Ignore("Skip test for this configuration") > > geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedAckPersistentRegionCCEDUnitTest.java:46: > @Ignore("Skip test for this configuration") > > geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedAckPersistentRegionCCEDUnitTest.java:51: > @Ignore("Skip test for this configuration") > > geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedAckRegionCCEDUnitTest.java:110: > @Ignore("replicates don't allow local destroy") > > geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedAckRegionCCEDUnitTest.java:117: > @Ignore("replicates don't allow local destroy") > > geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedAckRegionCCEDUnitTest.java:294: > @Ignore("Enable after fix for bug GEODE-1891 was #45704") > > Here you see 3 test methods with "Skip test for this configuration". If you > delete these from the sub-class, it'll run these three tests and probably > blow up because it's an invalid configuration. To fix this we'll have to > NOT extend the super-classes and start inlining super-classes and deleting > what's not needed. > > Next are 2 test methods with "replicates don't allow local destroy" -- > sounds like the same thing as "Skip test for this configuration" to me. > > Last one is "Enable after fix for bug GEODE-1891 was #45704". This > represents product functionality that doesn't work how we want it to AND we > have a test that demonstrates it. Seems a shame to delete this test. If a > developer ever tries to fix GEODE-1891, they'll want this test. I suppose > you could copy-paste the test into the comments or attachments of > GEODE-1891 and delete it from code. > > *3) GlobalRegionCCEDUnitTest* > > > geode-core/src/distributedTest/java/org/apache/geode/cache30/GlobalRegionCCEDUnitTest.java:101: > @Ignore("replicates don't allow local destroy") > > geode-core/src/distributedTest/java/org/apache/geode/cache30/GlobalRegionCCEDUnitTest.java:108: > @Ignore("replicates don't allow local destroy") > > geode-core/src/distributedTest/java/org/apache/geode/cache30/GlobalRegionCCEDUnitTest.java:137: > @Ignore("TODO: takes too long with global regions and cause false dunit > hangs") > > geode-core/src/distributedTest/java/org/apache/geode/cache30/GlobalRegionCCEDUnitTest.java:143: > @Ignore("TODO: takes too long with global regions and cause false dunit > hangs") > > geode-core/src/distributedTest/java/org/apache/geode/cache30/GlobalRegionCCEDUnitTest.java:149: > @Ignore("TODO: takes too long with global regions and cause false dunit > hangs") > > geode-core/src/distributedTest/java/org/apache/geode/cache30/GlobalRegionCCEDUnitTest.java:221: > @Ignore("Disabling due to bug #52347") > > geode-core/src/distributedTest/java/org/apache/geode/cache30/GlobalRegionCCEDUnitTest.java:231: > @Ignore("TODO: reenable this test") > > Again we have sub-class overriding and ignoring tests that are invalid with > "replicates don't allow local destroy". Next we have "TODO: takes too long > with global regions". Apparently someone a long time ago decided these 3 > tests take too long and disabled them. Sure seems like we should re-enable > them to me! If they take too long, then look for sleeps. If GLOBAL takes > too long but any users still use it too bad. If GLOBAL takes too long but > NO users still use, then we deprecate GLOBAL, release Geode 2.0 and delete > it! > > #52347 is "testConcurrentEventsOnEmptyRegion fails intermittently in CI". > We could look into who filed #52347 and assign fixing the flakiness in this > test method to that developer. > > "TODO: reenable this test" -- I guess we should reenable this test and see > how flaky it is?! After all that's what it says to do. > > I quick glance over all of the results of $ git grep "@Ignore" shows that > the above is pretty much the sort of things we're looking at. > > I'm 100% against deleting them. If everyone else wants to delete them, then > I propose reassigning me to do nothing but fix ALL @Ignored tests and I'll > jump on it. > > And just to be very clear: > > -1 to all proposals to delete all tests with @Ignore (I can't think of any > argument to change me to -0) > > -Kirk > > On Tue, Dec 31, 2019 at 2:08 PM Alexander Murmann <amurm...@apache.org> > wrote: > > > Here are a few things that are true for me or I believe are true in > > general: > > > > - Our test suite is more flaky than we'd like it to be > > - I don't believe that adding more Unit tests that follow existing > > patterns buys us that much. I'd rather see something similar to what > > some > > folks are doing with Membership right now where we isolate the code > and > > test it more systematically > > - We have other testing gaps: We have benchmarks 👏🎉, but we are > still > > lacking coverage in that ares; our community is still lacking HA > tests. > > I'd > > rather fill those than bring back old DUnit tests that are chosen > > somewhat > > at random. > > - I'd rather be deliberate about what tests we introduce than > wholesale > > bring back a set of tests, since any of these re-introduced tests has > a > > potential to be flaky. Let's make sure our tests carry their weight. > > - If we delete these tests, we can always go back to a SHA from today > > and bring them back at a later date > > - These tests have been ignored since a very long time and we've > shipped > > without them and nobody has missed them enough to bring them back. > > > > Given all the above, my vote is for less noise in our code, which means > > deleting all ignored tests. If we want to keep them, I'd love to hear a > > plan of action on how we bring them back. Having a bunch of dead code > helps > > nobody. > > > > On Tue, Dec 31, 2019 at 1:50 PM Mark Hanson <mhan...@pivotal.io> wrote: > > > > > Hi All, > > > > > > As part of what I am doing to fix flaky tests, I periodically come > across > > > tests that are @Ignore’d. I am curious what we would like to do with > them > > > generally speaking. We could fix them, which would seem obvious, but we > > are > > > struggling to fix flaky tests as it is. We could delete them, but > those > > > tests were written for a reason (I hope). Or we could leave them. This > > > pollutes searches etc as inactive code requiring upkeep at least. > > > > > > I don’t have an easy answer. Some have suggested deleting them. I tend > to > > > lean that direction, but I thought I would consult the community for a > > > broader perspective. > > > > > > Thanks, > > > Mark > > > -- -John Spring Data Team