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.vmpipe;
21
22 import java.util.concurrent.Semaphore;
23 import java.util.concurrent.TimeUnit;
24
25 import junit.framework.Assert;
26 import junit.framework.TestCase;
27
28 import org.apache.mina.common.ByteBuffer;
29 import org.apache.mina.common.ConnectFuture;
30 import org.apache.mina.common.IoAcceptor;
31 import org.apache.mina.common.IoConnector;
32 import org.apache.mina.common.IoHandlerAdapter;
33 import org.apache.mina.common.IoSession;
34 import org.apache.mina.common.ThreadModel;
35
36
37
38
39
40
41
42 public class VmPipeEventOrderTest extends TestCase {
43 public void testServerToClient() throws Exception {
44 IoAcceptor acceptor = new VmPipeAcceptor();
45 acceptor.getDefaultConfig().setThreadModel(ThreadModel.MANUAL);
46
47
48 IoConnector connector = new VmPipeConnector();
49 connector.getDefaultConfig().setThreadModel(ThreadModel.MANUAL);
50
51
52 acceptor.bind(new VmPipeAddress(1), new IoHandlerAdapter() {
53 public void sessionOpened(IoSession session) throws Exception {
54 session.write("B");
55 }
56
57 public void messageSent(IoSession session, Object message)
58 throws Exception {
59 session.close();
60 }
61 });
62
63 final StringBuffer actual = new StringBuffer();
64
65 ConnectFuture future = connector.connect(new VmPipeAddress(1),
66 new IoHandlerAdapter() {
67
68 public void messageReceived(IoSession session,
69 Object message) throws Exception {
70 actual.append(message);
71 }
72
73 public void sessionClosed(IoSession session)
74 throws Exception {
75 actual.append("C");
76 }
77
78 public void sessionOpened(IoSession session)
79 throws Exception {
80 actual.append("A");
81 }
82
83 });
84
85 future.join();
86 future.getSession().getCloseFuture().join();
87 acceptor.unbindAll();
88
89
90
91 while (actual.indexOf("C") < 0) {
92 Thread.yield();
93 }
94
95 Assert.assertEquals("ABC", actual.toString());
96 }
97
98 public void testClientToServer() throws Exception {
99 IoAcceptor acceptor = new VmPipeAcceptor();
100 acceptor.getDefaultConfig().setThreadModel(ThreadModel.MANUAL);
101
102
103 IoConnector connector = new VmPipeConnector();
104 connector.getDefaultConfig().setThreadModel(ThreadModel.MANUAL);
105
106
107 final StringBuffer actual = new StringBuffer();
108
109 acceptor.bind(new VmPipeAddress(1), new IoHandlerAdapter() {
110
111 public void messageReceived(IoSession session, Object message)
112 throws Exception {
113 actual.append(message);
114 }
115
116 public void sessionClosed(IoSession session) throws Exception {
117 actual.append("C");
118 }
119
120 public void sessionOpened(IoSession session) throws Exception {
121 actual.append("A");
122 }
123
124 });
125
126 ConnectFuture future = connector.connect(new VmPipeAddress(1),
127 new IoHandlerAdapter() {
128 public void sessionOpened(IoSession session)
129 throws Exception {
130 session.write("B");
131 }
132
133 public void messageSent(IoSession session, Object message)
134 throws Exception {
135 session.close();
136 }
137 });
138
139 future.join();
140 future.getSession().getCloseFuture().join();
141 acceptor.unbindAll();
142
143
144
145 while (actual.indexOf("C") < 0) {
146 Thread.yield();
147 }
148
149 Assert.assertEquals("ABC", actual.toString());
150 }
151
152 public void testSessionCreated() throws Exception {
153 final Semaphore semaphore = new Semaphore(0);
154 final StringBuffer stringBuffer = new StringBuffer();
155 VmPipeAcceptor vmPipeAcceptor = new VmPipeAcceptor();
156 vmPipeAcceptor.getDefaultConfig().setThreadModel(ThreadModel.MANUAL);
157 final VmPipeAddress vmPipeAddress = new VmPipeAddress(12345);
158 vmPipeAcceptor.bind(vmPipeAddress, new IoHandlerAdapter() {
159 public void sessionCreated(IoSession session) throws Exception {
160
161
162
163
164 Thread.sleep(1000);
165 stringBuffer.append("A");
166 }
167
168 public void sessionOpened(IoSession session) throws Exception {
169 stringBuffer.append("B");
170 }
171
172 public void messageReceived(IoSession session, Object message)
173 throws Exception {
174 stringBuffer.append("C");
175 }
176
177 public void sessionClosed(IoSession session) throws Exception {
178 stringBuffer.append("D");
179 semaphore.release();
180 }
181 });
182
183 final VmPipeConnector vmPipeConnector = new VmPipeConnector();
184 ConnectFuture connectFuture = vmPipeConnector.connect(vmPipeAddress, new IoHandlerAdapter() {
185 public void sessionOpened(IoSession session) throws Exception {
186 session.write(ByteBuffer.wrap(new byte[1]));
187 }
188 });
189
190 connectFuture.join();
191 connectFuture.getSession().close();
192 semaphore.tryAcquire(1, TimeUnit.SECONDS);
193 vmPipeAcceptor.unbind(vmPipeAddress);
194 Assert.assertEquals("ABCD", stringBuffer.toString());
195 }
196 }