1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
package org.jboss.test.remoting.concurrent.local;
import junit.framework.TestCase;
import org.jboss.remoting.Client;
import org.jboss.remoting.InvocationRequest;
import org.jboss.remoting.InvokerLocator;
import org.jboss.remoting.ServerInvocationHandler;
import org.jboss.remoting.ServerInvoker;
import org.jboss.remoting.callback.InvokerCallbackHandler;
import org.jboss.remoting.transport.Connector;
import javax.management.MBeanServer;
/**
* @author <a href="mailto:tom.elrod@jboss.com">Tom Elrod</a>
*/
public class ConcurrentTestCase extends TestCase
{
private String locatorUri = "socket://localhost:8777";
private boolean failure = false;
private Client client = null;
private Connector connector = null;
private int numOfThreads = 100;
private int numOfIterations = 100;
private int[][] results = null;
public void setUp() throws Exception
{
connector = new Connector(locatorUri);
connector.create();
connector.addInvocationHandler("test", new TestInvocationHandler());
connector.start();
client = new Client(new InvokerLocator(locatorUri));
client.connect();
results = new int[numOfThreads][numOfIterations];
}
public void testConcurrentInvocations() throws Exception
{
for(int x = 0; x < numOfThreads; x++)
{
final int num = x;
new Thread(new Runnable() {
public void run()
{
try
{
runInvocations(num);
}
catch (Throwable throwable)
{
throwable.printStackTrace();
}
}
}, "" + x).start();
}
Thread.sleep(20000);
assertFalse(failure);
assertTrue(validateResults());
}
private boolean validateResults()
{
boolean failed = true;
for(int z = 0; z < numOfThreads; z++)
{
for(int q = 1; q < numOfIterations; q++)
{
int a = results[z][q -1];
int b = results[z][q];
//System.out.println("a = " + a + ", b = " + b + ((b -1 != a) ? " - FAILED" : ""));
if(b - 1 != a)
{
failed = false;
}
}
}
return failed;
}
private void runInvocations(int num) throws Throwable
{
for(int i = 0; i < numOfIterations; i++)
{
String param = num + "-" + i;
Object result = client.invoke(param);
//System.out.println(Thread.currentThread() + " - " + result);
assertEquals(param, result);
String subResult = ((String)result).substring(String.valueOf(num).length() + 1);
//System.out.println(Thread.currentThread() + " - " + subResult);
results[num][i] = Integer.parseInt(subResult);
}
}
public void tearDown()
{
if(connector != null)
{
connector.stop();
connector.destroy();
}
if(client != null)
{
client.disconnect();
}
}
public class TestInvocationHandler implements ServerInvocationHandler
{
public void setMBeanServer(MBeanServer server)
{
//TODO: -TME Implement
}
public void setInvoker(ServerInvoker invoker)
{
//TODO: -TME Implement
}
public Object invoke(InvocationRequest invocation) throws Throwable
{
return invocation.getParameter();
}
public void addListener(InvokerCallbackHandler callbackHandler)
{
//TODO: -TME Implement
}
public void removeListener(InvokerCallbackHandler callbackHandler)
{
//TODO: -TME Implement
}
}
}
|