/** * 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 java.nio.IntBuffer; import org.junit.After; import org.junit.Before; import org.junit.Test; import util.TestAny; import com.barchart.udt.util.HelpUDT; public class TestRendezvous extends TestAny { @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test(timeout = 5 * 1000) public void rendezvousConnect() throws Exception { final InetSocketAddress addr1 = localSocketAddress(); final InetSocketAddress addr2 = localSocketAddress(); final SocketUDT peer1 = new SocketUDT(TypeUDT.DATAGRAM); final SocketUDT peer2 = new SocketUDT(TypeUDT.DATAGRAM); peer1.setBlocking(false); peer2.setBlocking(false); peer1.setRendezvous(true); peer2.setRendezvous(true); assertTrue("non blocking", peer1.isNonBlocking()); assertTrue("non blocking", peer2.isNonBlocking()); assertTrue("use randezvous", peer1.isRendezvous()); assertTrue("use randezvous", peer2.isRendezvous()); peer1.bind(addr1); peer2.bind(addr2); socketAwait(peer1, StatusUDT.OPENED); socketAwait(peer2, StatusUDT.OPENED); log.info("state 0 - bound"); log.info("peer1 : {}", peer1); log.info("peer2 : {}", peer2); peer1.connect(addr2); peer2.connect(addr1); log.info("state 1 - connecting"); log.info("peer1 : {}", peer1); log.info("peer2 : {}", peer2); socketAwait(peer1, StatusUDT.CONNECTED); socketAwait(peer2, StatusUDT.CONNECTED); log.info("state 2 - rendezvous"); log.info("peer1 : {}", peer1); log.info("peer2 : {}", peer2); peer1.close(); peer2.close(); log.info("state 3 - closed"); log.info("peer1 : {}", peer1); log.info("peer2 : {}", peer2); } @Test(timeout = 5 * 1000) public void rendezvousSelect() throws Exception { final IntBuffer readBuffer = HelpUDT.newDirectIntBufer(10); final IntBuffer writeBuffer = HelpUDT.newDirectIntBufer(10); final IntBuffer sizeBuffer = HelpUDT.newDirectIntBufer(10); final int epollID = SocketUDT.epollCreate0(); final InetSocketAddress addr1 = localSocketAddress(); final InetSocketAddress addr2 = localSocketAddress(); final SocketUDT peer1 = new SocketUDT(TypeUDT.DATAGRAM); final SocketUDT peer2 = new SocketUDT(TypeUDT.DATAGRAM); peer1.setBlocking(false); peer2.setBlocking(false); peer1.setRendezvous(true); peer2.setRendezvous(true); peer1.bind(addr1); peer2.bind(addr2); socketAwait(peer1, StatusUDT.OPENED); socketAwait(peer2, StatusUDT.OPENED); log.info("state 0 - bound"); log.info("peer1 : {}", peer1); log.info("peer2 : {}", peer2); SocketUDT.epollAdd0(epollID, peer1.id(), EpollUDT.Opt.BOTH.code); SocketUDT.epollAdd0(epollID, peer2.id(), EpollUDT.Opt.BOTH.code); peer1.connect(addr2); peer2.connect(addr1); socketAwait(peer1, StatusUDT.CONNECTED); socketAwait(peer2, StatusUDT.CONNECTED); log.info("state 1 - rendezvous"); log.info("peer1 : {}", peer1); log.info("peer2 : {}", peer2); { log.info("wait one"); clear(readBuffer); clear(writeBuffer); final int readyCount = SocketUDT.epollWait0(epollID, readBuffer, writeBuffer, sizeBuffer, SocketUDT.TIMEOUT_INFINITE); log.info("readyCount : {}", readyCount); logBuffer("read: ", readBuffer); logBuffer("write:", writeBuffer); assertEquals(2, readyCount); assertEquals(0, sizeBuffer.get(SocketUDT.UDT_READ_INDEX)); assertEquals(2, sizeBuffer.get(SocketUDT.UDT_WRITE_INDEX)); } { log.info("wait two"); clear(readBuffer); clear(writeBuffer); final int readyCount = SocketUDT.epollWait0(epollID, readBuffer, writeBuffer, sizeBuffer, SocketUDT.TIMEOUT_INFINITE); log.info("readyCount : {}", readyCount); logBuffer("read: ", readBuffer); logBuffer("write:", writeBuffer); assertEquals(2, readyCount); assertEquals(0, sizeBuffer.get(SocketUDT.UDT_READ_INDEX)); assertEquals(2, sizeBuffer.get(SocketUDT.UDT_WRITE_INDEX)); } peer1.close(); peer2.close(); SocketUDT.epollRelease0(epollID); } }