1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.transport.socket.nio;
21
22 import java.net.InetSocketAddress;
23
24 import junit.framework.Assert;
25 import junit.framework.TestCase;
26
27 import org.apache.mina.core.buffer.IoBuffer;
28 import org.apache.mina.core.filterchain.IoFilter;
29 import org.apache.mina.core.filterchain.IoFilterAdapter;
30 import org.apache.mina.core.future.ConnectFuture;
31 import org.apache.mina.core.future.WriteFuture;
32 import org.apache.mina.core.service.IoAcceptor;
33 import org.apache.mina.core.service.IoConnector;
34 import org.apache.mina.core.service.IoHandler;
35 import org.apache.mina.core.service.IoHandlerAdapter;
36 import org.apache.mina.core.session.IoSession;
37 import org.apache.mina.util.AvailablePortFinder;
38
39
40
41
42
43
44 public class DatagramConfigTest extends TestCase {
45 private IoAcceptor acceptor;
46 private IoConnector connector;
47 String result;
48
49 public DatagramConfigTest() {
50
51 }
52
53 @Override
54 protected void setUp() throws Exception {
55 result = "";
56 acceptor = new NioDatagramAcceptor();
57 connector = new NioDatagramConnector();
58 }
59
60 @Override
61 protected void tearDown() throws Exception {
62 acceptor.dispose();
63 connector.dispose();
64 }
65
66 public void testAcceptorFilterChain() throws Exception {
67 int port = AvailablePortFinder.getNextAvailable(1024);
68 IoFilter mockFilter = new MockFilter();
69 IoHandler mockHandler = new MockHandler();
70
71 acceptor.getFilterChain().addLast("mock", mockFilter);
72 acceptor.setHandler(mockHandler);
73 acceptor.bind(new InetSocketAddress(port));
74
75 try {
76 connector.setHandler(new IoHandlerAdapter());
77 ConnectFuture future = connector.connect(
78 new InetSocketAddress("127.0.0.1", port));
79 future.awaitUninterruptibly();
80
81 WriteFuture writeFuture = future.getSession().write(
82 IoBuffer.allocate(16).putInt(0).flip());
83 writeFuture.awaitUninterruptibly();
84 Assert.assertTrue(writeFuture.isWritten());
85
86 future.getSession().close(true);
87
88 for (int i = 0; i < 30; i++) {
89 if (result.length() == 2) {
90 break;
91 }
92 Thread.sleep(100);
93 }
94
95 Assert.assertEquals("FH", result);
96 } finally {
97 acceptor.unbind();
98 }
99 }
100
101 private class MockFilter extends IoFilterAdapter {
102
103
104
105 public MockFilter() {
106 super();
107 }
108
109 @Override
110 public void messageReceived(NextFilter nextFilter, IoSession session,
111 Object message) throws Exception {
112 result += "F";
113 nextFilter.messageReceived(session, message);
114 }
115
116 }
117
118 private class MockHandler extends IoHandlerAdapter {
119
120
121
122 public MockHandler() {
123 super();
124 }
125
126 @Override
127 public void messageReceived(IoSession session, Object message)
128 throws Exception {
129 result += "H";
130 }
131 }
132 }