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.util.concurrent.atomic.AtomicLong;
33
34 import org.apache.hc.core5.concurrent.FutureCallback;
35 import org.apache.hc.core5.http.ContentType;
36 import org.apache.hc.core5.http.HttpException;
37 import org.apache.hc.core5.http.impl.BasicEntityDetails;
38 import org.apache.hc.core5.http.nio.AsyncEntityConsumer;
39 import org.apache.hc.core5.util.ByteArrayBuffer;
40 import org.junit.Assert;
41 import org.junit.Test;
42
43 public class TestAbstractBinAsyncEntityConsumer {
44
45 static private class ByteArrayAsyncEntityConsumer extends AbstractBinAsyncEntityConsumer<byte[]> {
46
47 private final ByteArrayBuffer buffer;
48
49 public ByteArrayAsyncEntityConsumer() {
50 super();
51 this.buffer = new ByteArrayBuffer(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 ByteBuffer src, final boolean endOfStream) throws IOException {
65 buffer.append(src);
66 }
67
68 @Override
69 protected byte[] generateContent() throws IOException {
70 return buffer.toByteArray();
71 }
72
73 @Override
74 public void releaseResources() {
75 }
76
77 }
78
79 @Test
80 public void testConsumeData() throws Exception {
81
82 final AsyncEntityConsumer<byte[]> consumer = new ByteArrayAsyncEntityConsumer();
83
84 final AtomicLong count = new AtomicLong(0);
85 consumer.streamStart(new BasicEntityDetails(-1, ContentType.APPLICATION_OCTET_STREAM), new FutureCallback<byte[]>() {
86
87 @Override
88 public void completed(final byte[] result) {
89 count.incrementAndGet();
90 }
91
92 @Override
93 public void failed(final Exception ex) {
94 count.incrementAndGet();
95 }
96
97 @Override
98 public void cancelled() {
99 count.incrementAndGet();
100 }
101
102 });
103
104 consumer.consume(ByteBuffer.wrap(new byte[]{'1', '2', '3'}));
105 consumer.consume(ByteBuffer.wrap(new byte[]{'4', '5'}));
106 consumer.consume(ByteBuffer.wrap(new byte[]{}));
107
108 Assert.assertEquals(null, consumer.getContent());
109 consumer.streamEnd(null);
110
111 Assert.assertArrayEquals(new byte[] {'1', '2', '3', '4', '5'}, consumer.getContent());
112 Assert.assertEquals(1L, count.longValue());
113 }
114
115 }