User: reverbel
Date: 02/03/15 14:36:29
Added: src/main/org/jboss/test/bankiiop/test
BankStressTestCase.java
Log:
Initial version of the bank test for JBoss/IIOP.
Revision Changes Path
1.1
jbosstest/src/main/org/jboss/test/bankiiop/test/BankStressTestCase.java
Index: BankStressTestCase.java
===================================================================
/*
* Copyright 1999 by dreamBean Software,
* All rights reserved.
*/
package org.jboss.test.bankiiop.test;
import java.util.*;
import java.lang.reflect.*;
import javax.ejb.*;
import javax.naming.*;
import javax.management.*;
import javax.rmi.PortableRemoteObject;
import org.jboss.test.bankiiop.interfaces.*;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.jboss.test.JBossTestCase;
import org.apache.log4j.Category;
/**
*
* @see <related>
* @author Author: d_jencks among many others
* @version $Revision: 1.1 $
*/
public class BankStressTestCase
extends JBossTestCase
{
// Constants -----------------------------------------------------
// Attributes ----------------------------------------------------
int idx = 1;
int iter;
Exception exc;
// Static --------------------------------------------------------
// Constructors --------------------------------------------------
public BankStressTestCase(String name)
{
super(name);
}
// Public --------------------------------------------------------
public void testTeller()
throws Exception
{
TellerHome home = (TellerHome)PortableRemoteObject.narrow(
new InitialContext().lookup(TellerHome.JNDI_NAME),
TellerHome.class);
Teller teller = home.create();
BankHome bankHome = (BankHome)PortableRemoteObject.narrow(
new InitialContext().lookup(BankHome.JNDI_NAME),
BankHome.class);
Bank bank = bankHome.create();
getLog().debug("Acquire customers");
Customer marc = teller.getCustomer("Marc");
Customer rickard = teller.getCustomer("Rickard");
getLog().debug("Acquire accounts");
Account from = teller.getAccount(marc, 200);
Account to = teller.getAccount(rickard, 200);
getLog().debug("Show balance");
getLog().debug(from.getPrimaryKey()+":"+from.getBalance());
getLog().debug(to.getPrimaryKey()+":"+to.getBalance());
getLog().debug("Transfer money");
long start = System.currentTimeMillis();
int iter = 10;
for (int i = 0; i < iter; i++)
teller.transfer(from, to, 50);
long end = System.currentTimeMillis();
getLog().info("Average call time: "+((end - start) / (iter*6)));
getLog().debug("Show balance");
AccountHome accountHome = (AccountHome)PortableRemoteObject.narrow(
new InitialContext().lookup(AccountHome.JNDI_NAME),
AccountHome.class);
Collection accts = accountHome.findAll();
Iterator enum = accts.iterator();
while(enum.hasNext())
{
Account acct = (Account)PortableRemoteObject.narrow(enum.next(),
Account.class);
AccountData data = acct.getData();
getLog().debug(data.getId()+"("+data.getOwner().getName()+"):"+data.getBalance());
acct.withdraw(data.getBalance()); // Clear
}
teller.remove();
}
public void testBank()
throws Exception
{
getLog().debug("Get code");
BankHome bankHome = (BankHome)PortableRemoteObject.narrow(
new InitialContext().lookup(BankHome.JNDI_NAME),
BankHome.class);
Bank bank = bankHome.create();
getLog().debug("Bank id="+bank.getId());
bank.remove();
}
/* public void testCustomer()
throws Exception
{
getLog().debug("Customer test----------------------------------");
getLog().debug("Create Customer");
CustomerHome customerHome = (CustomerHome)new
InitialContext().lookup("Customer");
Account from, to;
try
{
from = accountHome.findByPrimaryKey("Marc");
from.deposit(200);
} catch (FinderException e)
{
from = accountHome.create("Marc", 200);
}
try
{
to = accountHome.findByPrimaryKey("Rickard");
} catch (FinderException e)
{
to = accountHome.create("Rickard", 0);
}
getLog().debug("Show balance");
getLog().debug(from.getPrimaryKey()+":"+from.getBalance());
getLog().debug(to.getPrimaryKey()+":"+to.getBalance());
getLog().debug("Transfer money");
TellerHome home = (TellerHome)new InitialContext().lookup("Teller");
Teller teller = home.create();
long start = System.currentTimeMillis();
for (int i = 0; i < 100; i++)
teller.transfer(from, to, 50);
teller.remove();
getLog().debug("Show balance");
Iterator enum = accountHome.findAll();
while(enum.hasNext())
{
Account acct = (Account)enum.next();
getLog().debug(acct.getPrimaryKey()+":"+acct.getBalance());
acct.withdraw(acct.getBalance()); // Clear
}
getLog().debug("Teller test done----------------------------------");
}
*/
public void testMultiThread()
throws Exception
{
TellerHome home = (TellerHome)PortableRemoteObject.narrow(
new InitialContext().lookup(TellerHome.JNDI_NAME),
TellerHome.class);
final Teller teller = home.create();
getLog().debug("Acquire customers");
Customer marc = teller.getCustomer("Marc");
Customer rickard = teller.getCustomer("Rickard");
getLog().debug("Acquire accounts");
final Account from = teller.getAccount(marc, 50);
final Account to = teller.getAccount(rickard, 0);
final Object lock = new Object();
iter = getThreadCount();
final int iterationCount = getIterationCount();
getLog().info("Start test. "+getThreadCount()+ " threads,
"+getIterationCount()+" iterations");
long start = System.currentTimeMillis();
for (int i = 0; i < getThreadCount(); i++)
{
Thread.sleep(50);
new Thread(new Runnable()
{
public void run()
{
Category log = Category.getInstance(getClass().getName());
try
{
for (int j = 0; j < iterationCount; j++)
{
if (exc != null) break;
teller.transfer(from,to,50);
teller.transfer(from,to,-50);
// Thread.currentThread().yield();
// logdebug(idx++);
}
} catch (Exception e)
{
exc = e;
}
synchronized(lock)
{
iter--;
log.info("Only "+iter+" left");
lock.notifyAll();
}
}
}).start();
}
synchronized(lock)
{
while(iter>0)
{
lock.wait();
}
}
if (exc != null) throw exc;
long end = System.currentTimeMillis();
getLog().info("Show balance");
getLog().info(from.getPrimaryKey()+":"+from.getBalance());
getLog().info(to.getPrimaryKey()+":"+to.getBalance());
getLog().info("Time:"+(end-start));
getLog().info("Avg.
time/call(ms):"+((end-start)/(getThreadCount()*getIterationCount()*6)));
}
public void testMultiThread2()
throws Exception
{
TellerHome home = (TellerHome)PortableRemoteObject.narrow(
new InitialContext().lookup(TellerHome.JNDI_NAME),
TellerHome.class);
final Teller teller = home.create();
getLog().debug("Acquire customers");
final Customer marc = teller.getCustomer("Marc");
final Customer rickard = teller.getCustomer("Rickard");
final Object lock = new Object();
iter = getThreadCount();
final int iterationCount = getIterationCount();
getLog().info("Start test. "+getThreadCount()+ " threads,
"+getIterationCount()+" iterations");
long start = System.currentTimeMillis();
for (int i = 0; i < getThreadCount(); i++)
{
Thread.sleep(500); // Wait between each client
new Thread(new Runnable()
{
Category log = Category.getInstance(getClass().getName());
public void run()
{
try
{
Account from = teller.createAccount(marc, 50);
Account to = teller.createAccount(rickard, 0);
for (int j = 0; j < iterationCount; j++)
{
if (exc != null) break;
teller.transfer(from,to,50);
teller.transfer(from,to,-50);
// Thread.currentThread().yield();
// log.debug(idx++);
}
} catch (Exception e)
{
exc = e;
}
synchronized(lock)
{
iter--;
log.info("Only "+iter+" left");
lock.notifyAll();
}
}
}).start();
}
synchronized(lock)
{
while(iter>0)
{
lock.wait();
}
}
if (exc != null) throw exc;
long end = System.currentTimeMillis();
getLog().info("Time:"+(end-start));
getLog().info("Avg.
time/call(ms):"+((end-start)/(getThreadCount()*getIterationCount()*6)));
}
public void testTransaction()
throws Exception
{
TellerHome home = (TellerHome)PortableRemoteObject.narrow(
new InitialContext().lookup(TellerHome.JNDI_NAME),
TellerHome.class);
Teller teller = home.create();
getLog().debug("Acquire customers");
Customer marc = teller.getCustomer("Marc");
getLog().debug("Marc acquired");
Customer rickard = teller.getCustomer("Rickard");
getLog().debug("Rickard acquired");
getLog().debug("Acquire accounts");
Account from = teller.getAccount(marc, 50);
Account to = teller.getAccount(rickard, 0);
getLog().debug("Show balance");
getLog().debug(from.getPrimaryKey()+":"+from.getBalance());
getLog().debug(to.getPrimaryKey()+":"+to.getBalance());
getLog().debug("Transfer money");
teller.transfer(from, to, 50);
getLog().debug("Transfer done");
getLog().debug("Show balance");
getLog().debug(from.getPrimaryKey()+"("+from.getOwner().getName()+"):"+from.getBalance());
getLog().debug(to.getPrimaryKey()+"("+to.getOwner().getName()+"):"+to.getBalance());
teller.remove();
}
public void testTransfer()
throws Exception
{
TellerHome home = (TellerHome)PortableRemoteObject.narrow(
new InitialContext().lookup(TellerHome.JNDI_NAME),
TellerHome.class);
Teller teller = home.create();
getLog().debug("Acquire customers");
Customer marc = teller.getCustomer("Marc");
getLog().debug("Marc acquired");
Customer rickard = teller.getCustomer("Rickard");
getLog().debug("Rickard acquired");
getLog().debug("Acquire accounts");
Account from = teller.getAccount(marc, 50*getIterationCount());
Account to = teller.getAccount(rickard, 0);
getLog().debug("Show balance");
getLog().debug(from.getPrimaryKey()+":"+from.getBalance());
getLog().debug(to.getPrimaryKey()+":"+to.getBalance());
getLog().info("Transfer money");
long start = System.currentTimeMillis();
teller.transferTest(from, to, 50, getIterationCount());
long end = System.currentTimeMillis();
getLog().info("Transfer done");
getLog().info("Total time(ms):"+(end-start));
getLog().info("Avg. time/call(ms):"+((end-start)/(getIterationCount()*2)));
getLog().debug("Show balance");
getLog().debug(from.getPrimaryKey()+":"+from.getBalance());
getLog().debug(to.getPrimaryKey()+":"+to.getBalance());
teller.remove();
}
public void testReadOnly()
throws Exception
{
TellerHome home = (TellerHome)PortableRemoteObject.narrow(
new InitialContext().lookup(TellerHome.JNDI_NAME),
TellerHome.class);
Teller teller = home.create();
getLog().debug("Acquire customers");
Customer marc = teller.getCustomer("Marc");
getLog().debug("Marc acquired");
Customer rickard = teller.getCustomer("Rickard");
getLog().debug("Rickard acquired");
getLog().debug("Acquire accounts");
Account from = teller.getAccount(marc, 50*getIterationCount());
Account to = teller.getAccount(rickard, 0);
getLog().info("Do read calls");
long start = System.currentTimeMillis();
for (int i = 0; i < getIterationCount(); i++)
{
marc.getName();
from.getBalance();
rickard.getName();
to.getBalance();
}
long end = System.currentTimeMillis();
getLog().info("Calls done");
getLog().info("Total time(ms):"+(end-start));
getLog().info("Avg. time/call(ms):"+((end-start)/(getIterationCount()*4)));
teller.remove();
}
public void testPassivation()
throws Exception
{
// Create a bunch of customers, to test passivation
CustomerHome home = (CustomerHome)PortableRemoteObject.narrow(
new InitialContext().lookup(CustomerHome.JNDI_NAME),
CustomerHome.class);
getLog().info("Create customers");
for (int i = 0; i < getIterationCount(); i++)
home.create(i+"", "Smith_"+i);
getLog().debug("Customers created");
}
public void testFinder()
throws Exception
{
//create some accounts
testPassivation();
AccountHome home = (AccountHome)PortableRemoteObject.narrow(
new InitialContext().lookup(AccountHome.JNDI_NAME),
AccountHome.class);
getLog().info("Get large accounts");
Iterator enum = home.findLargeAccounts(-1).iterator();
while (enum.hasNext())
{
Account acct = (Account)PortableRemoteObject.narrow(enum.next(),
Account.class);
getLog().debug(acct.getOwner().getName()+":"+acct.getBalance());
}
}
protected void setUp()
throws Exception
{
if (System.getSecurityManager() == null)
System.setSecurityManager(new java.rmi.RMISecurityManager());
getLog().info("Remove accounts");
{
AccountHome home = (AccountHome)PortableRemoteObject.narrow(
new InitialContext().lookup(AccountHome.JNDI_NAME),
AccountHome.class);
Collection accounts = home.findAll();
Iterator enum = accounts.iterator();
while(enum.hasNext())
{
Account acct = (Account)PortableRemoteObject.narrow(enum.next(),
Account.class);
getLog().debug("Removing "+acct.getPrimaryKey());
acct.remove();
}
}
getLog().info("Remove customers");
{
CustomerHome home = (CustomerHome)PortableRemoteObject.narrow(
new InitialContext().lookup(CustomerHome.JNDI_NAME),
CustomerHome.class);
Collection customers = home.findAll();
Iterator enum = customers.iterator();
while(enum.hasNext())
{
Customer cust =
(Customer)PortableRemoteObject.narrow(enum.next(),
Customer.class);
getLog().debug("Removing "+cust.getPrimaryKey());
cust.remove();
}
}
}
public static Test suite() throws Exception
{
return getDeploySetup(BankStressTestCase.class, "bankiiop.jar");
}
}
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development