1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.filter.buffer;
21
22 import static org.junit.Assert.assertEquals;
23
24 import org.apache.mina.core.buffer.IoBuffer;
25 import org.apache.mina.core.filterchain.IoFilterAdapter;
26 import org.apache.mina.core.session.DummySession;
27 import org.apache.mina.core.session.IoSession;
28 import org.apache.mina.core.write.WriteRequest;
29 import org.apache.mina.filter.logging.LoggingFilter;
30 import org.junit.Test;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
33
34
35
36
37
38
39
40 public class BufferedWriteFilterTest {
41 static final Logger LOGGER = LoggerFactory.getLogger(BufferedWriteFilterTest.class);
42
43 @Test
44 public void testNonExpandableBuffer() throws Exception {
45 IoBuffer dest = IoBuffer.allocate(1);
46 assertEquals(false, dest.isAutoExpand());
47 }
48
49 @Test
50 public void testBasicBuffering() {
51 DummySession sess = new DummySession();
52 sess.getFilterChain().addFirst("peer", new IoFilterAdapter() {
53
54 private int counter;
55
56 @Override
57 public void filterClose(NextFilter nextFilter, IoSession session) throws Exception {
58 LOGGER.debug("Filter closed !");
59 assertEquals(3, counter);
60 }
61
62 @Override
63 public void filterWrite(NextFilter nextFilter, IoSession session, WriteRequest writeRequest)
64 throws Exception {
65 LOGGER.debug("New buffered message written !");
66 counter++;
67 try {
68 IoBuffer buf = (IoBuffer) writeRequest.getMessage();
69 if (counter == 3) {
70 assertEquals(1, buf.limit());
71 assertEquals(0, buf.get());
72 } else {
73 assertEquals(10, buf.limit());
74 }
75 } catch (Exception ex) {
76 throw new AssertionError("Wrong message type");
77 }
78 }
79
80 });
81 sess.getFilterChain().addFirst("logger", new LoggingFilter());
82 BufferedWriteFilter bFilter = new BufferedWriteFilter(10);
83 sess.getFilterChain().addLast("buffer", bFilter);
84
85 IoBuffer data = IoBuffer.allocate(1);
86 for (byte i = 0; i < 20; i++) {
87 data.put((byte) (0x30 + i));
88 data.flip();
89 sess.write(data);
90 data.clear();
91 }
92
93
94 data.put((byte) 0);
95 data.flip();
96 sess.write(data);
97
98
99 bFilter.flush(sess);
100
101 sess.closeNow();
102 }
103 }