Hi !
I'm using jython to check in the log traces that jboss is up and that ear is
deployed. the following uses BSF but the same could be done with a  <java
classname="org.python.util.jython" failonerror="true" fork="true" >.
seb.

 <target name="ignite" depends="lclinit">
    <parallel>
      <!--
        Start the APPSERVER in parallel.
        And wait for the server to be ready.
        Launch the test client when ready.
      -->
      <sequential>
        <ant target="server.removeTrace" />
        <ant target="server.cleanup" />
        <ant target="server.dropGemdb" />
        <echo message="TEST_CLIENT: Starting the APPSERVER in parallel ..."/>
        <ant dir="../../../script" target="start"/>
        <echo message="TEST_CLIENT: Warning: APPSERVER Thread is back here
..."/>
      </sequential>

      <sequential>
        <echo message="TEST_CLIENT: Sleeping on APPSERVER to start for a few
seconds ..."/>
        <sleep seconds="60" />

        <ant target="runTests" />

        <echo message="TEST_CLIENT: The non reg tests are done. May see the
reports ... ..."/>
      </sequential>
    </parallel>

  </target>

  <target name="runTests" depends="server.ready, theNE.aligned, lclinit">
    <!-- Run the integration test scripts -->
    <antcall target="integtests" />
    <antcall target="tests-report" />
  </target>

  <target name="server.ready" depends="lclinit">

    <script language="jpython"> <![CDATA[
from java.lang import String;
import time;
beforeLastLine='';

runtime = project.getProperty("runtime.dir");
print 'runtime.dir = ' + runtime

up = 'INFO  [org.jboss.system.server.Server] JBoss'
started = 'Started in'

while (not beforeLastLine is None):
     f = open(runtime + '/trace/jboss_server_ems.log', "r");
     lines = f.readlines();
     l = len(lines);
     beforeLastLine=lines[l-1];

     # remove trailing character
     ll = len(beforeLastLine) - 1;
     purgedLine = '';
     i = 0;
     for c in beforeLastLine:
         if (i < ll):
             purgedLine = purgedLine + c; # todo: add break to optimize
         i = i+1
     beforeLastLine = purgedLine;
     print 'TEST_CLIENT: Waiting for the APPSERVER to be UP ...'
     f.close();

     if ((not String(beforeLastLine).indexOf(String(up)) == -1) or ( not
String(beforeLastLine).indexOf(String(started)))):
         beforeLastLine = None;
     time.sleep(10)

print 'TEST_CLIENT: The APPSERVER is ready now ...'
    ]]> </script>

seb.

Nick Neuberger wrote:

> I don't quite understand the reason why you would want to run the test cases
> before the app server is started.  Can you just run a task to start the
> appserver, then run the tests.
>
> Another possiblity.  Are you using an Http Server on port 80, then the
> appserver hooked to another port.  You may be getting a response from an
> http server before the app server is ready.  FYI - This does happen with IBM
> Http Server and WebSphere app server.  If this is the case...  Start app
> server, then start http server, then start test cases....
>
> Hope it helps.
>
> Nick
>
> -----Original Message-----
> From: Keith Hatton [mailto:[EMAIL PROTECTED]
> Sent: Friday, February 13, 2004 4:37 AM
> To: Ant-User (E-mail 2)
> Subject: Waiting for server to start
>
> Hi all,
>
> Part of my build file starts an application server, performs test cases
> against it, and shuts down the server. I'm successfully using the <parallel>
> task to achive this, conceptually like so:
>
>         |
>   +-----+-----+
>   |           |
> start       wait
>   |           |
>   |        run tests
>   |           |
>   |         stop
>   |           |
>   +-----+-----+
>         |
>
> My problem is the "wait" part. I have been using <waitfor> and <url> to
> check for the app server's URL, but recently I have noticed that sometimes
> the URL is available before the server initialisation has really completed,
> which can lead to spurious test failures, and (for very small projects) even
> the possibility that the "stop" task is called before the server has really
> started.
>
> The server is JBoss, and strictly I should be checking the server output for
> a text string. Any ideas on the best way to do this?
>
> (Current "start" target):
>             <echo>Starting JBoss ...</echo>
>             <exec dir="${jboss.home}/bin" executable="cmd.exe" os="Windows
> 2000" output="jboss.out">
>                 <arg line="/c run.bat"/>
>                 <env key="NOPAUSE" value="true"/>
>             </exec>
>             <echo>JBoss has stopped</echo>
>
> (Current "wait" target ... the <sleep> is a hack to work around the
> problem):
>             <echo>Waiting for JBoss ...</echo>
>             <waitfor maxwait="120" maxwaitunit="second" checkevery="20"
> checkeveryunit="second">
>                 <http url="http://localhost:8080/jmx-console"/>
>             </waitfor>
>             <sleep seconds="10"/>
>             <echo>JBoss has started</echo>
>
> Thanks for any suggestions
> Keith
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
> - - - - - -
> This e-mail message is intended only for the use of the individual or entity
> identified in the alias address of this message and may contain confidential
> and privileged information. Any unauthorized review, use, disclosure or
> distribution of this e-mail message is strictly prohibited. If you have
> received this e-mail message in error, please notify the sender immediately
> by reply e-mail and delete this message from your system. Thank you.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to