blob: 214cea4785f1e053812d8966940360f9d4dfafb8 [file] [log] [blame]
/*
* Copyright (c) 2008, 2009, 2011, 2012, 2015 Eike Stepper (Berlin, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eike Stepper - initial API and implementation
* Teerawat Chaiyakijpichet (No Magic Asia Ltd.) - SSL
*/
package org.eclipse.net4j.tests;
import org.eclipse.net4j.signal.IndicationWithMonitoring;
import org.eclipse.net4j.signal.RequestWithMonitoring;
import org.eclipse.net4j.signal.SignalProtocol;
import org.eclipse.net4j.signal.SignalReactor;
import org.eclipse.net4j.util.container.IManagedContainer;
import org.eclipse.net4j.util.factory.ProductCreationException;
import org.eclipse.net4j.util.io.ExtendedDataInputStream;
import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
import org.eclipse.net4j.util.om.monitor.Monitor;
import org.eclipse.net4j.util.om.monitor.OMMonitor;
import org.eclipse.spi.net4j.ServerProtocolFactory;
/**
* @author Eike Stepper
*/
public class SignalMonitorTest extends AbstractTransportTest
{
public static final String PROTOCOL_TYPE = "protocol"; //$NON-NLS-1$
public static final short SIGNAL_ID = 1;
@Override
protected IManagedContainer createContainer()
{
IManagedContainer container = super.createContainer();
container.registerFactory(new ServerProtocolFactory(PROTOCOL_TYPE)
{
public Object create(String description) throws ProductCreationException
{
return new SignalProtocol<Object>(PROTOCOL_TYPE)
{
@Override
protected SignalReactor createSignalReactor(short signalID)
{
switch (signalID)
{
case SIGNAL_ID:
return new IndicationWithMonitoring(this, SIGNAL_ID)
{
@Override
protected void indicating(ExtendedDataInputStream in, OMMonitor monitor) throws Exception
{
monitor.begin(1 + 100);
try
{
in.readBoolean();
monitor.worked();
for (int i = 0; i < 100; i++)
{
sleep(100);
monitor.worked();
}
}
finally
{
monitor.done();
}
}
@Override
protected void responding(ExtendedDataOutputStream out, OMMonitor monitor) throws Exception
{
monitor.begin();
try
{
out.writeBoolean(true);
monitor.worked();
}
finally
{
monitor.done();
}
}
};
default:
return super.createSignalReactor(signalID);
}
}
};
}
});
return container;
}
public void testMonitorProgress() throws Exception
{
startTransport();
SignalProtocol<Object> protocol = new ClientProtocol();
protocol.open(getConnector());
RequestWithMonitoring<Boolean> request = new RequestWithMonitoring<Boolean>(protocol, SIGNAL_ID)
{
@Override
protected void requesting(ExtendedDataOutputStream out, OMMonitor monitor) throws Exception
{
monitor.begin();
try
{
out.writeBoolean(true);
monitor.worked();
}
finally
{
monitor.done();
}
}
@Override
protected Boolean confirming(ExtendedDataInputStream in, OMMonitor monitor) throws Exception
{
monitor.begin();
try
{
boolean result = in.readBoolean();
monitor.worked();
return result;
}
finally
{
monitor.done();
}
}
};
request.send(4000L, new TestMonitor());
sleep(200);
protocol.close();
}
/**
* @author Eike Stepper
*/
public static final class ClientProtocol extends SignalProtocol<Object>
{
public ClientProtocol()
{
super(PROTOCOL_TYPE);
}
}
/**
* @author Eike Stepper
*/
private static final class TestMonitor extends Monitor
{
@Override
public OMMonitor begin(double totalWork)
{
super.begin(totalWork);
System.out.println("totalWork: " + getTotalWork()); //$NON-NLS-1$
return this;
}
@Override
public void worked(double work)
{
super.worked(work);
System.out.println("work: " + getWork()); //$NON-NLS-1$
}
}
/**
* @author Eike Stepper
*/
public static final class TCP extends SignalMonitorTest
{
@Override
protected boolean useJVMTransport()
{
return false;
}
@Override
protected boolean useSSLTransport()
{
return false;
}
}
/**
* @author Teerawat Chaiyakijpichet (No Magic Asia Ltd.)
*/
public static final class SSL extends SignalMonitorTest
{
@Override
protected boolean useJVMTransport()
{
return false;
}
@Override
protected boolean useSSLTransport()
{
return true;
}
}
}