blob: 66efd96b3f8ce3e6629a994224de00dffd700d4a [file] [log] [blame]
/*
* Copyright (c) 2006-2012 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.internal.tcp.TCPConnector;
import org.eclipse.net4j.tests.data.TinyData;
import org.eclipse.net4j.tests.signal.ArrayRequest;
import org.eclipse.net4j.tests.signal.AsyncRequest;
import org.eclipse.net4j.tests.signal.IntRequest;
import org.eclipse.net4j.tests.signal.StringRequest;
import org.eclipse.net4j.tests.signal.TestSignalProtocol;
import org.eclipse.net4j.util.ReflectUtil;
import org.eclipse.net4j.util.lifecycle.ILifecycle;
import org.eclipse.net4j.util.om.OMPlatform;
import java.io.IOException;
import java.lang.reflect.Field;
import java.nio.channels.SocketChannel;
import java.util.Arrays;
/**
* @author Eike Stepper
*/
public class SignalTest extends AbstractProtocolTest
{
public void testInteger() throws Exception
{
TestSignalProtocol protocol = null;
try
{
startTransport();
protocol = new TestSignalProtocol(getConnector());
int data = 0x0a;
int result = new IntRequest(protocol, data).send();
assertEquals(data, result);
}
finally
{
if (protocol != null)
{
protocol.close();
}
}
}
public void testArray() throws Exception
{
TestSignalProtocol protocol = null;
try
{
startTransport();
protocol = new TestSignalProtocol(getConnector());
byte[] data = TinyData.getBytes();
byte[] result = new ArrayRequest(protocol, data).send();
assertEquals(true, Arrays.equals(data, result));
}
finally
{
if (protocol != null)
{
protocol.close();
}
}
}
public void testAsync() throws Exception
{
TestSignalProtocol protocol = null;
try
{
startTransport();
OMPlatform.INSTANCE.setDebugging(false);
protocol = new TestSignalProtocol(getConnector());
String data = TinyData.getText();
for (int i = 0; i < 1000; i++)
{
msg("Loop " + i); //$NON-NLS-1$
new AsyncRequest(protocol, data).sendAsync();
String result = new StringRequest(protocol, data).send();
assertEquals(data, result);
}
}
finally
{
if (protocol != null)
{
protocol.close();
}
}
}
public void testCloseSocketChannel() throws Exception
{
TestSignalProtocol protocol = null;
try
{
startTransport();
protocol = new TestSignalProtocol(getConnector());
final ILifecycle lifecycle = protocol;
closeSocketChannel((TCPConnector)getAcceptor().getAcceptedConnectors()[0]);
new PollingTimeOuter()
{
@Override
protected boolean successful()
{
return !lifecycle.isActive();
}
}.assertNoTimeOut();
}
finally
{
if (protocol != null)
{
protocol.close();
}
}
}
private static void closeSocketChannel(TCPConnector connector) throws IOException
{
Field field = ReflectUtil.getField(TCPConnector.class, "socketChannel");
SocketChannel socketChannel = (SocketChannel)ReflectUtil.getValue(field, connector);
socketChannel.close();
}
/**
* @author Eike Stepper
*/
public static final class TCP extends SignalTest
{
@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 SignalTest
{
@Override
protected boolean useJVMTransport()
{
return false;
}
@Override
protected boolean useSSLTransport()
{
return true;
}
}
}