/**
* 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 org.junit.Test;
import util.TestAny;
public class TestSocketConnection extends TestAny {
@Test(timeout = 3 * 1000)
public void connectionLifeCycle() 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);
final SocketUDT server = accept.accept();
assertNotNull(server);
assertNull(accept.accept());
socketAwait(server, StatusUDT.CONNECTED);
log.info("### step 1: both server and client are connected");
log.info("client = {}", client);
log.info("server = {}", server);
client.close();
socketAwait(client, StatusUDT.CLOSED);
socketAwait(server, StatusUDT.BROKEN);
log.info("### step 2: server must be broken after and client is closed");
log.info("client = {}", client);
log.info("server = {}", server);
server.close();
socketAwait(server, StatusUDT.CLOSED);
log.info("### step 3: server must be closed after server is closed");
log.info("client = {}", client);
log.info("server = {}", server);
accept.close();
}
}