Обсуждение: patch: clean up ant test infrastructure

Поиск
Список
Период
Сортировка

patch: clean up ant test infrastructure

От
Oliver Jowett
Дата:
This patch rearranges how tests are built and run from build.xml:

 + Make all testsuites (jdbc2, jdbc2.optional, jdbc3) independent
   i.e. they run only their own tests and not those of earlier
   versions.

 + Run all applicable testsuites for the configured JDBC version,
   e.g. run jdbc2, jdbc2.optional, and jdbc3 if we are configured
   for JDBC3. The rationale is that the JDBC2 tests should work
   on JDBC2 *or any later version*.

 + Use Ant's <junit> task instead of running a JUnit UI. This cleans
   up the buildfile and produces somewhat nicer output than the text-ui.
   As Ant doesn't try to find the task class until the containing target
   is run, and we conditionalize running the test task on the
   presence of both JUnit and the JUnit task, this shouldn't cause
   errors if the task isn't present.

 + Merge the various per-version test targets into a single target with
   conditional <test> elements.

 + Use a separate builddir for the tests to help isolate them from the
   driver. Build a new postgresql-tests.jar jarfile containing just the tests.

 + Run the tests using the actual driver jarfile (and test jarfile)
   rather than whatever's in builddir. This should help make sure that you
   are testing the actual driver that will be used. One sideeffect of this
   is that PSQLException can find its resource bundle when running tests now
   (previously it couldn't as srcdir was not in the test classpath).

I've tested this against Ant 1.5.3 and a 1.4 JDK, with and without JUnit and
ant-optional (for the JUnit task) present. I don't have the resources to
test other JDKs or Ant versions at the moment.

-O

Вложения

Re: patch: clean up ant test infrastructure

От
Fernando Nasser
Дата:
Oliver Jowett wrote:
>
>  + Use Ant's <junit> task instead of running a JUnit UI. This cleans
>    up the buildfile and produces somewhat nicer output than the text-ui.
>    As Ant doesn't try to find the task class until the containing target
>    is run, and we conditionalize running the test task on the
>    presence of both JUnit and the JUnit task, this shouldn't cause
>    errors if the task isn't present.
>

Oliver,

The Ant script really needed some TCL.  Thanks.

But with the above chunk you are taking away the opportunity of someone using
junit.swinggui.TestRunner aren't you?  Some people like the GUI interface.
Or can it be done with the <junit> task and I just don't know how (I believe you
can only get text or XML with that)?

Maybe you can add a separate target so people still can get the gui version...

Regards,
Fernando



--
Fernando Nasser
Red Hat - Toronto                       E-Mail:  fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario   M4P 2C9


Re: patch: clean up ant test infrastructure

От
Oliver Jowett
Дата:
On Mon, Jul 21, 2003 at 11:44:41AM -0400, Fernando Nasser wrote:
> Oliver Jowett wrote:
> >
> > + Use Ant's <junit> task instead of running a JUnit UI. This cleans
> >   up the buildfile and produces somewhat nicer output than the text-ui.
> >   As Ant doesn't try to find the task class until the containing target
> >   is run, and we conditionalize running the test task on the
> >   presence of both JUnit and the JUnit task, this shouldn't cause
> >   errors if the task isn't present.
> >
>
> Oliver,
>
> The Ant script really needed some TCL.  Thanks.
>
> But with the above chunk you are taking away the opportunity of someone
> using junit.swinggui.TestRunner aren't you?  Some people like the GUI
> interface.
> Or can it be done with the <junit> task and I just don't know how (I
> believe you can only get text or XML with that)?

I don't think you can get at an interactive interface from the <junit> task.

My changes also add a 'testjar' target that builds a standalone test jar ..
you can always feed that to whichever junit gui you prefer. Personally, I
prefer to have it all automated and noninteractive from the build file..

> Maybe you can add a separate target so people still can get the gui
> version...

Yes, or a separate script.

The 'test' target is invoked from 'make check', so presumably it should be
noninteractive by default.

-O (who should have been asleep 3 hours ago..)

Re: patch: clean up ant test infrastructure

От
Barry Lind
Дата:
Patch applied, with a few minor changes to work correctly under jdk1.2
and 1.3.

thanks,
--Barry


