/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package Sirius.server.middleware.impls.domainserver;
import Sirius.server.ServerExit;
import Sirius.server.middleware.impls.proxy.StartProxy;
import Sirius.server.middleware.interfaces.proxy.MetaService;
import Sirius.server.middleware.interfaces.proxy.UserService;
import Sirius.server.middleware.types.MetaObject;
import Sirius.server.newuser.User;
import Sirius.server.property.ServerProperties;
import Sirius.server.registry.Registry;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.util.Properties;
import de.cismet.cids.server.ws.rest.RESTfulSerialInterfaceConnector;
import de.cismet.cids.server.ws.rest.RESTfulService;
/**
* DOCUMENT ME!
*
* @author mscholl
* @version $Revision$, $Date$
*/
public class RMIvsRESTTest {
//~ Static fields/initializers ---------------------------------------------
private static final String ROOT_RESOURCE = "http://localhost:8011/callserver/binary/"; // NOI18N
private static final String SERVER_CONFIG =
"src/test/resources/Sirius/server/localserver/object/runtime.properties"; // NOI18N
private static final String STARTMODE = "notSimple"; // NOI18N
private static RESTfulSerialInterfaceConnector connector;
private static Registry registry;
private static StartProxy proxy;
private static DomainServerImpl server;
//~ Instance fields --------------------------------------------------------
private transient volatile long fastest;
private transient volatile long slowest;
private transient volatile long average;
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @throws Throwable DOCUMENT ME!
*/
//@BeforeClass
public static void setUpClass() throws Throwable {
final Properties p = new Properties();
p.put("log4j.appender.Remote", "org.apache.log4j.net.SocketAppender");
p.put("log4j.appender.Remote.remoteHost", "localhost");
p.put("log4j.appender.Remote.port", "4445");
p.put("log4j.appender.Remote.locationInfo", "true");
p.put("log4j.rootLogger", "ALL,Remote");
org.apache.log4j.PropertyConfigurator.configure(p);
registry = new Sirius.server.registry.Registry(1099);
proxy = StartProxy.getInstance(SERVER_CONFIG);
final PropertiesWrapper pw = new PropertiesWrapper(SERVER_CONFIG);
pw.setStartMode(STARTMODE);
RESTfulService.up(pw);
server = new DomainServerImpl(pw);
connector = new RESTfulSerialInterfaceConnector(ROOT_RESOURCE);
}
/**
* DOCUMENT ME!
*
* @throws Throwable Exception DOCUMENT ME!
*/
//@AfterClass
public static void tearDownClass() throws Throwable {
RESTfulService.down();
try {
server.shutdown();
} catch (final ServerExit e) {
// success
}
try {
proxy.shutdown();
} catch (final ServerExit e) {
// success
}
try {
registry.shutdown();
} catch (final ServerExit serverExit) {
// success...
}
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
@Before
public void setUp() throws Exception {
// admin = connector.getUser("WUNDA_BLAU", "Administratoren", "WUNDA_BLAU", "admin", "sb");
}
/**
* DOCUMENT ME!
*/
@After
public void tearDown() {
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
private String getCurrentMethodName() {
return new Throwable().getStackTrace()[1].getMethodName();
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
* @throws RuntimeException DOCUMENT ME!
*/
@Ignore
@Test
public void testGetMetaObjectRMI() throws Exception {
System.out.println("\nTEST: " + getCurrentMethodName());
final Object callserver = Naming.lookup("rmi://localhost/callServer");
final User user = ((UserService)callserver).getUser(
"WUNDA_BLAU",
"Administratoren",
"WUNDA_BLAU",
"cismet",
"sb");
final String domain = "WUNDA_BLAU";
final int objectID = 3;
final int classID = 106;
fastest = Long.MAX_VALUE;
slowest = Long.MIN_VALUE;
average = 0;
for (int i = 0; i < 1000; ++i) {
final long before = System.currentTimeMillis();
final MetaObject result = ((MetaService)callserver).getMetaObject(user, objectID, classID, domain);
final long after = System.currentTimeMillis();
if ((i % 50) == 0) {
System.out.println(i + " MOs received");
}
final long duration = after - before;
if (duration < fastest) {
fastest = duration;
} else if (duration > slowest) {
slowest = duration;
}
average += duration;
}
System.out.println("RMI st fastest: " + fastest);
System.out.println("RMI st slowest: " + slowest);
System.out.println("RMI st average: " + (average / 1000));
fastest = Long.MAX_VALUE;
slowest = Long.MIN_VALUE;
average = 0;
final Runnable runner = new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i < 200; ++i) {
final long before = System.currentTimeMillis();
final MetaObject result = ((MetaService)callserver).getMetaObject(
user,
objectID,
classID,
domain);
final long after = System.currentTimeMillis();
final long duration = after - before;
if (duration < fastest) {
fastest = duration;
} else if (duration > slowest) {
slowest = duration;
}
average += duration;
}
} catch (final RemoteException ex) {
System.err.println("ex" + ex);
ex.printStackTrace();
throw new RuntimeException(ex.getMessage(), ex);
}
}
};
final Thread t1 = new Thread(runner);
final Thread t2 = new Thread(runner);
final Thread t3 = new Thread(runner);
final Thread t4 = new Thread(runner);
final Thread t5 = new Thread(runner);
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
t1.join();
t2.join();
t3.join();
t4.join();
t5.join();
System.out.println("RMI mt fastest: " + fastest);
System.out.println("RMI mt slowest: " + slowest);
System.out.println("RMI mt average: " + (average / 1000));
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
* @throws RuntimeException DOCUMENT ME!
*/
@Ignore
@Test
public void testGetMetaObjectREST() throws Exception {
System.out.println("\nTEST: " + getCurrentMethodName());
final User user = connector.getUser("WUNDA_BLAU", "Administratoren", "WUNDA_BLAU", "admin", "cismet");
final String domain = "WUNDA_BLAU";
final int objectID = 3;
final int classID = 106;
fastest = Long.MAX_VALUE;
slowest = Long.MIN_VALUE;
average = 0;
for (int i = 0; i < 1000; ++i) {
final long before = System.currentTimeMillis();
final MetaObject result = connector.getMetaObject(user, objectID, classID, domain);
final long after = System.currentTimeMillis();
if ((i % 50) == 0) {
System.out.println(i + "MOs received");
}
final long duration = after - before;
if (duration < fastest) {
fastest = duration;
} else if (duration > slowest) {
slowest = duration;
}
average += duration;
}
System.out.println("REST fastest: " + fastest);
System.out.println("REST slowest: " + slowest);
System.out.println("REST average: " + (average / 1000));
fastest = Long.MAX_VALUE;
slowest = Long.MIN_VALUE;
average = 0;
final Runnable runner = new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i < 200; ++i) {
final long before = System.currentTimeMillis();
final MetaObject result = connector.getMetaObject(
user,
objectID,
classID,
domain);
final long after = System.currentTimeMillis();
final long duration = after - before;
if (duration < fastest) {
fastest = duration;
} else if (duration > slowest) {
slowest = duration;
}
average += duration;
}
} catch (final RemoteException ex) {
System.err.println("ex" + ex);
ex.printStackTrace();
throw new RuntimeException(ex.getMessage(), ex);
}
}
};
final Thread t1 = new Thread(runner);
final Thread t2 = new Thread(runner);
final Thread t3 = new Thread(runner);
final Thread t4 = new Thread(runner);
final Thread t5 = new Thread(runner);
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
t1.join();
t2.join();
t3.join();
t4.join();
t5.join();
System.out.println("REST mt fastest: " + fastest);
System.out.println("REST mt slowest: " + slowest);
System.out.println("REST mt average: " + (average / 1000));
}
//~ Inner Classes ----------------------------------------------------------
/**
* DOCUMENT ME!
*
* @version $Revision$, $Date$
*/
private static final class PropertiesWrapper extends ServerProperties {
//~ Instance fields ----------------------------------------------------
private transient String startMode;
//~ Constructors -------------------------------------------------------
/**
* Creates a new PropertiesWrapper object.
*
* @param configFile DOCUMENT ME!
*
* @throws FileNotFoundException DOCUMENT ME!
* @throws IOException DOCUMENT ME!
*/
public PropertiesWrapper(final String configFile) throws FileNotFoundException, IOException {
super(configFile);
}
//~ Methods ------------------------------------------------------------
@Override
public String getStartMode() {
if (startMode == null) {
return super.getStartMode();
} else {
return startMode;
}
}
/**
* DOCUMENT ME!
*
* @param startMode DOCUMENT ME!
*/
public void setStartMode(final String startMode) {
this.startMode = startMode;
}
}
}