1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.util;
19
20 import static org.junit.Assert.assertEquals;
21
22 import java.io.IOException;
23 import java.nio.ByteBuffer;
24
25 import org.apache.hadoop.hbase.testclassification.MiscTests;
26 import org.apache.hadoop.hbase.testclassification.SmallTests;
27 import org.junit.Test;
28 import org.junit.experimental.categories.Category;
29
30 @Category({MiscTests.class, SmallTests.class})
31 public class TestByteBufferArray {
32
33 @Test
34 public void testByteBufferCreation() throws Exception {
35 int capacity = 470 * 1021 * 1023;
36 ByteBufferAllocator allocator = new ByteBufferAllocator() {
37 @Override
38 public ByteBuffer allocate(long size, boolean directByteBuffer) throws IOException {
39 if (directByteBuffer) {
40 return ByteBuffer.allocateDirect((int) size);
41 } else {
42 return ByteBuffer.allocate((int) size);
43 }
44 }
45 };
46 ByteBufferArray array = new ByteBufferArray(capacity, false, allocator);
47 assertEquals(119, array.buffers.length);
48 for (int i = 0; i < array.buffers.length; i++) {
49 if (i == array.buffers.length - 1) {
50 assertEquals(array.buffers[i].capacity(), 0);
51 } else {
52 assertEquals(array.buffers[i].capacity(), ByteBufferArray.DEFAULT_BUFFER_SIZE);
53 }
54 }
55 }
56
57 @Test
58 public void testByteBufferCreation1() throws Exception {
59 ByteBufferAllocator allocator = new ByteBufferAllocator() {
60 @Override
61 public ByteBuffer allocate(long size, boolean directByteBuffer) throws IOException {
62 if (directByteBuffer) {
63 return ByteBuffer.allocateDirect((int) size);
64 } else {
65 return ByteBuffer.allocate((int) size);
66 }
67 }
68 };
69 ByteBufferArray array = new DummyByteBufferArray(7 * 1024 * 1024, false, allocator);
70
71 array.bufferCount = 25;
72 array.buffers = new ByteBuffer[array.bufferCount + 1];
73 array.createBuffers(true, allocator);
74 for (int i = 0; i < array.buffers.length; i++) {
75 if (i == array.buffers.length - 1) {
76 assertEquals(array.buffers[i].capacity(), 0);
77 } else {
78 assertEquals(array.buffers[i].capacity(), 458752);
79 }
80 }
81 }
82
83 private static class DummyByteBufferArray extends ByteBufferArray {
84
85 public DummyByteBufferArray(long capacity, boolean directByteBuffer,
86 ByteBufferAllocator allocator) throws IOException {
87 super(capacity, directByteBuffer, allocator);
88 }
89
90 @Override
91 int getThreadCount() {
92 return 16;
93 }
94 }
95 }