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

Uwe Schindler resolved LUCENE-2516.
-----------------------------------

    Resolution: Fixed

Committed 3x revision: 960490

I will now try in a second step to do a clean checkout of 3.0 tests again to 
minimize changes made in backwards tests.

> More clarification, improvements and correct behaviour of backwards tests
> -------------------------------------------------------------------------
>
>                 Key: LUCENE-2516
>                 URL: https://issues.apache.org/jira/browse/LUCENE-2516
>             Project: Lucene - Java
>          Issue Type: Test
>    Affects Versions: 3.1
>            Reporter: Uwe Schindler
>            Assignee: Uwe Schindler
>             Fix For: 3.1
>
>         Attachments: LUCENE-2516.patch
>
>
> Backwards tests are used since 2.9 to assert, that the new Lucene version 
> supports drop-in-replacement over the previous version. For this all tests 
> from the previous version are compiled against the old version but then run 
> against the new JAR file.
> At the beginning the test suite was checking out another branch and doing 
> this, but this was replaced in 3.1 by directly embedding the previous source 
> tree and the previous tests into the backwards/ subdirectory of the SVN 
> source. The whole idea has several problems:
> - Tests not only check *public* APIs, they also check internals and sometimes 
> even fields or package-private methods. This is allowed to change in later 
> versions, so we must be able to change the tests, to support this behaviour. 
> This can be done by modifying the backwards tests to pass, but still use the 
> public API unchanged. Sometimes we simply comment out tests, that test 
> internals and not public APIs. For those tests, I would like to propose a 
> Java Annotation for trunk tests like @LuceneInternalTest - so we can tell the 
> tests runner for backwards (when this test is moved as backwards layer, e.g 
> in 4.1, that it runs all tests *but* not this marked one. This can be done 
> easily with Junit3/4 in LuceneTestCase(J4). This is not part of this issue, 
> but a good idea.
> - Sometimes we break backwards compatibility. Currently we do our best to 
> change the tests to reflect this, but this is unneeded and stupi, as it 
> brings two problems. The backwards tests should be compiled against the old 
> version of Lucene. If we change this old Version in the backwards folder, its 
> suddenly becomes nonsense. At least the JAR artifacts of the previous version 
> should stay *unchanged* in all cases! If we break backwards, the correct way 
> to do this, is to simply disable coresponding tests! There is no need to make 
> them work again, as we broke backwards, wy test plugin? The trunk tests 
> already check the functionality, backwards tests only check API. If we fix 
> the break in backwards, we do the contra of what they are for.
> So I propose the following and have implemented in a patch for 3.x branch:
> - Only include the *tests* and nothing else into the backwards branch, no 
> source files of previous Lucene Core.
> - Add the latest released JAR artifact of lucene-core.jar into backwards/lib, 
> optimally with checksum (md5/sh1). This enforces that it is not changed and 
> exactly do what they are for: To compile the previous tests against. This is 
> the only reason for this JAR file.
> - If we break backwards, simply *disable* the tests by commenting out, 
> ideally with a short note and the JIRA issue that shows the break.
> - If we change inner behaviour of classes, that are not public, dont fix, 
> disable tests. Its simple: backwards tests are only for API compatibility 
> testsing of public APIs. If a test uses internals it should not be run. For 
> that we should use a new annotation in trunk (see above).
> This has several good things:
> - we can package backwards tests in src ZIP. Its not a full distrib, only the 
> core tests and the JAR file. This enables people that doenloaded the src ZIP 
> files to also run backwrads tests
> - Your SVN checkout is not so big and backwards tests run faster!
> There are some problems, with one example in the attached patch:
> - If we have mock classes in the tests (e.g. MockRAMDirectory) that extend 
> Lucene classes and have access to their internal APIs, a change in these APIs 
> will make them fail to work unchanged. The above example (MockRAMDir) is used 
> in lots of tests and uses a internal RAMDir field that changed type in 3.1. 
> But we cannot disable all tests using this dir (no tests will survive). As we 
> cannot change the previous versions JAR to reflect this, you have to use some 
> trick in this interbal test class. In this case I removed static linking of 
> this field and replaced by reflection. This enables compilation against old 
> JAR, but supports running in new version. This is really a special case, but 
> works good here.
> Any comments?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to