/* * 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; } } }