Oliver Jowett wrote:
> This patch rearranges how tests are built and run from build.xml:
>
>  + Make all testsuites (jdbc2, jdbc2.optional, jdbc3) independent
>    i.e. they run only their own tests and not those of earlier
>    versions.
>
>  + Run all applicable testsuites for the configured JDBC version,
>    e.g. run jdbc2, jdbc2.optional, and jdbc3 if we are configured
>    for JDBC3. The rationale is that the JDBC2 tests should work
>    on JDBC2 *or any later version*.
>
>  + Use Ant's <junit> task instead of running a JUnit UI. This cleans
>    up the buildfile and produces somewhat nicer output than the text-ui.
>    As Ant doesn't try to find the task class until the containing target
>    is run, and we conditionalize running the test task on the
>    presence of both JUnit and the JUnit task, this shouldn't cause
>    errors if the task isn't present.
>
>  + Merge the various per-version test targets into a single target with
>    conditional <test> elements.
>
>  + Use a separate builddir for the tests to help isolate them from the
>    driver. Build a new postgresql-tests.jar jarfile containing just the tests.
>
>  + Run the tests using the actual driver jarfile (and test jarfile)
>    rather than whatever's in builddir. This should help make sure that you
>    are testing the actual driver that will be used. One sideeffect of this
>    is that PSQLException can find its resource bundle when running tests now
>    (previously it couldn't as srcdir was not in the test classpath).
>
> I've tested this against Ant 1.5.3 and a 1.4 JDK, with and without JUnit and
> ant-optional (for the JUnit task) present. I don't have the resources to
> test other JDKs or Ant versions at the moment.
>
> -O
>
>
> ------------------------------------------------------------------------
>
> Index: src/interfaces/jdbc/build.xml
> ===================================================================
> RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/build.xml,v
> retrieving revision 1.32
> diff -u -c -r1.32 build.xml
> *** src/interfaces/jdbc/build.xml    27 Feb 2003 05:45:43 -0000    1.32
> --- src/interfaces/jdbc/build.xml    20 Jul 2003 07:56:59 -0000
> ***************
> *** 49,64 ****
>       </condition>
>       <available property="datasource" classname="javax.sql.DataSource"/>
>       <available property="ssl" classname="javax.net.ssl.SSLSocketFactory"/>
> !     <available property="junit" classname="junit.framework.Test" />
>       <condition property="jdbc2tests">
>         <and>
> !         <isset property="jdbc2"/>
>           <isset property="junit"/>
>         </and>
>       </condition>
>       <condition property="jdbc2optionaltests">
>         <and>
> !         <isset property="jdbc2"/>
>           <isset property="datasource"/>
>           <isset property="junit"/>
>         </and>
> --- 49,71 ----
>       </condition>
>       <available property="datasource" classname="javax.sql.DataSource"/>
>       <available property="ssl" classname="javax.net.ssl.SSLSocketFactory"/>
> !     <available property="junit" classname="junit.framework.Test"/>
> !     <available property="junit.task" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"/>
>       <condition property="jdbc2tests">
>         <and>
> !         <or>
> !           <isset property="jdbc2"/>
> !           <isset property="jdbc3"/>
> !         </or>
>           <isset property="junit"/>
>         </and>
>       </condition>
>       <condition property="jdbc2optionaltests">
>         <and>
> !         <or>
> !           <isset property="jdbc2"/>
> !           <isset property="jdbc3"/>
> !         </or>
>           <isset property="datasource"/>
>           <isset property="junit"/>
>         </and>
> ***************
> *** 83,89 ****
>       <jar jarfile="${jardir}/postgresql.jar" whenempty="fail">
>         <fileset dir="${builddir}">
>           <include name="${package}/**/*.class" />
> -         <exclude name="${package}/test/**" />
>         </fileset>
>
>         <fileset dir="${srcdir}">
> --- 90,95 ----
> ***************
> *** 108,113 ****
> --- 114,121 ----
>       <javac srcdir="${srcdir}" destdir="${builddir}" debug="${debug}">
>         <include name="${package}/**" />
>
> +       <exclude name="${package}/test/**" />
> +
>         <exclude name="${package}/jdbc1/**" unless="jdbc1"/>
>         <exclude name="${package}/jdbc2/**" unless="jdbc2"/>
>         <exclude name="${package}/jdbc3/**" unless="jdbc3"/>
> ***************
> *** 274,335 ****
>     <property name="username" value="test" />
>     <!-- Password must be something.  Doesn't matter if trust is used! -->
>     <property name="password" value="password" />
> -   <!-- junit.ui is one of textui, awtui, or swingui -->
> -   <property name="junit.ui" value="textui" />
> -
>
> !   <target name="test" depends="testjdbc2,testjdbc2optional,testjdbc3">
> !    </target>
>
> -   <target name="testjdbc2" depends="jar" if="jdbc2tests">
> -     <javac srcdir="${srcdir}" destdir="${builddir}" debug="${debug}">
> -       <include name="${package}/test/jdbc2/*" />
> -     </javac>
> -    <java fork="yes" classname="junit.${junit.ui}.TestRunner" taskname="junit" failonerror="true">
> -       <arg value="org.postgresql.test.jdbc2.Jdbc2TestSuite" />
> -       <sysproperty key="database" value="${database}" />
> -       <sysproperty key="username" value="${username}" />
> -       <sysproperty key="password" value="${password}" />
>         <classpath>
> !         <pathelement location="${builddir}" />
> !         <pathelement path="${java.class.path}" />
>         </classpath>
> -     </java>
> -   </target>
> -
> -   <target name="testjdbc2optional" depends="jar" if="jdbc2optionaltests">
> -     <javac srcdir="${srcdir}" destdir="${builddir}" debug="${debug}">
> -       <include name="${package}/test/jdbc2/optional/**" />
> -       <include name="${package}/test/util/**" />
>       </javac>
> !     <java fork="yes" classname="junit.${junit.ui}.TestRunner" taskname="junit" failonerror="true">
> !       <arg value="org.postgresql.test.jdbc2.optional.OptionalTestSuite" />
> !       <sysproperty key="database" value="${database}" />
> !       <sysproperty key="username" value="${username}" />
> !       <sysproperty key="password" value="${password}" />
> !       <classpath>
> !         <pathelement location="${builddir}" />
> !         <pathelement path="${java.class.path}" />
> !       </classpath>
> !     </java>
>     </target>
>
> -   <target name="testjdbc3" depends="jar" if="jdbc3tests">
> -     <javac srcdir="${srcdir}" destdir="${builddir}" debug="${debug}">
> -       <include name="${package}/test/jdbc3/*" />
> -       <include name="${package}/test/util/*" />
> -     </javac>
> -     <java fork="yes" classname="junit.${junit.ui}.TestRunner" taskname="junit" failonerror="true">
> -       <arg value="org.postgresql.test.jdbc3.Jdbc3TestSuite" />
>         <sysproperty key="database" value="${database}" />
>         <sysproperty key="username" value="${username}" />
>         <sysproperty key="password" value="${password}" />
>         <classpath>
> !         <pathelement location="${builddir}" />
>           <pathelement path="${java.class.path}" />
>         </classpath>
> -     </java>
> -   </target>
>
>
>   </project>
> --- 282,331 ----
>     <property name="username" value="test" />
>     <!-- Password must be something.  Doesn't matter if trust is used! -->
>     <property name="password" value="password" />
>
> !   <!-- The tests now build to a separate directory and jarfile from the
> !        driver build, to ensure we're really testing against the jar we just
> !        built, and not whatever happens to be in builddir. -->
> !
> !   <!-- This compiles and builds the test jarfile. -->
> !   <target name="testjar" depends="jar" if="junit">
> !     <mkdir dir="${builddir}/tests"/>
> !     <javac srcdir="${srcdir}" destdir="${builddir}/tests" debug="${debug}">
> !       <include name="${package}/test/**" />
> !
> !       <exclude name="${package}/test/jdbc2/**" unless="jdbc2tests"/>
> !       <exclude name="${package}/test/jdbc2/optional/**" unless="jdbc2optionaltests" />
> !       <exclude name="${package}/test/jdbc3/**" unless="jdbc3tests"/>
>
>         <classpath>
> !         <pathelement location="${jardir}/postgresql.jar"/>
>         </classpath>
>       </javac>
> !     <jar jarfile="${jardir}/postgresql-tests.jar" basedir="${builddir}/tests"/>
>     </target>
> +
> +   <!-- This actually runs the tests -->
> +   <target name="runtest" depends="testjar" if="junit.task">
> +     <junit>
> +       <formatter type="brief" usefile="false"/>
>
>         <sysproperty key="database" value="${database}" />
>         <sysproperty key="username" value="${username}" />
>         <sysproperty key="password" value="${password}" />
> +
>         <classpath>
> !         <pathelement location="${jardir}/postgresql.jar" />
> !         <pathelement location="${jardir}/postgresql-tests.jar" />
>           <pathelement path="${java.class.path}" />
>         </classpath>
>
> +       <test name="org.postgresql.test.jdbc2.Jdbc2TestSuite" if="jdbc2tests"/>
> +       <test name="org.postgresql.test.jdbc2.optional.OptionalTestSuite" if="jdbc2optionaltests"/>
> +       <test name="org.postgresql.test.jdbc3.Jdbc3TestSuite" if="jdbc3tests"/>
> +     </junit>
> +   </target>
> +
> +   <!-- This is the target invoked by the Makefile -->
> +   <target name="test" depends="testjar,runtest"/>
>
>   </project>
> Index: src/interfaces/jdbc/org/postgresql/test/jdbc3/Jdbc3TestSuite.java
> ===================================================================
> RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/test/jdbc3/Jdbc3TestSuite.java,v
> retrieving revision 1.3
> diff -u -c -r1.3 Jdbc3TestSuite.java
> *** src/interfaces/jdbc/org/postgresql/test/jdbc3/Jdbc3TestSuite.java    25 Sep 2002 07:01:31 -0000    1.3
> --- src/interfaces/jdbc/org/postgresql/test/jdbc3/Jdbc3TestSuite.java    20 Jul 2003 07:56:59 -0000
> ***************
> *** 14,20 ****
>       public static TestSuite suite()
>       {
>           TestSuite suite = new TestSuite();
> -         suite.addTest(org.postgresql.test.jdbc2.Jdbc2TestSuite.suite());
>           suite.addTestSuite(Jdbc3SimpleDataSourceTest.class);
>           suite.addTestSuite(Jdbc3ConnectionPoolTest.class);
>           suite.addTestSuite(Jdbc3PoolingDataSourceTest.class);
> --- 14,19 ----
>
>
> ------------------------------------------------------------------------
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster