[ https://issues.apache.org/jira/browse/OAK-3862?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15093926#comment-15093926 ]
Chetan Mehrotra commented on OAK-3862: -------------------------------------- {quote} I thought about this suggestion, but I find this solution sub-optimal. Suppose you have an oak-it module containing every integration test in Oak: this module needs only to know which implementations to run the tests against. On the other hand, suppose we apply your solution: oak-segment would need to have a knowledge about every integration test in oak-core, with the potential of missing some tests if we don't keep this knowledge up to date. {quote} Such things can be simplified via use of [Categories|https://github.com/junit-team/junit/wiki/Categories]. In Oak we somewhat use a similar approach with RepositoryStub which allows test in jackrabbit-core to be executed with various modules in Oak. See [QueryJcrTestIT|https://github.com/apache/jackrabbit-oak/blob/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryJcrTestIT.java#L53] which is custom suite listing all such jackrabbit-core test. This can be improved via use of Categories. In addition I would prefer to have test closer to the logic being tested unless they are testing bigger usecase flows. So TreeTest should live _near_ tree implementation logic. {quote} Moreover, I fear that your solution would make oak-segment a second-class citizen: since oak-core comes before oak-segment in the Maven build plan, no integration test for oak-segment will be ever run if some integration test fails in oak-core. {quote} I do not think it makes any stuff second class. For e.g. currently oak-lucene run same query test which are run in oak-core or oak-jcr. And that has not been a problem. You can use [fail at end|https://maven.apache.org/guides/mini/guide-multiple-modules.html] feature to ensure test are run against different module even in case of failure. For the modularization approach which impact the whole project it would be preferable if changes are done gradually. So some approach might not be optimal (to start with) but would allow gradual changes to reach the end goal. If required we can carve out separate oak-it module. But then that should be done as 3rd or 4th step say after extracting out oak-segment and oak-document. Making it a prerequisite would make such refactoring riskier IMHO. > Move integration tests in a different Maven module > -------------------------------------------------- > > Key: OAK-3862 > URL: https://issues.apache.org/jira/browse/OAK-3862 > Project: Jackrabbit Oak > Issue Type: Improvement > Reporter: Francesco Mari > Assignee: Francesco Mari > Fix For: 1.4 > > > While moving the Segment Store and related packages into its own bundle, I > figured out that integration tests contained in {{oak-core}} contribute to a > cyclic dependency between the (new) {{oak-segment}} bundle and {{oak-core}}. > The dependency is due to the usage of {{NodeStoreFixture}} to instantiate > different implementations of {{NodeStore}} in a semi-transparent way. > Tests depending on {{NodeStoreFixture}} are most likely integration tests. A > clean solution to this problem would be to move those integration tests into > a new Maven module, referencing the API and implementation modules as needed. -- This message was sent by Atlassian JIRA (v6.3.4#6332)