1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.mina.session;
20
21 import static org.junit.Assert.*;
22 import static org.mockito.Matchers.*;
23 import static org.mockito.Mockito.*;
24
25 import java.net.SocketAddress;
26 import java.nio.ByteBuffer;
27
28 import org.apache.mina.api.AbstractIoFilter;
29 import org.apache.mina.api.IoFilter;
30 import org.apache.mina.api.IoFuture;
31 import org.apache.mina.api.IoService;
32 import org.apache.mina.api.IoSessionConfig;
33 import org.apache.mina.filterchain.ReadFilterChainController;
34 import org.apache.mina.filterchain.WriteFilterChainController;
35 import org.junit.Before;
36 import org.junit.Test;
37
38
39
40
41
42
43 public class AbstractIoSessionTest {
44
45 private class DummySession extends AbstractIoSession {
46 private DummySession(final IoService service) {
47 super(service, null);
48 }
49
50 @Override
51 public IoFuture<Void> close(final boolean immediately) {
52 return null;
53 }
54
55 @Override
56 public IoSessionConfig getConfig() {
57 return null;
58 }
59
60 @Override
61 public SocketAddress getLocalAddress() {
62 return null;
63 }
64
65 @Override
66 public SocketAddress getRemoteAddress() {
67 return null;
68 }
69
70 @Override
71 public boolean isConnected() {
72 return false;
73 }
74
75 @Override
76 public boolean isReadSuspended() {
77 return false;
78 }
79
80 @Override
81 public boolean isWriteSuspended() {
82 return false;
83 }
84
85 @Override
86 public void resumeRead() {
87 }
88
89 @Override
90 public void resumeWrite() {
91 }
92
93 @Override
94 public void suspendRead() {
95 }
96
97 @Override
98 public void suspendWrite() {
99 }
100
101 @Override
102 public boolean isSecuring() {
103 return false;
104 }
105
106 @Override
107 public boolean isSecured() {
108 return false;
109 }
110
111 @Override
112 public boolean isClosed() {
113 return false;
114 }
115
116 @Override
117 public WriteRequest enqueueWriteRequest(WriteRequest writeRequest) {
118 return null;
119 }
120 }
121
122 private IoService service = null;
123
124 private final IoFilter filter1 = spy(new PassthruFilter());
125
126 private final IoFilter filter2 = spy(new PassthruFilter());
127
128 private final IoFilter filter3 = spy(new PassthruFilter());
129
130 @Before
131 public void setup() {
132 service = mock(IoService.class);
133
134 when(service.getFilters()).thenReturn(new IoFilter[] { filter1, filter2, filter3 });
135 }
136
137 @Test
138 public void testGetId() {
139
140 assertNotSame((new DummySession(service)).getId(), (new DummySession(service)).getId());
141
142 }
143
144 @Test
145 public void testCreationTime() {
146 final long before = System.currentTimeMillis();
147 final long creation = (new DummySession(service)).getCreationTime();
148 final long after = System.currentTimeMillis();
149 assertTrue(creation <= after);
150 assertTrue(creation >= before);
151 }
152
153 @Test
154 public void testAttachment() {
155 final AbstractIoSession aio = new DummySession(service);
156 final String value = "value";
157 final AttributeKey<String> key = new AttributeKey<String>(String.class, "test");
158 assertNull(aio.getAttribute(key, null));
159 assertEquals(null, aio.setAttribute(key, value));
160
161 assertEquals(aio.getAttributeKeys().size(), 1);
162 assertEquals(value, aio.setAttribute(key, value));
163 assertEquals(aio.getAttributeKeys().size(), 1);
164 assertEquals(value, aio.getAttribute(key, null));
165 assertEquals(value, aio.removeAttribute(key));
166 assertEquals(aio.getAttributeKeys().size(), 0);
167
168 assertEquals(null, aio.getAttribute(key, null));
169 assertNotNull(aio.getService());
170 }
171
172 @Test
173 public void chain_reads() {
174 final DummySession session = new DummySession(service);
175 final ByteBuffer buffer = ByteBuffer.allocate(1024);
176
177 final long before = System.currentTimeMillis();
178 session.processMessageReceived(buffer);
179 verify(filter1).messageReceived(eq(session), eq(buffer), any(ReadFilterChainController.class));
180 verify(filter2).messageReceived(eq(session), eq(buffer), any(ReadFilterChainController.class));
181 verify(filter3).messageReceived(eq(session), eq(buffer), any(ReadFilterChainController.class));
182 assertEquals(1024L, session.getReadBytes());
183 final long lastRead = session.getLastReadTime();
184 assertTrue(lastRead - before < 100);
185 }
186
187 @Test
188 public void chain_writes() {
189 final DummySession session = new DummySession(service);
190 final WriteRequest buffer = mock(DefaultWriteRequest.class);
191 session.processMessageWriting(buffer, null);
192 verify(filter1).messageWriting(eq(session), eq(buffer), any(WriteFilterChainController.class));
193 verify(filter2).messageWriting(eq(session), eq(buffer), any(WriteFilterChainController.class));
194 verify(filter3).messageWriting(eq(session), eq(buffer), any(WriteFilterChainController.class));
195 }
196
197 @Test
198 public void chain_open() {
199 final DummySession session = new DummySession(service);
200 session.processSessionOpen();
201 verify(filter1).sessionOpened(eq(session));
202 verify(filter2).sessionOpened(eq(session));
203 verify(filter3).sessionOpened(eq(session));
204 }
205
206 @Test
207 public void chain_close() {
208 final DummySession session = new DummySession(service);
209 session.processSessionClosed();
210 verify(filter1).sessionClosed(eq(session));
211 verify(filter2).sessionClosed(eq(session));
212 verify(filter3).sessionClosed(eq(session));
213 }
214
215 @Test
216 public void increment_written_bytes() {
217 final DummySession session = new DummySession(service);
218 assertEquals(0, session.getWrittenBytes());
219 session.incrementWrittenBytes(1024);
220 assertEquals(1024, session.getWrittenBytes());
221 }
222
223 private class PassthruFilter extends AbstractIoFilter {
224
225 }
226 }