1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.core;
21
22 import java.net.InetSocketAddress;
23 import java.net.SocketAddress;
24
25 import org.apache.mina.core.service.IoAcceptor;
26 import org.apache.mina.core.service.IoConnector;
27 import org.apache.mina.core.service.IoHandler;
28 import org.apache.mina.core.service.IoService;
29 import org.apache.mina.core.service.IoServiceListener;
30 import org.apache.mina.core.service.IoServiceListenerSupport;
31 import org.apache.mina.core.session.DummySession;
32 import org.easymock.EasyMock;
33 import org.junit.Test;
34
35 import static org.junit.Assert.assertTrue;
36 import static org.junit.Assert.assertNull;
37 import static org.junit.Assert.assertEquals;
38 import static org.junit.Assert.assertSame;
39
40
41
42
43
44
45 public class IoServiceListenerSupportTest {
46 private static final SocketAddress ADDRESS = new InetSocketAddress(8080);
47
48 private final IoService mockService = EasyMock.createMock(IoService.class);
49
50 @Test
51 public void testServiceLifecycle() throws Exception {
52 IoServiceListenerSupport support = new IoServiceListenerSupport(
53 mockService);
54
55 IoServiceListener listener = EasyMock.createStrictMock(IoServiceListener.class);
56
57
58 listener.serviceActivated(mockService);
59
60 EasyMock.replay(listener);
61
62 support.add(listener);
63 support.fireServiceActivated();
64
65 EasyMock.verify(listener);
66
67
68 EasyMock.reset(listener);
69 listener.serviceDeactivated(mockService);
70
71 EasyMock.replay(listener);
72
73 support.fireServiceActivated();
74
75 support.fireServiceDeactivated();
76
77 support.fireServiceDeactivated();
78
79 EasyMock.verify(listener);
80 }
81
82 @Test
83 public void testSessionLifecycle() throws Exception {
84 IoServiceListenerSupport support = new IoServiceListenerSupport(
85 mockService);
86
87 DummySession session = new DummySession();
88 session.setService(mockService);
89 session.setLocalAddress(ADDRESS);
90
91 IoHandler handler = EasyMock.createStrictMock( IoHandler.class );
92 session.setHandler(handler);
93
94 IoServiceListener listener = EasyMock.createStrictMock(IoServiceListener.class);
95
96
97 listener.sessionCreated(session);
98 handler.sessionCreated(session);
99 handler.sessionOpened(session);
100
101 EasyMock.replay(listener);
102 EasyMock.replay(handler);
103
104 support.add(listener);
105 support.fireSessionCreated(session);
106
107 EasyMock.verify(listener);
108 EasyMock.verify(handler);
109
110 assertEquals(1, support.getManagedSessions().size());
111 assertSame(session, support.getManagedSessions().get(session.getId()));
112
113
114 EasyMock.reset(listener);
115 EasyMock.reset(handler);
116 handler.sessionClosed(session);
117 listener.sessionDestroyed(session);
118
119 EasyMock.replay(listener);
120
121 support.fireSessionCreated(session);
122
123 support.fireSessionDestroyed(session);
124
125 support.fireSessionDestroyed(session);
126
127 EasyMock.verify(listener);
128
129 assertTrue(session.isClosing());
130 assertEquals(0, support.getManagedSessions().size());
131 assertNull(support.getManagedSessions().get(session.getId()));
132 }
133
134 @Test
135 public void testDisconnectOnUnbind() throws Exception {
136 IoAcceptor acceptor = EasyMock.createStrictMock(IoAcceptor.class);
137
138 final IoServiceListenerSupport support = new IoServiceListenerSupport(
139 acceptor);
140
141 final DummySession session = new DummySession();
142 session.setService(acceptor);
143 session.setLocalAddress(ADDRESS);
144
145 IoHandler handler = EasyMock.createStrictMock(IoHandler.class);
146 session.setHandler(handler);
147
148 final IoServiceListener listener = EasyMock.createStrictMock(IoServiceListener.class);
149
150
151 listener.serviceActivated(acceptor);
152 listener.sessionCreated(session);
153 handler.sessionCreated(session);
154 handler.sessionOpened(session);
155
156 EasyMock.replay(listener);
157 EasyMock.replay(handler);
158
159 support.add(listener);
160 support.fireServiceActivated();
161 support.fireSessionCreated(session);
162
163 EasyMock.verify(listener);
164 EasyMock.verify(handler);
165
166
167 EasyMock.reset(listener);
168 EasyMock.reset(handler);
169
170 listener.serviceDeactivated(acceptor);
171 EasyMock.expect(acceptor.isCloseOnDeactivation()).andReturn(true);
172 listener.sessionDestroyed(session);
173 handler.sessionClosed(session);
174
175 EasyMock.replay(listener);
176 EasyMock.replay(acceptor);
177 EasyMock.replay(handler);
178
179 new Thread() {
180
181 @Override
182 public void run() {
183 try {
184 Thread.sleep(500);
185 } catch (InterruptedException e) {
186
187 }
188
189
190
191 synchronized (listener) {
192 support.fireSessionDestroyed(session);
193 }
194 }
195 }.start();
196 support.fireServiceDeactivated();
197
198 synchronized (listener) {
199 EasyMock.verify(listener);
200 }
201 EasyMock.verify(acceptor);
202 EasyMock.verify(handler);
203
204 assertTrue(session.isClosing());
205 assertEquals(0, support.getManagedSessions().size());
206 assertNull(support.getManagedSessions().get(session.getId()));
207 }
208
209 @Test
210 public void testConnectorActivation() throws Exception {
211 IoConnector connector = EasyMock.createStrictMock(IoConnector.class);
212
213 IoServiceListenerSupport support = new IoServiceListenerSupport(
214 connector);
215
216 final DummySession session = new DummySession();
217 session.setService(connector);
218 session.setRemoteAddress(ADDRESS);
219
220 IoHandler handler = EasyMock.createStrictMock(IoHandler.class);
221 session.setHandler(handler);
222
223 IoServiceListener listener = EasyMock.createStrictMock(IoServiceListener.class);
224
225
226 listener.serviceActivated(connector);
227 listener.sessionCreated(session);
228 handler.sessionCreated(session);
229 handler.sessionOpened(session);
230
231 EasyMock.replay(listener);
232 EasyMock.replay(handler);
233
234 support.add(listener);
235 support.fireSessionCreated(session);
236
237 EasyMock.verify(listener);
238 EasyMock.verify(handler);
239
240
241 EasyMock.reset(listener);
242 EasyMock.reset(handler);
243 listener.sessionDestroyed(session);
244 handler.sessionClosed(session);
245 listener.serviceDeactivated(connector);
246
247 EasyMock.replay(listener);
248 EasyMock.replay(handler);
249
250 support.fireSessionDestroyed(session);
251
252 EasyMock.verify(listener);
253 EasyMock.verify(handler);
254
255 assertEquals(0, support.getManagedSessions().size());
256 assertNull(support.getManagedSessions().get(session.getId()));
257 }
258 }