package io.craft.atom.nio; import io.craft.atom.io.IoAcceptor; import io.craft.atom.nio.api.NioFactory; import io.craft.atom.test.AvailablePortFinder; import io.craft.atom.test.CaseCounter; import java.io.IOException; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author mindwind * @version 1.0, 2011-12-20 */ public class TestNioTcpAcceptor { private static final Logger LOG = LoggerFactory.getLogger(TestNioTcpAcceptor.class); private static final int PORT = AvailablePortFinder.getNextAvailable(33333) ; private IoAcceptor acceptor; @Before public void before() throws IOException { acceptor = NioFactory.newTcpAcceptor(new NioAcceptorHandler()); acceptor.bind(PORT); } @After public void after() { acceptor.shutdown(); } @Test public void testDuplicateBind() throws IOException { Assert.assertEquals(1, acceptor.getBoundAddresses().size()); try { acceptor.bind(PORT); Assert.fail(); } catch(IOException e) { LOG.debug("[CRAFT-ATOM-NIO] Duplicate bind throw exception", e); } System.out.println(String.format("[CRAFT-ATOM-NIO] (^_^) <%s> Case -> test nio tcp acceptor duplicate bind. ", CaseCounter.incr(1))); } @Test public void testDuplicateUnbind() throws IOException { // this should succeed acceptor.unbind(PORT); // this shouldn't fail acceptor.unbind(PORT); Assert.assertEquals(0, acceptor.getBoundAddresses().size()); System.out.println(String.format("[CRAFT-ATOM-NIO] (^_^) <%s> Case -> test nio tcp acceptor duplicate unbind. ", CaseCounter.incr(1))); } @Test public void testBindAndUnbindManyTimes() throws IOException { for (int i = 0; i < 16; i++) { acceptor.unbind(PORT); Assert.assertEquals(0, acceptor.getBoundAddresses().size()); acceptor.bind(PORT); LOG.debug("[CRAFT-ATOM-NIO] Bind and unbind time {} ", i); } Assert.assertEquals(1, acceptor.getBoundAddresses().size()); System.out.println(String.format("[CRAFT-ATOM-NIO] (^_^) <%s> Case -> test nio tcp acceptor bind & unbind many times. ", CaseCounter.incr(1))); } }