1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.apache.mina.service.idlecheker;
23
24 import static org.junit.Assert.assertEquals;
25 import static org.mockito.Mockito.mock;
26
27 import java.net.SocketAddress;
28
29 import org.apache.mina.api.IdleStatus;
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.service.idlechecker.IdleChecker;
34 import org.apache.mina.service.idlechecker.IndexedIdleChecker;
35 import org.apache.mina.session.AbstractIoSession;
36 import org.apache.mina.session.AbstractIoSessionConfig;
37 import org.apache.mina.session.WriteRequest;
38 import org.junit.Test;
39
40
41
42
43
44
45 public class IndexedIdleChekerTest {
46
47 private final IndexedIdleChecker idleChecker = new IndexedIdleChecker();
48
49 private final long now = System.currentTimeMillis();
50
51 @Test
52 public void process_on_empty_index() {
53 assertEquals(0, idleChecker.processIdleSession(now));
54 }
55
56 @Test
57 public void dont_send_premature_events() {
58 IoService service = mock(IoService.class);
59 DummySession session = new DummySession(service, idleChecker);
60
61 session.getConfig().setIdleTimeInMillis(IdleStatus.READ_IDLE, 2000L);
62
63 idleChecker.sessionRead(session, now);
64
65
66 assertEquals(0, idleChecker.processIdleSession(now));
67 assertEquals(0, session.readIdleCount);
68 assertEquals(0, session.writeIdleCount);
69 assertEquals(1, idleChecker.processIdleSession(now + 3001));
70
71 }
72
73 @Test
74 public void read_event() {
75 IoService service = mock(IoService.class);
76 DummySession session = new DummySession(service, idleChecker);
77
78 session.getConfig().setIdleTimeInMillis(IdleStatus.READ_IDLE, 1000L);
79
80 idleChecker.sessionRead(session, now);
81
82
83 assertEquals(0, idleChecker.processIdleSession(now));
84 assertEquals(0, session.readIdleCount);
85 assertEquals(0, session.writeIdleCount);
86 assertEquals(1, idleChecker.processIdleSession(now + 2000));
87 assertEquals(1, session.readIdleCount);
88
89 }
90
91 @Test
92 public void write_event() {
93 IoService service = mock(IoService.class);
94 DummySession session = new DummySession(service, idleChecker);
95
96 session.getConfig().setIdleTimeInMillis(IdleStatus.WRITE_IDLE, 1000L);
97
98 idleChecker.sessionWritten(session, now);
99
100
101 assertEquals(1, idleChecker.processIdleSession(now + 12000));
102 assertEquals(0, session.readIdleCount);
103 assertEquals(1, session.writeIdleCount);
104 }
105
106 private class DummySession extends AbstractIoSession {
107
108 int readIdleCount = 0;
109
110 int writeIdleCount = 0;
111
112 private DummySession(IoService service, IdleChecker checker) {
113 super(service, checker);
114 }
115
116 @Override
117 public IoFuture<Void> close(boolean immediately) {
118 return null;
119 }
120
121 IoSessionConfig config = new AbstractIoSessionConfig() {
122 };
123
124 @Override
125 public IoSessionConfig getConfig() {
126 return config;
127 }
128
129
130
131
132 @Override
133 public void processSessionIdle(IdleStatus status) {
134 if (status == IdleStatus.READ_IDLE) {
135 readIdleCount++;
136 }
137 if (status == IdleStatus.WRITE_IDLE) {
138 writeIdleCount++;
139 }
140 }
141
142 @Override
143 public SocketAddress getLocalAddress() {
144 return null;
145 }
146
147 @Override
148 public SocketAddress getRemoteAddress() {
149 return null;
150 }
151
152 @Override
153 public boolean isConnected() {
154 return false;
155 }
156
157 @Override
158 public boolean isReadSuspended() {
159 return false;
160 }
161
162 @Override
163 public boolean isWriteSuspended() {
164 return false;
165 }
166
167 @Override
168 public void resumeRead() {
169 }
170
171 @Override
172 public void resumeWrite() {
173 }
174
175 @Override
176 public void suspendRead() {
177 }
178
179 @Override
180 public void suspendWrite() {
181 }
182
183 @Override
184 public boolean isSecuring() {
185 return false;
186 }
187
188 @Override
189 public boolean isSecured() {
190 return false;
191 }
192
193 @Override
194 public boolean isClosed() {
195 return false;
196 }
197
198 @Override
199 public WriteRequest enqueueWriteRequest(WriteRequest writeRequest) {
200 return null;
201 }
202 }
203 }