/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jena.tdb.base.block;
import java.nio.ByteBuffer ;
import static org.apache.jena.atlas.lib.ByteBufferLib.fill ;
import org.apache.jena.atlas.junit.BaseTest ;
import org.apache.jena.tdb.base.block.Block ;
import org.apache.jena.tdb.base.block.BlockMgr ;
import org.junit.After ;
import org.junit.Before ;
import org.junit.Test ;
public abstract class AbstractTestBlockMgr extends BaseTest
{
static final public int BlkSize = 256 ;
protected BlockMgr blockMgr = null ;
@Before public void before()
{
blockMgr = make() ;
blockMgr.beginUpdate() ;
}
@After public void after()
{
if (blockMgr != null)
{
blockMgr.endUpdate() ;
blockMgr.close() ;
}
}
@Test public void file01()
{
Block block = blockMgr.allocate(BlkSize) ;
ByteBuffer bb = block.getByteBuffer() ;
fill(bb, (byte)1) ;
blockMgr.write(block) ;
blockMgr.release(block) ;
}
@Test public void file02()
{
Block block = blockMgr.allocate(BlkSize) ;
ByteBuffer bb = block.getByteBuffer() ;
fill(bb, (byte)1) ;
long id = block.getId() ;
blockMgr.write(block) ;
blockMgr.release(block) ;
Block block2 = blockMgr.getRead(id) ;
ByteBuffer bb2 = block2.getByteBuffer() ;
assertEquals(bb2.capacity(), BlkSize) ;
assertEquals(bb2.get(0), (byte)1) ;
assertEquals(bb2.get(BlkSize-1), (byte)1) ;
blockMgr.release(block2) ;
}
@Test public void file03()
{
Block block = blockMgr.allocate(BlkSize) ;
ByteBuffer bb = block.getByteBuffer() ;
fill(bb, (byte)2) ;
long id = block.getId() ;
blockMgr.write(block) ;
blockMgr.release(block) ;
Block block2 = blockMgr.getRead(id) ;
ByteBuffer bb2 = block2.getByteBuffer() ;
assertEquals(bb2.capacity(), BlkSize) ;
assertEquals(bb2.get(0), (byte)2) ;
assertEquals(bb2.get(BlkSize-1), (byte)2) ;
blockMgr.release(block2) ;
}
@Test public void multiAccess01()
{
Block block1 = blockMgr.allocate(BlkSize) ;
Block block2 = blockMgr.allocate(BlkSize) ;
long id1 = block1.getId() ;
long id2 = block2.getId() ;
ByteBuffer bb1 = block1.getByteBuffer() ;
ByteBuffer bb2 = block2.getByteBuffer() ;
fill(bb1, (byte)1) ;
fill(bb2, (byte)2) ;
blockMgr.write(block1) ;
blockMgr.write(block2) ;
blockMgr.release(block1) ;
blockMgr.release(block2) ;
Block block3 = blockMgr.getRead(id1) ;
Block block4 = blockMgr.getRead(id2) ;
ByteBuffer bb_1 = block3.getByteBuffer() ;
ByteBuffer bb_2 = block4.getByteBuffer() ;
contains(bb_1, (byte)1) ;
contains(bb_2, (byte)2) ;
blockMgr.release(block3) ;
blockMgr.release(block4) ;
}
protected abstract BlockMgr make() ;
protected static void contains(ByteBuffer bb, byte fillValue)
{
for ( int i = 0; i < bb.limit(); i++ )
assertEquals("Index: "+i, bb.get(i), fillValue ) ;
}
}