package uc.protocol;
import static org.junit.Assert.*;
import helpers.GH;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import uc.protocols.Socks;
import uc.protocols.Socks.UDPRelay;
public class SocksTest {
private static final InetSocketAddress socksserver = new InetSocketAddress("192.168.0.18",1080); //$NON-NLS-1$
private static Thread t;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
t = new Thread() {
public void run() {
SOCKS.main(new String[] {});
}
};
t.start();
GH.sleep(1000);
}
@SuppressWarnings("deprecation")
@AfterClass
public static void tearDownAfterClass() throws Exception {
if (t != null) {
t.interrupt();
t.stop();
}
}
@Test
public void testConnect() {
Socks s = new Socks("","",socksserver); //$NON-NLS-1$ //$NON-NLS-2$
try {
SocketChannel sc = SocketChannel.open();
s.connect(sc, new InetSocketAddress("du-hub1.dnsalias.com",6999)); //$NON-NLS-1$
ByteBuffer bu = ByteBuffer.allocate(20);
int count = sc.read(bu);
assertTrue(Messages.SocksTest_4,count > 0);
bu.flip();
String lock = new String(bu.array());
assertTrue("Message did not start with $Lock: "+lock, lock.startsWith("$Lock ")); //$NON-NLS-1$ //$NON-NLS-2$
} catch(IOException ioe) {
ioe.printStackTrace();
fail("IOE: "+ioe); //$NON-NLS-1$
}
}
@SuppressWarnings("resource")
@Test
public void testOpenUDPRelay() {
Socks s = new Socks("","",socksserver); //$NON-NLS-1$ //$NON-NLS-2$
try {
int localPort = 23232;
DatagramSocket ds = new DatagramSocket(localPort);
ds.setSoTimeout(5000);
UDPRelay udpr = s.openUDPRelay();
String written = "0123456789"; //$NON-NLS-1$
udpr.send(written.getBytes(), new InetSocketAddress("192.168.0.18",localPort)); //$NON-NLS-1$
DatagramPacket dp = new DatagramPacket(new byte[10],10);
ds.receive(dp);
String read = new String(dp.getData());
assertEquals(written, read);
} catch(IOException ioe) {
ioe.printStackTrace();
fail(Messages.SocksTest_12+ioe);
}
}
}