1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.core5.http.nio.entity;
29
30 import java.io.IOException;
31 import java.nio.ByteBuffer;
32 import java.nio.CharBuffer;
33 import java.util.concurrent.atomic.AtomicLong;
34
35 import org.apache.hc.core5.concurrent.FutureCallback;
36 import org.apache.hc.core5.http.ContentType;
37 import org.apache.hc.core5.http.HttpException;
38 import org.apache.hc.core5.http.impl.BasicEntityDetails;
39 import org.apache.hc.core5.http.nio.AsyncEntityConsumer;
40 import org.junit.Assert;
41 import org.junit.Test;
42
43 public class TestAbstractCharAsyncEntityConsumer {
44
45 static private class StringBuilderAsyncEntityConsumer extends AbstractCharAsyncEntityConsumer<String> {
46
47 private final StringBuilder buffer;
48
49 public StringBuilderAsyncEntityConsumer() {
50 super();
51 this.buffer = new StringBuilder(1024);
52 }
53
54 @Override
55 protected void streamStart(final ContentType contentType) throws HttpException, IOException {
56 }
57
58 @Override
59 protected int capacityIncrement() {
60 return Integer.MAX_VALUE;
61 }
62
63 @Override
64 protected void data(final CharBuffer src, final boolean endOfStream) throws IOException {
65 buffer.append(src);
66 }
67
68 @Override
69 protected String generateContent() throws IOException {
70 return buffer.toString();
71 }
72
73 @Override
74 public void releaseResources() {
75 buffer.setLength(0);
76 }
77
78 }
79
80 @Test
81 public void testConsumeData() throws Exception {
82
83 final AsyncEntityConsumer<String> consumer = new StringBuilderAsyncEntityConsumer();
84
85 final AtomicLong count = new AtomicLong(0);
86 consumer.streamStart(new BasicEntityDetails(-1, ContentType.TEXT_PLAIN), new FutureCallback<String>() {
87
88 @Override
89 public void completed(final String result) {
90 count.incrementAndGet();
91 }
92
93 @Override
94 public void failed(final Exception ex) {
95 count.incrementAndGet();
96 }
97
98 @Override
99 public void cancelled() {
100 count.incrementAndGet();
101 }
102
103 });
104
105 consumer.consume(ByteBuffer.wrap(new byte[]{'1', '2', '3'}));
106 consumer.consume(ByteBuffer.wrap(new byte[]{'4', '5'}));
107 consumer.consume(ByteBuffer.wrap(new byte[]{}));
108
109 Assert.assertEquals(null, consumer.getContent());
110 consumer.streamEnd(null);
111
112 Assert.assertEquals("12345", consumer.getContent());
113 Assert.assertEquals(1L, count.longValue());
114 }
115
116 }