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]