hey, this is a good start. I will look at it in more detail in a day or so,
as usual remind me if you hear nothing.

-steve

----- Original Message -----
From: "Matt Seibert" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, May 28, 2002 7:05 AM
Subject: Re: AXIS Test Restructuring


> Steve,
>
> Here is the "high-level" design of my test / samples restructuring effort.
> I began this undertaking with the following input as requirements:
>
>    1. Determine the needs and dependancies of each test and sample
>    2. Reduce the complexity of the xml that compiles, deploys, execs, and
>       undeploys samples and tests
>    3. Enable a new test or sample to be "plugged in" to the suites,
without
>       disturbing currently working things
>    4. Enable the ability to instantiate any single sample or any single
>       test
>    5. Identify tests and samples that need "network" or "internet"
>       resources
>    6. Enable the ability to group tests and samples together in "bundles"
>
> This was based on the following information which was relayed to me:
>    1. Developers don't like to run ALL of the tests, if they are changing
>    only one part
>    2. Developers don't like adding new tests / samples because their
>    integration into the big master build.xml recursive functions
>       threatens to break everything
>    3. Some development organizations test in an "off-line" mode, and
>    therefore cannot exec ALL of the tests ALL of the time.

All good points


> To these ends, I have done the following:
>    1. Broken out the buildTest and samples targets from build.xml into
>    buildTest.xml and buildSamples.xml
>    2. Componentized those big recursive "build everything" calls into
>    specific test compilation xml files
>             For example, the commands / code to build the sessions test is
>    now located in a file, buildComponent.xml, in the directory
>             test/sessions under the target "compile"


>    3. Instead, in the buildTest and buildSamples files, there now exists a
>    non-complex variant of the ant ForeachTask, which finds all files
>       named buildComponent.xml in test/ and samples/ respectively, and
>    operates on them.

ok, an instance of the hypothetical <anton> task.

>             This allows a new test / sample to be "plugged in" to the
test/
>    and samples/ trees, and then be exectued upon, withouth
>             having to muck with the master controlling files

nice.

>    4. If a single test or sample is needed to be instantiated directly (is
>    a pre-req for another test or sample for example), then the
>       developer simply adds a block as below into either buildTest.xml or
>    buildSample.xml to enable the single component use of that
>       specific test or sample
>             <target name="session">
>                   <ant inheritAll="true"
>    antfile="test/session/buildComponent.xml" target="compile"/>
>             </target>

I dont like this style of running a build in a different base directory from
where the file lives, it causes confusion. There are some changes I need to
make to axis' build.xml to make the <ant dir= /> tactic work.

>    5. I am still working on this part. The basic jist is that if there is
>    no internet (network failure, firewalled development environment, etc)
>       the tests should not fail.  I have created a property in the test.
>    properties file which is test.runtest and is given a value of "LOCAL",
>       "REMOTE", or "BOTH" to control this function.  This is one of the
>    parts that I will need some help with.

regarding online/offline, here is the test from ant1.5'd build file

  <!-- test to see if we are online or not. can take a while when we are off
line, so
    setting the property is a good shortcut-->
  <target name="probe-offline">
      <condition property="offline">
      <or>
        <isset property="offline"/>
        <not>
          <http  url="http://www.apache.org/"/>
        </not>
      </or>
    </condition>
    <echo level="verbose" > offline=${offline}</echo>
  </target>

if you run it with -Doffline=true then it is manually off-line, otherwise it
probes for apache and keeps going from there...this property is used to tune
some of the tests:

  <patternset id="onlinetests">
    <exclude name="**/GetTest.java" if="offline" />
  </patternset>

This only works on ant1.5, as only it has the <http> condition, but it works
well. Personally I think any reworked Axis test framework should only use
ant1.5. as its basis; gump uses it after all


>    6. As in item 4, in order to "group" a bunch of tests, this can be
>    implemented in two methods:
>             A. Create a target task in the build<Test,Samples> file that
>    instantiates them all
>             B. Create a second ForeachTask loop that looks for files
called
>    testBundle*.xml and exec each of these.
>
> As for your issue with "stopping on the first failure",  I beleive that
> there is already a flag set up to ignoreFailures in the xml files, which
> will then exec all tests, and give you a wrap up of what did, or did not,
> work.  Also, to that end, I will need to add a "common output" method for
> these componentized tests to allow them (if the user wishes) to have their
> output placed in either separate log file (reports/test-session.xml), a
> "wrap-up" log file (reports/test.xml), or both.  Suggestions and input
here
> would be greatly appreciated.

We have just started discussing on ant-dev where we could go with a
'buildunit' framework; a way of running ant over a set of targets with the
output fed back into junit style XML report docs afterwards, that can be
<style>d into something reasonable.

The other trick would be to take your foreach task, add a failonerror attr,
and have it call ant onto the subbuilds with a new logger to log everything.
Or run ant from the toplevel with its xmllogger, and add a very fancy XSLT
to make something good from the results.

-steve





>
> Also, the buildComponent.xml are all a "template" type files, all with the
> same targets, the same dependancies, and the same ordering, all reading in
> common properties.  In this way it should be much easier to trace through
> all of these tests, simply because they are a small bit easier to
> understand.
>
> Please, everyone feel free to comment openly on this.  Tell me what you
> hate, and what you like, and where you need more information.
>
> Matt Seibert                                           [EMAIL PROTECTED]
> IBM        External:    (512) 838-3656      Internal:   678-3656
>
>
> > Prompted by a note from Steve Loughran this morning, and being budged by
> > some of my teammates, I am putting in that I am willing to chip in on
the
> > restructuring.
> >
> > Steve,
> >
> > I have been working for about two weeks on the re-structuring of the
> test/
> > and samples/ compilation / execution process, being able to componentize
> > and instantiate any given test singularly, and making the system easier
> to
> > maintain and, hopefully, a little better organized.
> >
> > I would like to speak with you about how I foresee the build/execution
of
> > the test and samples structures changing in correlation to how you think
> > the overall build process should be changing.  I would very much like
for
> > you to review my proposed changes, as well as see what your proposals
> are,
> > so as to produce the best possible output.
> >
> > Please feel free to ping me back.  I am new to the axis community, and
am
> > not quite sure how we all go about sharing information......
>
> I am new to axis too, but worked on other apache projects. we can discuss
> stuff on the dev mail list as it stores the discussion and lets other
> people
> get involved; it "eliminates surprises"
>
> So, write up your proposed changes and see where you think we should go.
>
> Me, I think that as well as cleaning up the build process, we need to work
> on the test suite so it runs more like a big fat junit test; you run all
> the
> tests and get back an XML file of what worked, what didnt...to date the
way
> we go right now the first failure seems to stops the run.
>
> I dont know quite how to do that (yet), though I have some definate ideas,
> which revolve around how ant's unit tests run build files inside junit,
but
> with a bit more template driven generation of build files, and maybe even
> the junit test cases to call them.
>
> -steve

Reply via email to