You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Dawid Weiss (Resolved) (JIRA)" <ji...@apache.org> on 2012/02/14 16:33:59 UTC

[jira] [Resolved] (LUCENE-3492) Extract a generic framework for running randomized tests.

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

Dawid Weiss resolved LUCENE-3492.
---------------------------------

       Resolution: Fixed
    Fix Version/s:     (was: 4.0)

I consider this issue done. I've pulled all the super-cool features from Lucene/Solr and put them into a separate, stand-alone and reusable project called randomizedtesting. We have switched our infrastructure at Carrot2 to use it and I'm very happy with it.

http://labs.carrotsearch.com/randomizedtesting.html

I will file another issue concerned with progressively moving from LuceneTestRunner/Case and tests infrastructure to RandomizedRunner (and siblings).
                
> Extract a generic framework for running randomized tests.
> ---------------------------------------------------------
>
>                 Key: LUCENE-3492
>                 URL: https://issues.apache.org/jira/browse/LUCENE-3492
>             Project: Lucene - Java
>          Issue Type: Improvement
>          Components: general/test
>            Reporter: Dawid Weiss
>            Assignee: Dawid Weiss
>            Priority: Minor
>         Attachments: Screen Shot 2011-10-06 at 12.58.02 PM.png
>
>
> {color:red}The work on this issue is temporarily at github{color} (lots of experiments and tweaking):
> https://github.com/carrotsearch/randomizedtesting
> Or directly: git clone git://github.com/carrotsearch/randomizedtesting.git
> {color}
> ----
> RandomizedRunner is a JUnit runner, so it is capable of running @Test-annotated test cases. It
> respects regular lifecycle hooks such as @Before, @After, @BeforeClass or @AfterClass, but it
> also adds the following:
> Randomized, but repeatable execution and infrastructure for dealing with randomness:
> - uses pseudo-randomness (so that a given run can be repeated if given the same starting seed)
>   for many things called "random" below,
> - randomly shuffles test methods to ensure they don't depend on each other,
> - randomly shuffles hooks (within a given class) to ensure they don't depend on each other,
> - base class RandomizedTest provides a number of methods for generating random numbers, strings
>   and picking random objects from collections (again, this is fully repeatable given the
>   initial seed if there are no race conditions),
> - the runner provides infrastructure to augment stack traces with information about the initial
>   seeds used for running the test, so that it can be repeated (or it can be determined that
>   the test is not repeatable -- this indicates a problem with the test case itself).
> Thread control:
> - any threads created as part of a test case are assigned the same initial random seed 
>   (repeatability),
> - tracks and attempts to terminate any Threads that are created and not terminated inside 
>   a test case (not cleaning up causes a test failure),
> - tracks and attempts to terminate test cases that run for too long (default timeout: 60 seconds,
>   adjustable using global property or annotations),
> Improved validation and lifecycle support:
> - RandomizedRunner uses relaxed contracts of hook methods' accessibility (hook methods _can_ be
>   private). This helps in avoiding problems with method shadowing (static hooks) or overrides
>   that require tedious super.() chaining). Private hooks are always executed and don't affect
>   subclasses in any way, period.
> - @Listeners annotation on a test class allows it to hook into the execution progress and listen
>   to events.
> - @Validators annotation allows a test class to provide custom validation strategies 
>   (project-specific). For example a base class can request specific test case naming strategy
>   (or reject JUnit3-like methods, for instance).
> - RandomizedRunner does not "chain" or "suppress" exceptions happening during execution of 
>   a test case (including hooks). All exceptions are reported as soon as they happened and multiple
>   failure reports can occur. Most environments we know of then display these failures sequentially
>   allowing a clearer understanding of what actually happened first.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org