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 if (LOGGER.isDebugEnabled()) {
59 LOGGER.debug("Filter closed !");
60 }
61
62 assertEquals(3, counter);
63 }
64
65 @Override
66 public void filterWrite(NextFilter nextFilter, IoSession session, WriteRequest writeRequest)
67 throws Exception {
68 if (LOGGER.isDebugEnabled()) {
69 LOGGER.debug("New buffered message written !");
70 }
71
72 counter++;
73 try {
74 IoBuffer buf = (IoBuffer) writeRequest.getMessage();
75 if (counter == 3) {
76 assertEquals(1, buf.limit());
77 assertEquals(0, buf.get());
78 } else {
79 assertEquals(10, buf.limit());
80 }
81 } catch (Exception ex) {
82 throw new AssertionError("Wrong message type");
83 }
84 }
85
86 });
87 sess.getFilterChain().addFirst("logger", new LoggingFilter());
88 BufferedWriteFilter bFilter = new BufferedWriteFilter(10);
89 sess.getFilterChain().addLast("buffer", bFilter);
90
91 IoBuffer data = IoBuffer.allocate(1);
92 for (byte i = 0; i < 20; i++) {
93 data.put((byte) (0x30 + i));
94 data.flip();
95 sess.write(data);
96 data.clear();
97 }
98
99
100 data.put((byte) 0);
101 data.flip();
102 sess.write(data);
103
104
105 bFilter.flush(sess);
106
107 sess.closeNow();
108 }
109 }