package com.xoetrope.service.test;
import java.util.Date;
import net.xoetrope.optional.service.XRouteManager;
import net.xoetrope.optional.service.XServiceModelNode;
import com.xoetrope.service.CallbackToken;
import com.xoetrope.service.XPersistantService;
import com.xoetrope.service.XServiceCallback;
import com.xoetrope.service.servlet.XUnreliableServiceServlet;
import net.xoetrope.xml.XmlElement;
import net.xoetrope.xui.data.XModel;
import net.xoetrope.xui.XProjectManager;
/**
* Test the unreliable service servelt to see that it returns the expected errors
* <p>Copyright (c) Xoetrope Ltd. 2001-2004</p>
* $Revision: 1.2 $
*/
public class XPersistantProxyTest extends XServiceTest implements XServiceCallback
{
int callbackToken = -1;
public XPersistantProxyTest()
{
super();
defaultURLStr = "http://localhost:8080/xunreliableservlet";
}
public void testServer()
{
String[] argNames = {
"reliability"};
XRouteManager routeMgr = (XRouteManager)XProjectManager.getCurrentProject().getObject( "Routes" );
XServiceModelNode node = new XServiceModelNode();
XModel.getInstance().set( "TestPersistenProxyService", node );
try {
node.setupService( "getName64", routeMgr.getRoute( "persistRoute", "com.xoetrope.service.test.CalcTestService" ), argNames );
XPersistantService sp = ( XPersistantService )node.getServiceProxy();
sp.setServiceName( "TestPersistenProxyService" );
long sleepTime = sleepTime = new Long( XProjectManager.getCurrentProject().getStartupParam( "CacheSleepTime" ) ).longValue();
long endTime = new Date().getTime() + 5 * sleepTime + sp.getNumStoredCalls() * sleepTime;
node.setNumAttributes( 1 );
node.setAttribValue( 0, Integer.toString( XUnreliableServiceServlet.FOURTH_RESPONSE ).toString() );
sp.setCallbackObject( this );
Object result = node.get();
assertTrue( result != null );
// If the request just happened to succeed then the next request should
// fail as it can't be the fourth request
if ( !( result instanceof CallbackToken ) )
result = node.get();
assertTrue( result instanceof CallbackToken );
callbackToken = ( ( CallbackToken )result ).getToken();
assertTrue( callbackToken >= 0 );
while ( ( callbackToken >= 0 ) || ( sp.getNumStoredCalls() > 0 ) ) {
Thread.currentThread().sleep( 100 );
if ( new Date().getTime() > endTime )
break;
}
assertTrue( callbackToken == -1 );
}
catch ( Exception e ) {
e.printStackTrace();
assertTrue( false );
}
}
public void callCompleted( int token, Object response, XmlElement request )
{
System.out.println( "job token completed:" + token );
if ( token == callbackToken )
callbackToken = -1;
}
}
|