/**
* Copyright (C) 2009-2013 Barchart, Inc. <http://www.barchart.com/>
*
* All rights reserved. Licensed under the OSI BSD License.
*
* http://www.opensource.org/licenses/bsd-license.php
*/
package com.barchart.udt;
import static org.junit.Assert.*;
import static util.UnitHelp.*;
import java.net.InetSocketAddress;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import util.TestAny;
public class TestSocketUDT extends TestAny {
@Test
public void acceptListenNone() throws Exception {
final SocketUDT socket = new SocketUDT(TypeUDT.DATAGRAM);
socket.setBlocking(false);
socket.bind(localSocketAddress());
socket.listen(1);
assertNull(socket.accept());
socket.close();
}
@Test(timeout = 3 * 1000)
public void acceptListenOne() throws Exception {
final SocketUDT accept = new SocketUDT(TypeUDT.DATAGRAM);
accept.setBlocking(false);
accept.bind(localSocketAddress());
socketAwait(accept, StatusUDT.OPENED);
accept.listen(1);
socketAwait(accept, StatusUDT.LISTENING);
assertEquals(StatusUDT.LISTENING, accept.status());
assertNull(accept.accept());
final SocketUDT client = new SocketUDT(TypeUDT.DATAGRAM);
client.setBlocking(false);
client.bind(localSocketAddress());
socketAwait(client, StatusUDT.OPENED);
client.connect(accept.getLocalSocketAddress());
socketAwait(client, StatusUDT.CONNECTED);
assertNotNull(accept.accept());
assertNull(accept.accept());
accept.close();
client.close();
}
@Test(expected = ExceptionUDT.class)
public void acceptNoListen() throws Exception {
final SocketUDT socket = new SocketUDT(TypeUDT.DATAGRAM);
socket.accept();
socket.close();
}
@Before
public void setUp() throws Exception {
}
@Test
public void socketOpenClose() throws Exception {
final SocketUDT socket = new SocketUDT(TypeUDT.DATAGRAM);
assertTrue(socket.isOpen());
socket.setOption(OptionUDT.Is_Receive_Synchronous, false);
socket.setOption(OptionUDT.Is_Send_Synchronous, false);
assertTrue(socket.isOpen());
final InetSocketAddress localSocketAddress = localSocketAddress();
socket.bind(localSocketAddress);
assertTrue(socket.isOpen());
socket.listen(1);
assertTrue(socket.isOpen());
final SocketUDT connector = socket.accept();
assertNull(connector);
assertTrue(socket.isOpen());
socket.close();
assertFalse(socket.isOpen());
socket.close();
assertFalse(socket.isOpen());
socket.close();
assertTrue(socket.isClosed());
socket.close();
assertTrue(socket.isClosed());
socket.close();
}
@After
public void tearDown() throws Exception {
}
@Test(expected = ExceptionUDT.class)
public void testInvalidClose0() throws ExceptionUDT {
SocketUDT socket = null;
try {
socket = new SocketUDT(TypeUDT.DATAGRAM);
} catch (final ExceptionUDT e) {
fail("SocketException; " + e.getMessage());
}
final int realID = socket.id();
final int fakeID = realID + 123;
log.info("real: {} ; fake : {} ; ", realID, fakeID);
/** must throw */
SocketUDT.testInvalidClose0(fakeID);
}
@Test
public void testToString() throws Exception {
final SocketUDT socket = new SocketUDT(TypeUDT.DATAGRAM);
log.info("{}", socket);
}
/** udt uses hard coded connect timeout of 3 seconds */
@Test(timeout = 10 * 1000)
public void connectTimeout() throws Exception {
final SocketUDT socket = new SocketUDT(TypeUDT.DATAGRAM);
long timeStart = 0;
long timeFinish = 0;
try {
socket.bind(localSocketAddress());
timeStart = System.currentTimeMillis();
socket.connect(localSocketAddress());
} catch (final ExceptionUDT e) {
switch (e.getError()) {
case NOSERVER:
timeFinish = System.currentTimeMillis();
return;
}
} finally {
socket.close();
final long timeDiff = timeFinish - timeStart;
log.info("timeout = {} seconds", timeDiff / 1000);
}
}
}