package org.jacorb.test.orb.connection.maxconnectionenforcement;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
import java.util.Random;
import org.jacorb.orb.giop.BiDirConnectionInitializer;
import org.jacorb.test.harness.ClientServerSetup;
import org.jacorb.test.harness.ClientServerTestCase;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.omg.BiDirPolicy.BIDIRECTIONAL_POLICY_TYPE;
import org.omg.BiDirPolicy.BOTH;
import org.omg.BiDirPolicy.BidirectionalPolicyValueHelper;
import org.omg.CORBA.Any;
import org.omg.CORBA.ORB;
import org.omg.CORBA.Policy;
import org.omg.PortableServer.IdAssignmentPolicyValue;
import org.omg.PortableServer.ImplicitActivationPolicyValue;
import org.omg.PortableServer.LifespanPolicyValue;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
public class MaxConnetcionEnforcementTest extends ClientServerTestCase
{
static Random rnd = new Random();
@BeforeClass
public static void beforeClassSetUp() throws Exception
{
Properties props = new Properties();
props.put( "org.omg.PortableInterceptor.ORBInitializerClass.bidir_init",
BiDirConnectionInitializer.class.getName() );
setup = new ClientServerSetup(TestServer.class.getName(), TestIfImpl.class.getName(), props, null);
}
@Test
public void testMaxConnetcionEnforcement()
{
try
{
//init ORB
ORB orb = setup.getClientOrb();
//init POA
POA root_poa =
POAHelper.narrow( orb.resolve_initial_references( "RootPOA" ));
Any any = orb.create_any();
BidirectionalPolicyValueHelper.insert( any, BOTH.value );
Policy[] policies = new Policy[4];
policies[0] =
root_poa.create_lifespan_policy(LifespanPolicyValue.TRANSIENT);
policies[1] =
root_poa.create_id_assignment_policy(IdAssignmentPolicyValue.SYSTEM_ID);
policies[2] =
root_poa.create_implicit_activation_policy( ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION );
policies[3] = orb.create_policy( BIDIRECTIONAL_POLICY_TYPE.value,
any );
POA bidir_poa = root_poa.create_POA( "BiDirPOA",
root_poa.the_POAManager(),
policies );
bidir_poa.the_POAManager().activate();
final CallbackIf myself = CallbackIfHelper.narrow( bidir_poa.servant_to_reference( new CallbackIfImpl() ));
//narrow to test interface
final TestIf remoteObj = TestIfHelper.narrow( setup.getServerObject() );
final int callInterval = 1;
int threads = 10;
List<Thread> threadPool = new LinkedList<Thread>();
Thread thread;
for( int i = 0; i < threads; i++ )
{
thread = new Thread( new Runnable()
{
public void run()
{
try
{
int c = 10;
while( c-- > 0 )
{
if( Math.abs( rnd.nextInt() ) % 3 > 0 )
{
//call remote op
Assert.assertTrue(remoteObj.op());
}
else
{
Assert.assertTrue(remoteObj.doCallback( myself ));
}
Thread.sleep( Math.abs( rnd.nextLong() ) % callInterval );
}
}
catch( Exception e )
{
}
}
});
thread.start();
threadPool.add(thread);
}
for(Object thr_obj : threadPool )
{
((Thread)thr_obj).join();
}
}
catch (Exception e)
{
}
}
}