[Sulky-devel] SF.net SVN: sulky:[111] trunk/sulky-codec-filebuffer/src
Status: Beta
Brought to you by:
huxhorn
|
From: <hu...@us...> - 2009-05-27 21:22:01
|
Revision: 111
http://sulky.svn.sourceforge.net/sulky/?rev=111&view=rev
Author: huxhorn
Date: 2009-05-27 21:21:37 +0000 (Wed, 27 May 2009)
Log Message:
-----------
Work on ticket:4.
Modified Paths:
--------------
trunk/sulky-codec-filebuffer/src/main/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBuffer.java
trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/SparseDataStrategyTest.java
Added Paths:
-----------
trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBufferTest.java
trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBufferTestBase.java
trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/SparseCodecFileBufferTest.java
Removed Paths:
-------------
trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBufferTest.java
Modified: trunk/sulky-codec-filebuffer/src/main/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBuffer.java
===================================================================
--- trunk/sulky-codec-filebuffer/src/main/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBuffer.java 2009-05-26 20:11:18 UTC (rev 110)
+++ trunk/sulky-codec-filebuffer/src/main/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBuffer.java 2009-05-27 21:21:37 UTC (rev 111)
@@ -93,8 +93,8 @@
private int magicValue;
private FileHeader fileHeader;
private boolean preferredSparse;
- private DataStrategy<E> dataStrategy = new DefaultDataStrategy<E>();
- private IndexStrategy indexStrategy = new DefaultIndexStrategy();
+ private DataStrategy<E> dataStrategy;
+ private IndexStrategy indexStrategy;
/**
* Shortcut for CodecFileBuffer(magicValue, preferredSparse, preferredMetaData, null, null, serializeFile, null).
@@ -105,10 +105,10 @@
* @param dataFile the data file.
* @see CodecFileBuffer#CodecFileBuffer(int, boolean, java.util.Map, de.huxhorn.sulky.codec.Codec, java.io.File, java.io.File) for description.
*/
- public CodecFileBuffer(int magicValue, boolean preferredSparse, Map<String, String> preferredMetaData, File dataFile)
- {
- this(magicValue, preferredSparse, preferredMetaData, null, dataFile, null);
- }
+// public CodecFileBuffer(int magicValue, boolean preferredSparse, Map<String, String> preferredMetaData, File dataFile)
+// {
+// this(magicValue, preferredSparse, preferredMetaData, null, dataFile, null);
+// }
/**
* Shortcut for CodecFileBuffer(magicValue, false, preferredMetaData, null, null, serializeFile, null).
@@ -118,10 +118,10 @@
* @param dataFile the data file.
* @see CodecFileBuffer#CodecFileBuffer(int, boolean, java.util.Map, de.huxhorn.sulky.codec.Codec, java.io.File, java.io.File) for description.
*/
- public CodecFileBuffer(int magicValue, Map<String, String> preferredMetaData, File dataFile)
- {
- this(magicValue, false, preferredMetaData, null, dataFile, null);
- }
+// public CodecFileBuffer(int magicValue, Map<String, String> preferredMetaData, File dataFile)
+// {
+// this(magicValue, false, preferredMetaData, null, dataFile, null);
+// }
/**
* Shortcut for CodecFileBuffer(magicValue, preferredSparse, preferredMetaData, null, null, serializeFile, null).
@@ -133,10 +133,10 @@
* @param dataFile the data file.
* @see CodecFileBuffer#CodecFileBuffer(int, boolean, java.util.Map, de.huxhorn.sulky.codec.Codec, java.io.File, java.io.File) for description.
*/
- public CodecFileBuffer(int magicValue, boolean preferredSparse, Map<String, String> preferredMetaData, Codec<E> codec, File dataFile)
- {
- this(magicValue, preferredSparse, preferredMetaData, codec, dataFile, null);
- }
+// public CodecFileBuffer(int magicValue, boolean preferredSparse, Map<String, String> preferredMetaData, Codec<E> codec, File dataFile)
+// {
+// this(magicValue, preferredSparse, preferredMetaData, codec, dataFile, null);
+// }
/**
* Shortcut for CodecFileBuffer(magicValue, false, preferredMetaData, null, null, serializeFile, null).
@@ -147,10 +147,10 @@
* @param dataFile the data file.
* @see CodecFileBuffer#CodecFileBuffer(int, boolean, java.util.Map, de.huxhorn.sulky.codec.Codec, java.io.File, java.io.File) for description.
*/
- public CodecFileBuffer(int magicValue, Map<String, String> preferredMetaData, Codec<E> codec, File dataFile)
- {
- this(magicValue, false, preferredMetaData, codec, dataFile, null);
- }
+// public CodecFileBuffer(int magicValue, Map<String, String> preferredMetaData, Codec<E> codec, File dataFile)
+// {
+// this(magicValue, false, preferredMetaData, codec, dataFile, null);
+// }
/**
* TODO: add description :p
@@ -162,10 +162,10 @@
* @param dataFile the data file.
* @param indexFile the index file of the buffer.
*/
- public CodecFileBuffer(int magicValue, boolean preferredSparse, Map<String, String> preferredMetaData, Codec<E> codec, File dataFile, File indexFile)
- {
- this(magicValue, preferredSparse, preferredMetaData, codec, dataFile, indexFile, new DefaultFileHeaderStrategy());
- }
+// public CodecFileBuffer(int magicValue, boolean preferredSparse, Map<String, String> preferredMetaData, Codec<E> codec, File dataFile, File indexFile)
+// {
+// this(magicValue, preferredSparse, preferredMetaData, codec, dataFile, indexFile, new DefaultFileHeaderStrategy());
+// }
/**
* TODO: add description :p
@@ -176,13 +176,14 @@
* @param dataFile the data file.
* @param indexFile the index file of the buffer.
*/
- public CodecFileBuffer(int magicValue, Map<String, String> preferredMetaData, Codec<E> codec, File dataFile, File indexFile)
+ public CodecFileBuffer(int magicValue, boolean sparse, Map<String, String> preferredMetaData, Codec<E> codec, File dataFile, File indexFile)
{
- this(magicValue, false, preferredMetaData, codec, dataFile, indexFile, new DefaultFileHeaderStrategy());
+ this(magicValue, sparse, preferredMetaData, codec, dataFile, indexFile, new DefaultFileHeaderStrategy());
}
public CodecFileBuffer(int magicValue, boolean preferredSparse, Map<String, String> preferredMetaData, Codec<E> codec, File dataFile, File indexFile, FileHeaderStrategy fileHeaderStrategy)
{
+ this.indexStrategy = new DefaultIndexStrategy();
this.magicValue = magicValue;
this.fileHeaderStrategy = fileHeaderStrategy;
this.readWriteLock = new ReentrantReadWriteLock(true);
@@ -247,7 +248,7 @@
.getAbsolutePath() + " is not valid!");
}
}
- this.fileHeader = fileHeader;
+ setFileHeader(fileHeader);
}
catch(IOException ex)
{
@@ -306,8 +307,7 @@
try
{
dataFile.delete();
- fileHeader = fileHeaderStrategy
- .writeFileHeader(dataFile, magicValue, preferredMetaData, preferredSparse);
+ setFileHeader(fileHeaderStrategy.writeFileHeader(dataFile, magicValue, preferredMetaData, preferredSparse));
indexFile.delete();
return true;
}
@@ -472,32 +472,6 @@
randomDataFile = new RandomAccessFile(dataFile, "rw");
dataStrategy.add(element, randomIndexFile, randomDataFile, codec, indexStrategy);
- /*
- long elementsCount = internalGetSize(randomIndexFile);
-
- long offset = fileHeader.getDataOffset();
- if(elementsCount > 0)
- {
- long prevElement = elementsCount - 1;
- long readOffset = internalOffsetOfElement(randomIndexFile, prevElement);
- if(readOffset > 0)
- {
- int elementSize = internalReadElementSize(randomDataFile, readOffset);
- if(elementSize > 0)
- {
- offset = readOffset + elementSize + DATA_LENGTH_SIZE;
- }
- else
- {
- randomIndexFile.setLength(0);
- elementsCount = 0;
- }
- }
- }
- internalWriteElement(randomDataFile, offset, element);
-
- internalWriteOffset(randomIndexFile, elementsCount, offset);
- */
// call proecssors if available
List<ElementProcessor<E>> localProcessors = elementProcessors;
if(localProcessors != null)
@@ -730,4 +704,18 @@
{
return false; // TODO: implement isDisposed()
}
+
+ private void setFileHeader(FileHeader fileHeader)
+ {
+ MetaData metaData = fileHeader.getMetaData();
+ if(metaData.isSparse())
+ {
+ dataStrategy=new SparseDataStrategy<E>();
+ }
+ else
+ {
+ dataStrategy=new DefaultDataStrategy<E>();
+ }
+ this.fileHeader = fileHeader;
+ }
}
Deleted: trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBufferTest.java
===================================================================
--- trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBufferTest.java 2009-05-26 20:11:18 UTC (rev 110)
+++ trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBufferTest.java 2009-05-27 21:21:37 UTC (rev 111)
@@ -1,709 +0,0 @@
-/*
- * sulky-modules - several general-purpose modules.
- * Copyright (C) 2007-2009 Joern Huxhorn
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-package de.huxhorn.sulky.codec.filebuffer;
-
-import de.huxhorn.sulky.buffers.ElementProcessor;
-import de.huxhorn.sulky.codec.Codec;
-import de.huxhorn.sulky.codec.SerializableCodec;
-
-import org.junit.After;
-import static org.junit.Assert.*;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class CodecFileBufferTest
-{
- private final Logger logger = LoggerFactory.getLogger(CodecFileBufferTest.class);
-
- private File tempOutputPath;
- private File dataFile;
- private File indexFile;
-
- private String[] values;
- private int magicValue;
- private Map<String, String> metaData;
- private Codec<String> codec;
-
- @Before
- public void setUp()
- throws Exception
- {
- tempOutputPath = File.createTempFile("sfb-testing", "rulez");
- tempOutputPath.delete();
- tempOutputPath.mkdirs();
- dataFile = new File(tempOutputPath, "dump");
- indexFile = new File(tempOutputPath, "dump.index");
-
- codec = new SerializableCodec<String>();
-
- values = new String[]
- {
- "Null, sozusagen ganix",
- "Eins",
- "Zwei",
- "Drei",
- "Vier",
- "Fuenef",
- "Sechse",
- "Siebene",
- "Achtele",
- "Neune",
- "Zehne"
- };
-
- magicValue = 0xDEADBEEF;
- metaData = new HashMap<String, String>();
- metaData.put("foo1", "bar1");
- metaData.put("foo2", "bar2");
- }
-
- @After
- public void tearDown()
- throws Exception
- {
- //dataFile.delete();
- //indexFile.delete();
- //tempOutputPath.delete();
- }
-
- @Test
- public void readWriteNoMetaAdd()
- {
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, null, codec, dataFile, indexFile);
- for(String current : values)
- {
- instance.add(current);
- }
-
- assertEquals(values.length, (int) instance.getSize());
-
- for(int i = 0; i < values.length; i++)
- {
- String value = instance.get(i);
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
- assertEquals("Element #" + i + " differs!", values[i], value);
- }
-
- int index = 0;
- for(String value : instance)
- {
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
- assertEquals("Element #" + index + " differs!", values[index], value);
- index++;
- }
-
- FileHeader fileHeader = instance.getFileHeader();
-
- assertEquals(new MetaData(false), fileHeader.getMetaData());
-
- CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, null, codec, dataFile, indexFile);
-
- assertEquals(values.length, (int) otherInstance.getSize());
-
- FileHeader otherHeader = otherInstance.getFileHeader();
-
- assertEquals(magicValue, otherHeader.getMagicValue());
-
- assertEquals(new MetaData(false), otherHeader.getMetaData());
- }
-
- @Test
- public void readWriteMetaAdd()
- {
- boolean sparse = false;
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
- for(String current : values)
- {
- instance.add(current);
- }
- assertEquals(values.length, (int) instance.getSize());
-
- for(int i = 0; i < values.length; i++)
- {
- String value = instance.get(i);
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
- assertEquals("Element #" + i + " differs!", values[i], value);
- }
-
- int index = 0;
- for(String value : instance)
- {
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
- assertEquals("Element #" + index + " differs!", values[index], value);
- index++;
- }
-
- FileHeader fileHeader = instance.getFileHeader();
- assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
-
- CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
-
- assertEquals(values.length, (int) otherInstance.getSize());
-
- FileHeader otherHeader = otherInstance.getFileHeader();
- assertEquals(magicValue, otherHeader.getMagicValue());
-
- assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
- }
-
- @Test
- public void readWriteNoMetaAddAll()
- {
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, null, codec, dataFile, indexFile);
- instance.addAll(values);
- assertEquals(values.length, (int) instance.getSize());
-
- for(int i = 0; i < values.length; i++)
- {
- String value = instance.get(i);
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
- assertEquals("Element #" + i + " differs!", values[i], value);
- }
-
- int index = 0;
- for(String value : instance)
- {
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
- assertEquals("Element #" + index + " differs!", values[index], value);
- index++;
- }
-
- FileHeader fileHeader = instance.getFileHeader();
- assertEquals(new MetaData(false), fileHeader.getMetaData());
-
- CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, null, codec, dataFile, indexFile);
-
- assertEquals(values.length, (int) otherInstance.getSize());
-
- FileHeader otherHeader = otherInstance.getFileHeader();
- assertEquals(magicValue, otherHeader.getMagicValue());
-
- assertEquals(new MetaData(false), otherHeader.getMetaData());
- }
-
- @Test
- public void readWriteMetaAddAll()
- {
- boolean sparse = false;
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
- instance.addAll(values);
- assertEquals(values.length, (int) instance.getSize());
-
- for(int i = 0; i < values.length; i++)
- {
- String value = instance.get(i);
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
- assertEquals("Element #" + i + " differs!", values[i], value);
- }
-
- int index = 0;
- for(String value : instance)
- {
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
- assertEquals("Element #" + index + " differs!", values[index], value);
- index++;
- }
-
- FileHeader fileHeader = instance.getFileHeader();
- assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
-
- CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
-
- assertEquals(values.length, (int) otherInstance.getSize());
-
- FileHeader otherHeader = otherInstance.getFileHeader();
- assertEquals(magicValue, otherHeader.getMagicValue());
-
- assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
- }
-
- @Test
- public void readWriteMetaMixed()
- {
- boolean sparse = false;
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
- instance.addAll(values);
- for(String current : values)
- {
- instance.add(current);
- }
- instance.addAll(values);
- for(String current : values)
- {
- instance.add(current);
- }
-
- assertEquals(4 * values.length, (int) instance.getSize());
-
- for(int i = 0; i < 4 * values.length; i++)
- {
- String value = instance.get(i);
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
- assertEquals("Element #" + i + " differs!", values[i % values.length], value);
- }
-
- int index = 0;
- for(String value : instance)
- {
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
- assertEquals("Element #" + index + " differs!", values[index % values.length], value);
- index++;
- }
-
- FileHeader fileHeader = instance.getFileHeader();
- assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
-
- CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
-
- assertEquals(4 * values.length, (int) otherInstance.getSize());
-
- FileHeader otherHeader = otherInstance.getFileHeader();
- assertEquals(magicValue, otherHeader.getMagicValue());
-
- assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
- }
-
- @Test
- public void readInvalid()
- {
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
-
- assertNull(instance.get(0));
-
- instance.addAll(values);
-
- assertNull(instance.get(values.length));
- assertNotNull(instance.get(values.length - 1));
- }
-
- @Test
- public void readWriteNoMetaMixed()
- {
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, null, codec, dataFile, indexFile);
- instance.addAll(values);
- for(String current : values)
- {
- instance.add(current);
- }
- instance.addAll(values);
- for(String current : values)
- {
- instance.add(current);
- }
-
- assertEquals(4 * values.length, (int) instance.getSize());
-
- for(int i = 0; i < 4 * values.length; i++)
- {
- String value = instance.get(i);
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
- assertEquals("Element #" + i + " differs!", values[i % values.length], value);
- }
-
- int index = 0;
- for(String value : instance)
- {
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
- assertEquals("Element #" + index + " differs!", values[index % values.length], value);
- index++;
- }
-
- FileHeader fileHeader = instance.getFileHeader();
- assertEquals(new MetaData(false), fileHeader.getMetaData());
-
- CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, null, codec, dataFile, indexFile);
-
- assertEquals(4 * values.length, (int) otherInstance.getSize());
-
- FileHeader otherHeader = otherInstance.getFileHeader();
-
- assertEquals(magicValue, otherHeader.getMagicValue());
-
- assertEquals(new MetaData(false), otherHeader.getMetaData());
- }
-
- @Test
- public void meta()
- {
- boolean sparse = false;
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
-
- assertEquals(0, (int) instance.getSize());
-
- FileHeader fileHeader = instance.getFileHeader();
- assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
-
- CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
-
- assertEquals(0, (int) instance.getSize());
-
- FileHeader otherHeader = otherInstance.getFileHeader();
- assertEquals(magicValue, otherHeader.getMagicValue());
-
- assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
- }
-
- @Test
- public void noMeta()
- {
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, null, codec, dataFile, indexFile);
-
- assertEquals(0, (int) instance.getSize());
-
- FileHeader fileHeader = instance.getFileHeader();
- assertEquals(new MetaData(false), fileHeader.getMetaData());
-
- CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, null, codec, dataFile, indexFile);
-
- assertEquals(0, (int) instance.getSize());
-
- FileHeader otherHeader = otherInstance.getFileHeader();
- assertEquals(magicValue, otherHeader.getMagicValue());
-
- assertEquals(new MetaData(false), otherHeader.getMetaData());
- }
-
- @Test
- public void resetMeta()
- {
- boolean sparse = false;
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
-
- instance.addAll(values);
- assertEquals(values.length, (int) instance.getSize());
-
- instance.reset();
-
- assertEquals(0, instance.getSize());
-
- FileHeader fileHeader = instance.getFileHeader();
- assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
-
- CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
-
- assertEquals(0, otherInstance.getSize());
-
- FileHeader otherHeader = otherInstance.getFileHeader();
- assertEquals(magicValue, otherHeader.getMagicValue());
-
- assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
-
- instance.addAll(values);
- assertEquals(values.length, (int) instance.getSize());
-
- for(int i = 0; i < values.length; i++)
- {
- String value = instance.get(i);
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
- assertEquals("Element #" + i + " differs!", values[i], value);
- }
-
- int index = 0;
- for(String value : instance)
- {
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
- assertEquals("Element #" + index + " differs!", values[index], value);
- index++;
- }
- }
-
- @Test
- public void resetNoMeta()
- {
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, null, codec, dataFile, indexFile);
-
- instance.addAll(values);
- assertEquals(values.length, (int) instance.getSize());
-
- instance.reset();
- assertEquals(0, instance.getSize());
-
- FileHeader fileHeader = instance.getFileHeader();
-
- assertEquals(new MetaData(false), fileHeader.getMetaData());
-
- CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, null, codec, dataFile, indexFile);
-
- assertEquals(0, otherInstance.getSize());
-
- FileHeader otherHeader = otherInstance.getFileHeader();
- assertEquals(magicValue, otherHeader.getMagicValue());
-
- assertEquals(new MetaData(false), otherHeader.getMetaData());
-
- instance.addAll(values);
- assertEquals(values.length, (int) instance.getSize());
-
- for(int i = 0; i < values.length; i++)
- {
- String value = instance.get(i);
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
- assertEquals("Element #" + i + " differs!", values[i], value);
- }
-
- int index = 0;
- for(String value : instance)
- {
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
- assertEquals("Element #" + index + " differs!", values[index], value);
- index++;
- }
- }
-
- @Test
- public void elementProcessorsAdd()
- {
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
- List<ElementProcessor<String>> elementProcessors = new ArrayList<ElementProcessor<String>>();
- CapturingElementProcessor capture = new CapturingElementProcessor();
- elementProcessors.add(capture);
- instance.setElementProcessors(elementProcessors);
- instance.add("Example");
- assertEquals(1, capture.list.size());
- assertEquals("Example", capture.list.get(0));
- }
-
- @Test
- public void elementProcessorsAddAll()
- {
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
- List<ElementProcessor<String>> elementProcessors = new ArrayList<ElementProcessor<String>>();
- CapturingElementProcessor capture = new CapturingElementProcessor();
- elementProcessors.add(capture);
- instance.setElementProcessors(elementProcessors);
- instance.addAll(values);
- assertEquals(values.length, capture.list.size());
- int index = 0;
- for(String value : capture.list)
- {
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
- assertEquals("Element #" + index + " differs!", values[index], value);
- index++;
- }
- }
-
- @Test
- public void deleteDataFileAdd()
- {
- boolean sparse = false;
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
- for(String current : values)
- {
- instance.add(current);
- }
- assertEquals(values.length, (int) instance.getSize());
- dataFile.delete();
- for(String current : values)
- {
- instance.add(current);
- }
-
- assertEquals(8 * values.length, indexFile.length());
-
- for(int i = 0; i < values.length; i++)
- {
- String value = instance.get(i);
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
- assertEquals("Element #" + i + " differs!", values[i], value);
- }
-
- int index = 0;
- for(String value : instance)
- {
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
- assertEquals("Element #" + index + " differs!", values[index], value);
- index++;
- }
-
- FileHeader fileHeader = instance.getFileHeader();
- assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
-
- CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
- FileHeader otherHeader = otherInstance.getFileHeader();
- assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
- }
-
- @Test
- public void deleteDataFileAddAll()
- {
- boolean sparse = false;
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
- instance.addAll(values);
- assertEquals(values.length, (int) instance.getSize());
- dataFile.delete();
- instance.addAll(values);
-
- assertEquals(8 * values.length, indexFile.length());
-
- for(int i = 0; i < values.length; i++)
- {
- String value = instance.get(i);
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
- assertEquals("Element #" + i + " differs!", values[i], value);
- }
-
- int index = 0;
- for(String value : instance)
- {
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
- assertEquals("Element #" + index + " differs!", values[index], value);
- index++;
- }
-
- FileHeader fileHeader = instance.getFileHeader();
- assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
-
- CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
- FileHeader otherHeader = otherInstance.getFileHeader();
- assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
- }
-
- @Test
- public void deleteDataFileGet()
- {
- boolean sparse = false;
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
- for(String current : values)
- {
- instance.add(current);
- }
- assertEquals(values.length, (int) instance.getSize());
-
- FileHeader fileHeader = instance.getFileHeader();
- assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
-
- assertNotNull(instance.get(values.length - 1));
- dataFile.delete();
- assertNull(instance.get(values.length - 1));
- }
-
- @Test
- public void deleteIndexFileAdd()
- {
- boolean sparse = false;
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
- for(String current : values)
- {
- instance.add(current);
- }
- assertEquals(values.length, (int) instance.getSize());
- indexFile.delete();
- for(String current : values)
- {
- instance.add(current);
- }
-
- assertEquals(8 * values.length, indexFile.length());
-
- for(int i = 0; i < values.length; i++)
- {
- String value = instance.get(i);
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
- assertEquals("Element #" + i + " differs!", values[i], value);
- }
-
- int index = 0;
- for(String value : instance)
- {
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
- assertEquals("Element #" + index + " differs!", values[index], value);
- index++;
- }
-
- FileHeader fileHeader = instance.getFileHeader();
- assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
-
- CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
- FileHeader otherHeader = otherInstance.getFileHeader();
- assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
- }
-
- @Test
- public void deleteIndexFileAddAll()
- {
- boolean sparse = false;
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
- instance.addAll(values);
- assertEquals(values.length, (int) instance.getSize());
- indexFile.delete();
- instance.addAll(values);
-
- assertEquals(8 * values.length, indexFile.length());
-
- for(int i = 0; i < values.length; i++)
- {
- String value = instance.get(i);
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
- assertEquals("Element #" + i + " differs!", values[i], value);
- }
-
- int index = 0;
- for(String value : instance)
- {
- if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
- assertEquals("Element #" + index + " differs!", values[index], value);
- index++;
- }
-
- FileHeader fileHeader = instance.getFileHeader();
- assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
-
- CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
- FileHeader otherHeader = otherInstance.getFileHeader();
- assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
- }
-
- @Test(expected = IllegalArgumentException.class)
- /**
- * This is the case that an existing file containing data is reopened. In that case, an IllegalArgumentException is
- * thrown instead of simply overwriting the previous data (which is done if the indexFile is deleted while
- * "in production").
- */
- public void deleteIndexFileReopen()
- {
- CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
- instance.addAll(values);
- assertEquals(values.length, (int) instance.getSize());
- indexFile.delete();
- new CodecFileBuffer<String>(magicValue, metaData, codec, dataFile, indexFile);
- }
-
- private static class CapturingElementProcessor
- implements ElementProcessor<String>
- {
- public List<String> list = new ArrayList<String>();
-
- public void processElement(String element)
- {
- list.add(element);
- }
-
- public void processElements(List<String> element)
- {
- list.addAll(element);
- }
- }
-}
Added: trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBufferTest.java
===================================================================
--- trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBufferTest.java (rev 0)
+++ trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBufferTest.java 2009-05-27 21:21:37 UTC (rev 111)
@@ -0,0 +1,27 @@
+/*
+ * sulky-modules - several general-purpose modules.
+ * Copyright (C) 2007-2009 Joern Huxhorn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package de.huxhorn.sulky.codec.filebuffer;
+
+public class CodecFileBufferTest
+ extends CodecFileBufferTestBase
+{
+ protected void initSparse()
+ {
+ sparse=false;
+ }
+}
Copied: trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBufferTestBase.java (from rev 110, trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBufferTest.java)
===================================================================
--- trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBufferTestBase.java (rev 0)
+++ trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBufferTestBase.java 2009-05-27 21:21:37 UTC (rev 111)
@@ -0,0 +1,705 @@
+/*
+ * sulky-modules - several general-purpose modules.
+ * Copyright (C) 2007-2009 Joern Huxhorn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package de.huxhorn.sulky.codec.filebuffer;
+
+import de.huxhorn.sulky.buffers.ElementProcessor;
+import de.huxhorn.sulky.codec.Codec;
+import de.huxhorn.sulky.codec.SerializableCodec;
+
+import org.junit.After;
+import static org.junit.Assert.*;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public abstract class CodecFileBufferTestBase
+{
+ private final Logger logger = LoggerFactory.getLogger(CodecFileBufferTestBase.class);
+
+ private File tempOutputPath;
+ private File dataFile;
+ private File indexFile;
+
+ private String[] values;
+ private int magicValue;
+ private Map<String, String> metaData;
+ private Codec<String> codec;
+ private FileHeaderStrategy fileHeaderStrategy;
+ protected boolean sparse;
+
+ protected abstract void initSparse();
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ initSparse();
+ fileHeaderStrategy = new DefaultFileHeaderStrategy();
+ tempOutputPath = File.createTempFile("sfb-testing", "rulez");
+ tempOutputPath.delete();
+ tempOutputPath.mkdirs();
+ dataFile = new File(tempOutputPath, "dump");
+ indexFile = new File(tempOutputPath, "dump.index");
+
+ codec = new SerializableCodec<String>();
+
+ values = new String[]
+ {
+ "Null, sozusagen ganix",
+ "Eins",
+ "Zwei",
+ "Drei",
+ "Vier",
+ "Fuenef",
+ "Sechse",
+ "Siebene",
+ "Achtele",
+ "Neune",
+ "Zehne"
+ };
+
+ magicValue = 0xDEADBEEF;
+ metaData = new HashMap<String, String>();
+ metaData.put("foo1", "bar1");
+ metaData.put("foo2", "bar2");
+ }
+
+ @After
+ public void tearDown()
+ throws Exception
+ {
+ //dataFile.delete();
+ //indexFile.delete();
+ //tempOutputPath.delete();
+ }
+
+ @Test
+ public void readWriteNoMetaAdd()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, null, codec, dataFile, indexFile, fileHeaderStrategy);
+ for(String current : values)
+ {
+ instance.add(current);
+ }
+
+ assertEquals(values.length, (int) instance.getSize());
+
+ for(int i = 0; i < values.length; i++)
+ {
+ String value = instance.get(i);
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
+ assertEquals("Element #" + i + " differs!", values[i], value);
+ }
+
+ int index = 0;
+ for(String value : instance)
+ {
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
+ assertEquals("Element #" + index + " differs!", values[index], value);
+ index++;
+ }
+
+ FileHeader fileHeader = instance.getFileHeader();
+
+ assertEquals(new MetaData(sparse), fileHeader.getMetaData());
+
+ CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, sparse, null, codec, dataFile, indexFile, fileHeaderStrategy);
+
+ assertEquals(values.length, (int) otherInstance.getSize());
+
+ FileHeader otherHeader = otherInstance.getFileHeader();
+
+ assertEquals(magicValue, otherHeader.getMagicValue());
+
+ assertEquals(new MetaData(sparse), otherHeader.getMetaData());
+ }
+
+ @Test
+ public void readWriteMetaAdd()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+ for(String current : values)
+ {
+ instance.add(current);
+ }
+ assertEquals(values.length, (int) instance.getSize());
+
+ for(int i = 0; i < values.length; i++)
+ {
+ String value = instance.get(i);
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
+ assertEquals("Element #" + i + " differs!", values[i], value);
+ }
+
+ int index = 0;
+ for(String value : instance)
+ {
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
+ assertEquals("Element #" + index + " differs!", values[index], value);
+ index++;
+ }
+
+ FileHeader fileHeader = instance.getFileHeader();
+ assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
+
+ CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+
+ assertEquals(values.length, (int) otherInstance.getSize());
+
+ FileHeader otherHeader = otherInstance.getFileHeader();
+ assertEquals(magicValue, otherHeader.getMagicValue());
+
+ assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
+ }
+
+ @Test
+ public void readWriteNoMetaAddAll()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, null, codec, dataFile, indexFile, fileHeaderStrategy);
+ instance.addAll(values);
+ assertEquals(values.length, (int) instance.getSize());
+
+ for(int i = 0; i < values.length; i++)
+ {
+ String value = instance.get(i);
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
+ assertEquals("Element #" + i + " differs!", values[i], value);
+ }
+
+ int index = 0;
+ for(String value : instance)
+ {
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
+ assertEquals("Element #" + index + " differs!", values[index], value);
+ index++;
+ }
+
+ FileHeader fileHeader = instance.getFileHeader();
+ assertEquals(new MetaData(sparse), fileHeader.getMetaData());
+
+ CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, sparse, null, codec, dataFile, indexFile, fileHeaderStrategy);
+
+ assertEquals(values.length, (int) otherInstance.getSize());
+
+ FileHeader otherHeader = otherInstance.getFileHeader();
+ assertEquals(magicValue, otherHeader.getMagicValue());
+
+ assertEquals(new MetaData(sparse), otherHeader.getMetaData());
+ }
+
+ @Test
+ public void readWriteMetaAddAll()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+ instance.addAll(values);
+ assertEquals(values.length, (int) instance.getSize());
+
+ for(int i = 0; i < values.length; i++)
+ {
+ String value = instance.get(i);
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
+ assertEquals("Element #" + i + " differs!", values[i], value);
+ }
+
+ int index = 0;
+ for(String value : instance)
+ {
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
+ assertEquals("Element #" + index + " differs!", values[index], value);
+ index++;
+ }
+
+ FileHeader fileHeader = instance.getFileHeader();
+ assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
+
+ CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+
+ assertEquals(values.length, (int) otherInstance.getSize());
+
+ FileHeader otherHeader = otherInstance.getFileHeader();
+ assertEquals(magicValue, otherHeader.getMagicValue());
+
+ assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
+ }
+
+ @Test
+ public void readWriteMetaMixed()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+ instance.addAll(values);
+ for(String current : values)
+ {
+ instance.add(current);
+ }
+ instance.addAll(values);
+ for(String current : values)
+ {
+ instance.add(current);
+ }
+
+ assertEquals(4 * values.length, (int) instance.getSize());
+
+ for(int i = 0; i < 4 * values.length; i++)
+ {
+ String value = instance.get(i);
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
+ assertEquals("Element #" + i + " differs!", values[i % values.length], value);
+ }
+
+ int index = 0;
+ for(String value : instance)
+ {
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
+ assertEquals("Element #" + index + " differs!", values[index % values.length], value);
+ index++;
+ }
+
+ FileHeader fileHeader = instance.getFileHeader();
+ assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
+
+ CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+
+ assertEquals(4 * values.length, (int) otherInstance.getSize());
+
+ FileHeader otherHeader = otherInstance.getFileHeader();
+ assertEquals(magicValue, otherHeader.getMagicValue());
+
+ assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
+ }
+
+ @Test
+ public void readInvalid()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+
+ assertNull(instance.get(0));
+
+ instance.addAll(values);
+
+ assertNull(instance.get(values.length));
+ assertNotNull(instance.get(values.length - 1));
+ }
+
+ @Test
+ public void readWriteNoMetaMixed()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, null, codec, dataFile, indexFile, fileHeaderStrategy);
+ instance.addAll(values);
+ for(String current : values)
+ {
+ instance.add(current);
+ }
+ instance.addAll(values);
+ for(String current : values)
+ {
+ instance.add(current);
+ }
+
+ assertEquals(4 * values.length, (int) instance.getSize());
+
+ for(int i = 0; i < 4 * values.length; i++)
+ {
+ String value = instance.get(i);
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
+ assertEquals("Element #" + i + " differs!", values[i % values.length], value);
+ }
+
+ int index = 0;
+ for(String value : instance)
+ {
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
+ assertEquals("Element #" + index + " differs!", values[index % values.length], value);
+ index++;
+ }
+
+ FileHeader fileHeader = instance.getFileHeader();
+ assertEquals(new MetaData(sparse), fileHeader.getMetaData());
+
+ CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, sparse, null, codec, dataFile, indexFile, fileHeaderStrategy);
+
+ assertEquals(4 * values.length, (int) otherInstance.getSize());
+
+ FileHeader otherHeader = otherInstance.getFileHeader();
+
+ assertEquals(magicValue, otherHeader.getMagicValue());
+
+ assertEquals(new MetaData(sparse), otherHeader.getMetaData());
+ }
+
+ @Test
+ public void meta()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+
+ assertEquals(0, (int) instance.getSize());
+
+ FileHeader fileHeader = instance.getFileHeader();
+ assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
+
+ CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+
+ assertEquals(0, (int) instance.getSize());
+
+ FileHeader otherHeader = otherInstance.getFileHeader();
+ assertEquals(magicValue, otherHeader.getMagicValue());
+
+ assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
+ }
+
+ @Test
+ public void noMeta()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, null, codec, dataFile, indexFile, fileHeaderStrategy);
+
+ assertEquals(0, (int) instance.getSize());
+
+ FileHeader fileHeader = instance.getFileHeader();
+ assertEquals(new MetaData(sparse), fileHeader.getMetaData());
+
+ CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, sparse, null, codec, dataFile, indexFile, fileHeaderStrategy);
+
+ assertEquals(0, (int) instance.getSize());
+
+ FileHeader otherHeader = otherInstance.getFileHeader();
+ assertEquals(magicValue, otherHeader.getMagicValue());
+
+ assertEquals(new MetaData(sparse), otherHeader.getMetaData());
+ }
+
+ @Test
+ public void resetMeta()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+
+ instance.addAll(values);
+ assertEquals(values.length, (int) instance.getSize());
+
+ instance.reset();
+
+ assertEquals(0, instance.getSize());
+
+ FileHeader fileHeader = instance.getFileHeader();
+ assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
+
+ CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+
+ assertEquals(0, otherInstance.getSize());
+
+ FileHeader otherHeader = otherInstance.getFileHeader();
+ assertEquals(magicValue, otherHeader.getMagicValue());
+
+ assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
+
+ instance.addAll(values);
+ assertEquals(values.length, (int) instance.getSize());
+
+ for(int i = 0; i < values.length; i++)
+ {
+ String value = instance.get(i);
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
+ assertEquals("Element #" + i + " differs!", values[i], value);
+ }
+
+ int index = 0;
+ for(String value : instance)
+ {
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
+ assertEquals("Element #" + index + " differs!", values[index], value);
+ index++;
+ }
+ }
+
+ @Test
+ public void resetNoMeta()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, null, codec, dataFile, indexFile, fileHeaderStrategy);
+
+ instance.addAll(values);
+ assertEquals(values.length, (int) instance.getSize());
+
+ instance.reset();
+ assertEquals(0, instance.getSize());
+
+ FileHeader fileHeader = instance.getFileHeader();
+
+ assertEquals(new MetaData(sparse), fileHeader.getMetaData());
+
+ CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, sparse, null, codec, dataFile, indexFile, fileHeaderStrategy);
+
+ assertEquals(0, otherInstance.getSize());
+
+ FileHeader otherHeader = otherInstance.getFileHeader();
+ assertEquals(magicValue, otherHeader.getMagicValue());
+
+ assertEquals(new MetaData(sparse), otherHeader.getMetaData());
+
+ instance.addAll(values);
+ assertEquals(values.length, (int) instance.getSize());
+
+ for(int i = 0; i < values.length; i++)
+ {
+ String value = instance.get(i);
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
+ assertEquals("Element #" + i + " differs!", values[i], value);
+ }
+
+ int index = 0;
+ for(String value : instance)
+ {
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
+ assertEquals("Element #" + index + " differs!", values[index], value);
+ index++;
+ }
+ }
+
+ @Test
+ public void elementProcessorsAdd()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+ List<ElementProcessor<String>> elementProcessors = new ArrayList<ElementProcessor<String>>();
+ CapturingElementProcessor capture = new CapturingElementProcessor();
+ elementProcessors.add(capture);
+ instance.setElementProcessors(elementProcessors);
+ instance.add("Example");
+ assertEquals(1, capture.list.size());
+ assertEquals("Example", capture.list.get(0));
+ }
+
+ @Test
+ public void elementProcessorsAddAll()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+ List<ElementProcessor<String>> elementProcessors = new ArrayList<ElementProcessor<String>>();
+ CapturingElementProcessor capture = new CapturingElementProcessor();
+ elementProcessors.add(capture);
+ instance.setElementProcessors(elementProcessors);
+ instance.addAll(values);
+ assertEquals(values.length, capture.list.size());
+ int index = 0;
+ for(String value : capture.list)
+ {
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
+ assertEquals("Element #" + index + " differs!", values[index], value);
+ index++;
+ }
+ }
+
+ @Test
+ public void deleteDataFileAdd()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+ for(String current : values)
+ {
+ instance.add(current);
+ }
+ assertEquals(values.length, (int) instance.getSize());
+ dataFile.delete();
+ for(String current : values)
+ {
+ instance.add(current);
+ }
+
+ assertEquals(8 * values.length, indexFile.length());
+
+ for(int i = 0; i < values.length; i++)
+ {
+ String value = instance.get(i);
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
+ assertEquals("Element #" + i + " differs!", values[i], value);
+ }
+
+ int index = 0;
+ for(String value : instance)
+ {
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
+ assertEquals("Element #" + index + " differs!", values[index], value);
+ index++;
+ }
+
+ FileHeader fileHeader = instance.getFileHeader();
+ assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
+
+ CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+ FileHeader otherHeader = otherInstance.getFileHeader();
+ assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
+ }
+
+ @Test
+ public void deleteDataFileAddAll()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+ instance.addAll(values);
+ assertEquals(values.length, (int) instance.getSize());
+ dataFile.delete();
+ instance.addAll(values);
+
+ assertEquals(8 * values.length, indexFile.length());
+
+ for(int i = 0; i < values.length; i++)
+ {
+ String value = instance.get(i);
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
+ assertEquals("Element #" + i + " differs!", values[i], value);
+ }
+
+ int index = 0;
+ for(String value : instance)
+ {
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
+ assertEquals("Element #" + index + " differs!", values[index], value);
+ index++;
+ }
+
+ FileHeader fileHeader = instance.getFileHeader();
+ assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
+
+ CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+ FileHeader otherHeader = otherInstance.getFileHeader();
+ assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
+ }
+
+ @Test
+ public void deleteDataFileGet()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+ for(String current : values)
+ {
+ instance.add(current);
+ }
+ assertEquals(values.length, (int) instance.getSize());
+
+ FileHeader fileHeader = instance.getFileHeader();
+ assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
+
+ assertNotNull(instance.get(values.length - 1));
+ dataFile.delete();
+ assertNull(instance.get(values.length - 1));
+ }
+
+ @Test
+ public void deleteIndexFileAdd()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+ for(String current : values)
+ {
+ instance.add(current);
+ }
+ assertEquals(values.length, (int) instance.getSize());
+ indexFile.delete();
+ for(String current : values)
+ {
+ instance.add(current);
+ }
+
+ assertEquals(8 * values.length, indexFile.length());
+
+ for(int i = 0; i < values.length; i++)
+ {
+ String value = instance.get(i);
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
+ assertEquals("Element #" + i + " differs!", values[i], value);
+ }
+
+ int index = 0;
+ for(String value : instance)
+ {
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
+ assertEquals("Element #" + index + " differs!", values[index], value);
+ index++;
+ }
+
+ FileHeader fileHeader = instance.getFileHeader();
+ assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
+
+ CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+ FileHeader otherHeader = otherInstance.getFileHeader();
+ assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
+ }
+
+ @Test
+ public void deleteIndexFileAddAll()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+ instance.addAll(values);
+ assertEquals(values.length, (int) instance.getSize());
+ indexFile.delete();
+ instance.addAll(values);
+
+ assertEquals(8 * values.length, indexFile.length());
+
+ for(int i = 0; i < values.length; i++)
+ {
+ String value = instance.get(i);
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", i, value);
+ assertEquals("Element #" + i + " differs!", values[i], value);
+ }
+
+ int index = 0;
+ for(String value : instance)
+ {
+ if(logger.isInfoEnabled()) logger.info("Element #{}={}", index, value);
+ assertEquals("Element #" + index + " differs!", values[index], value);
+ index++;
+ }
+
+ FileHeader fileHeader = instance.getFileHeader();
+ assertEquals(new MetaData(metaData, sparse), fileHeader.getMetaData());
+
+ CodecFileBuffer<String> otherInstance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+ FileHeader otherHeader = otherInstance.getFileHeader();
+ assertEquals(new MetaData(metaData, sparse), otherHeader.getMetaData());
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ /**
+ * This is the case that an existing file containing data is reopened. In that case, an IllegalArgumentException is
+ * thrown instead of simply overwriting the previous data (which is done if the indexFile is deleted while
+ * "in production").
+ */
+ public void deleteIndexFileReopen()
+ {
+ CodecFileBuffer<String> instance = new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+ instance.addAll(values);
+ assertEquals(values.length, (int) instance.getSize());
+ indexFile.delete();
+ new CodecFileBuffer<String>(magicValue, sparse, metaData, codec, dataFile, indexFile, fileHeaderStrategy);
+ }
+
+ private static class CapturingElementProcessor
+ implements ElementProcessor<String>
+ {
+ public List<String> list = new ArrayList<String>();
+
+ public void processElement(String element)
+ {
+ list.add(element);
+ }
+
+ public void processElements(List<String> element)
+ {
+ list.addAll(element);
+ }
+ }
+}
Copied: trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/SparseCodecFileBufferTest.java (from rev 110, trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/CodecFileBufferTest.java)
===================================================================
--- trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/SparseCodecFileBufferTest.java (rev 0)
+++ trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/SparseCodecFileBufferTest.java 2009-05-27 21:21:37 UTC (rev 111)
@@ -0,0 +1,27 @@
+/*
+ * sulky-modules - several general-purpose modules.
+ * Copyright (C) 2007-2009 Joern Huxhorn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package de.huxhorn.sulky.codec.filebuffer;
+
+public class SparseCodecFileBufferTest
+ extends CodecFileBufferTestBase
+{
+ protected void initSparse()
+ {
+ sparse=true;
+ }
+}
Modified: trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/SparseDataStrategyTest.java
===================================================================
--- trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/SparseDataStrategyTest.java 2009-05-26 20:11:18 UTC (rev 110)
+++ trunk/sulky-codec-filebuffer/src/test/java/de/huxhorn/sulky/codec/filebuffer/SparseDataStrategyTest.java 2009-05-27 21:21:37 UTC (rev 111)
@@ -150,6 +150,7 @@
closeQuietly(randomIndexFile);
closeQuietly(randomDataFile);
}
+ // TODO: overwrite + set to null
}
@Test
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|