View Javadoc

1   /**
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
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      // overwrite
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  }