<div dir="ltr"><div><div><div><div><div><div><div><div><div>In short no.<br></div>But in practice, it is complicated question<br><br></div>I am currently working in splitting testsuite to core &amp; full distro.<br></div>So some tests will only be part of core and others of full distro.<br>
<br></div>When we went trough tests we saw that some tests overlap and would need to be run in both testsuites, but luckily they are a minority.<br><br></div>Bigger problem we have right now is to make sure tests that belong to core properly work there as not everything is avalible.<br>
There will be some work needed to fix such tests but in end they will be just in one place.<br><br><br></div>To address your question more specifically, idea is that one feature is only tested in its appropriate distro/feature and not duplicated.<br>
unless that new distro/feature adds some stuff that modifies default behavior where testing of some features should be re-done.<br><br>even now we have tests that only test specific features and ones that tests integrations of bunch of features.<br>
</div>We just need to be smart about how do testing.<br><br></div>--<br></div>tomaz<br><div><div><div><div><div><br><div><div><br></div></div></div></div></div></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Thu, Jun 12, 2014 at 12:33 PM, Emmanuel Hugonnet <span dir="ltr">&lt;<a href="mailto:ehugonne@redhat.com" target="_blank">ehugonne@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
Concerning tests and the integration tests in the test suite, will the splitting requires them to be run twice or more ?<br>
Let&#39;s say we test CDI integration with JAX-RS, will it be tested in the feature pack JAR-RS, or in JAX-RS and JavaEE and complete dist ?<br>
Cheers,<br>
Emmanuel<br>
<br>
Le 11/06/2014 17:57, Stuart Douglas a écrit :<br>
<div class="HOEnZb"><div class="h5">&gt; Something that I did not cover was how to actually do the split it terms<br>
&gt; of preserving history. We have a few options:<br>
&gt;<br>
&gt; 1) Just copy the files into a clean repo. There is no history in the<br>
&gt; repo, but you could always check the existing wildfly repo if you really<br>
&gt; need it.<br>
&gt;<br>
&gt; 2) Copy the complete WF repo and then delete the parts that are not<br>
&gt; going to be part of the new repo. This leaves complete history, but<br>
&gt; means that the check outs will be larger than they should be.<br>
&gt;<br>
&gt; 3) Use git-filter-branch to create a new repo with just the history of<br>
&gt; the relevant files. We still have a small checkout size, but the history<br>
&gt; is still in the repo.<br>
&gt;<br>
&gt; I think we should go with option 3.<br>
&gt;<br>
&gt; Stuart<br>
&gt;<br>
&gt; Stuart Douglas wrote:<br>
&gt;&gt; This design proposal covers the inter related tasks of splitting up the<br>
&gt;&gt; build, and also creating a build/provisioning system that will make it<br>
&gt;&gt; easy for end users to consume Wildfly. Apologies for the length, but it<br>
&gt;&gt; is a complex topic. The first part explains what we are trying to<br>
&gt;&gt; achieve, the second part covers how we are planning to actually<br>
&gt;&gt; implement it.<br>
&gt;&gt;<br>
&gt;&gt; The Wildfly code base is over a million lines of java and has a test<br>
&gt;&gt; suite that generally takes close to two hours to run in its entirety.<br>
&gt;&gt; This makes the project very unwieldily, and the large size and slow test<br>
&gt;&gt; suite makes development painful.<br>
&gt;&gt;<br>
&gt;&gt; To deal with this issue we are going to split the Wildfly code base into<br>
&gt;&gt; smaller discrete repositories. The planned split is as follows:<br>
&gt;&gt;<br>
&gt;&gt; - Core: just the WF core<br>
&gt;&gt; - Arquillian: the arquillian adaptors<br>
&gt;&gt; - Servlet: a WF distribution with just Undertow, and some basic EE<br>
&gt;&gt; functionality such as naming<br>
&gt;&gt; - EE: All the core EE related functionality, EJB&#39;s, messaging etc<br>
&gt;&gt; - Clustering: The core clustering functionality<br>
&gt;&gt; - Console: The management console<br>
&gt;&gt; - Dist: brings all the pieces together, and allows us to run all tests<br>
&gt;&gt; against a full server<br>
&gt;&gt;<br>
&gt;&gt; Note that this list is in no way final, and is open to debate. We will<br>
&gt;&gt; most likely want to split up the EE component at some point, possibly<br>
&gt;&gt; along some kind of web profile/full profile type split.<br>
&gt;&gt;<br>
&gt;&gt; Each of these repos will build a feature pack, which will contain the<br>
&gt;&gt; following:<br>
&gt;&gt;<br>
&gt;&gt; - Feature specification / description<br>
&gt;&gt; - Core version requirements (e.g. WF10)<br>
&gt;&gt; - Dependency info on other features (e.g. RestEASY X requires CDI 1.1)<br>
&gt;&gt; - module.xml files for all required modules that are not provided by<br>
&gt;&gt; other features<br>
&gt;&gt; - References to maven GAV&#39;s for jars (possibly a level of indirection<br>
&gt;&gt; here, module.xml may just contain the group and artifact, and the<br>
&gt;&gt; version may be in a version.properties file to allow it to be easily<br>
&gt;&gt; overridden)<br>
&gt;&gt; - Default configuration snippet, subsystem snippets are packaged in the<br>
&gt;&gt; subsystem jars, templates that combine them into config files are part<br>
&gt;&gt; of the feature pack.<br>
&gt;&gt; - Misc files (e.g. xsds) with indication of where on path to place them<br>
&gt;&gt;<br>
&gt;&gt; Note that a feature pack is not a complete server, it cannot simply be<br>
&gt;&gt; extracted and run, it first needs to be assembled into a server by the<br>
&gt;&gt; provisioning tool. The feature packs also just contain references to the<br>
&gt;&gt; maven GAV of required jars, they do not have the actual jars in the pack<br>
&gt;&gt; (which should make them very lightweight).<br>
&gt;&gt;<br>
&gt;&gt; Feature packs will be assembled by the WF build tool, which is just a<br>
&gt;&gt; maven plugin that will replace our existing hacky collection of ant<br>
&gt;&gt; scripts.<br>
&gt;&gt;<br>
&gt;&gt; Actual server instances will be assembled by the provisioning tool,<br>
&gt;&gt; which will be implemented as a library with several different front<br>
&gt;&gt; ends, including a maven plugin and a CLI (possibly integrated into our<br>
&gt;&gt; existing CLI). In general the provisioning tool will be able to<br>
&gt;&gt; provision three different types of servers:<br>
&gt;&gt;<br>
&gt;&gt; - A traditional server with all jar files in the distribution<br>
&gt;&gt; - A server that uses maven coordinates in module.xml files, with all<br>
&gt;&gt; artifacts downloaded as part of the provisioning process<br>
&gt;&gt; - As above, but with artifacts being lazily loaded as needed (not<br>
&gt;&gt; recommended for production, but I think this may be useful from a<br>
&gt;&gt; developer point of view)<br>
&gt;&gt;<br>
&gt;&gt; The provisioning tool will work from an XML descriptor that describes<br>
&gt;&gt; the server that is to be built. In general this information will include:<br>
&gt;&gt;<br>
&gt;&gt; - GAV of the feature packs to use<br>
&gt;&gt; - Filtering information if not all features from a pack are required<br>
&gt;&gt; (e.g. just give me JAX-RS from the EE pack. In this case the only<br>
&gt;&gt; modules/subsystems installed from the pack will be modules and subystem<br>
&gt;&gt; that JAX-RS requires).<br>
&gt;&gt; - Version overrides (e.g. give me Reaseasy 3.0.10 instead of 3.0.8),<br>
&gt;&gt; which will allow community users to easily upgrade individual components.<br>
&gt;&gt; - Configuration changes that are required (e.g. some way to add a<br>
&gt;&gt; datasource to the assembled server). The actual form this will take<br>
&gt;&gt; still needs to be decided. Note that this need to work on both a user<br>
&gt;&gt; level (a user adding a datasource) and a feature pack level (e.g. the<br>
&gt;&gt; JON feature packing adding a required data source).<br>
&gt;&gt; - GAV of deployments to install in the server. This should allow a<br>
&gt;&gt; server complete with deployments and the necessary config to be<br>
&gt;&gt; assembled and be immediately ready to be put into service.<br>
&gt;&gt;<br>
&gt;&gt; Note that if you just want a full WF install you should be able to<br>
&gt;&gt; provision it with a single line in the provisioning file, by specifying<br>
&gt;&gt; the dist feature pack. We will still provide our traditional download,<br>
&gt;&gt; which will be build by the provisioning tool as part of our build process.<br>
&gt;&gt;<br>
&gt;&gt; The provisioning tool will also be able to upgrade servers, which<br>
&gt;&gt; basically consists of provisioning a new modules directory. Rollback is<br>
&gt;&gt; provided by provisioning from an earlier version of provisioning file.<br>
&gt;&gt; When a server is provisioned the tool will make a backup copy of the<br>
&gt;&gt; file used, so it should always be possible to examine the provisioning<br>
&gt;&gt; file that was used to build the current server config.<br>
&gt;&gt;<br>
&gt;&gt; Note that when an update is performed on an existing server config will<br>
&gt;&gt; not be updated, unless the update adds an additional config file, in<br>
&gt;&gt; which case the new config file will be generated (however existing<br>
&gt;&gt; config will not be touched).<br>
&gt;&gt;<br>
&gt;&gt; Note that as a result of this split we will need to do much more<br>
&gt;&gt; frequent releases of the individual feature packs, to allow the most<br>
&gt;&gt; recent code to be integrated into dist.<br>
&gt;&gt;<br>
&gt;&gt; Implementation Plan<br>
&gt;&gt;<br>
&gt;&gt; The above changes are obviously a big job, and will not happen<br>
&gt;&gt; overnight. They are also highly likely to conflict with other changes,<br>
&gt;&gt; so maintaining a long running branch that gets rebased is not a<br>
&gt;&gt; practical option. Instead the plan it to perform the split in<br>
&gt;&gt; incremental changes. The basic steps are listed below, some of which can<br>
&gt;&gt; be performed in parallel.<br>
&gt;&gt;<br>
&gt;&gt; 1) Using the initial implementation of my build plugin (in my<br>
&gt;&gt; wildfly-build-plugin branch) we split up the server along the lines<br>
&gt;&gt; above. The code will all stay in the same repo, however the plugin will<br>
&gt;&gt; be used to build all the individual pieces, which are then assembled as<br>
&gt;&gt; part of the final build process. Note that the plugin in its current<br>
&gt;&gt; form does both the build and provision step, and the pack format is<br>
&gt;&gt; produces is far from the final pack format that we will want to use.<br>
&gt;&gt;<br>
&gt;&gt; 2) Split up the test suite into modules based on the features that they<br>
&gt;&gt; test. This will result in several smaller modules in place of a single<br>
&gt;&gt; large one, which should also be a usability improvement as individual<br>
&gt;&gt; tests will be be faster to run, and run times for all tests in a module<br>
&gt;&gt; should be more manageable.<br>
&gt;&gt;<br>
&gt;&gt; 3) Split the core into into own module.<br>
&gt;&gt;<br>
&gt;&gt; 4) Split everything else into its own module. As part of this step we<br>
&gt;&gt; need to make sure we still have the ability to run all tests against the<br>
&gt;&gt; full server, as well as against the cut down feature pack version of the<br>
&gt;&gt; server.<br>
&gt;&gt;<br>
&gt;&gt; 5) Focus on the build an provisioning tool, to implement all the<br>
&gt;&gt; features above, and to finalize the WF pack format.<br>
&gt;&gt;<br>
&gt;&gt; I think that just about covers it. There are still lots of nitty gritty<br>
&gt;&gt; details that need to be worked out, however I think this covers all the<br>
&gt;&gt; main aspects of the design. We are planning on starting work on this<br>
&gt;&gt; basically immediately, as we want to get this implemented as early in<br>
&gt;&gt; the WF9 cycle as possible.<br>
&gt;&gt;<br>
&gt;&gt; Stuart<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; wildfly-dev mailing list<br>
&gt;&gt; <a href="mailto:wildfly-dev@lists.jboss.org">wildfly-dev@lists.jboss.org</a><br>
&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/wildfly-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/wildfly-dev</a><br>
&gt; _______________________________________________<br>
&gt; wildfly-dev mailing list<br>
&gt; <a href="mailto:wildfly-dev@lists.jboss.org">wildfly-dev@lists.jboss.org</a><br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/wildfly-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/wildfly-dev</a><br>
&gt;<br>
<br>
</div></div><br>_______________________________________________<br>
wildfly-dev mailing list<br>
<a href="mailto:wildfly-dev@lists.jboss.org">wildfly-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/wildfly-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/wildfly-dev</a><br></blockquote></div><br></div>