package org.springmodules.lucene.index.factory.concurrent;
import java.io.IOException;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.store.RAMDirectory;
import junit.framework.TestCase;
public class ConcurrencyTests extends TestCase {
private RAMDirectory directory;
protected void initializeIndex(IndexWriter writer) throws IOException {
Document document1 = new Document();
document1.add(new Field("id", "1", Field.Store.YES, Field.Index.UN_TOKENIZED));
document1.add(new Field("field", "a sample", Field.Store.YES, Field.Index.TOKENIZED));
document1.add(new Field("filter", "a sample filter", Field.Store.YES, Field.Index.TOKENIZED));
document1.add(new Field("sort", "2", Field.Store.YES, Field.Index.UN_TOKENIZED));
writer.addDocument(document1);
Document document2 = new Document();
document2.add(new Field("id", "2", Field.Store.YES, Field.Index.UN_TOKENIZED));
document2.add(new Field("field", "a sample", Field.Store.YES, Field.Index.TOKENIZED));
document2.add(new Field("filter", "a sample filter", Field.Store.YES, Field.Index.TOKENIZED));
document2.add(new Field("test", "value", Field.Store.YES, Field.Index.TOKENIZED));
document2.add(new Field("sort", "2", Field.Store.YES, Field.Index.UN_TOKENIZED));
writer.addDocument(document2);
}
protected void doCloseIndexWriter(IndexWriter writer) {
try {
if( writer!=null ) {
writer.close();
}
} catch(Exception ex) {
ex.printStackTrace();
}
}
protected void setUp() throws Exception {
System.out.println("---- initIndex -----");
directory = new RAMDirectory();
IndexWriter writer = null;
try {
writer = new IndexWriter(directory, new SimpleAnalyzer(), true);
initializeIndex(writer);
} catch(Exception ex) {
ex.printStackTrace();
} finally {
doCloseIndexWriter(writer);
}
}
protected void tearDown() throws Exception {
directory.close();
directory = null;
}
public void testOpenTwoIndexReader() throws Exception {
IndexReader reader1 = IndexReader.open(directory);
IndexReader reader2 = IndexReader.open(directory);
reader1.close();
reader2.close();
}
public void testOpenTwoIndexWriter() throws Exception {
try {
IndexWriter writer1 = new IndexWriter(directory, new SimpleAnalyzer(), false);
IndexWriter writer2 = new IndexWriter(directory, new SimpleAnalyzer(), false);
fail();
} catch(IOException ex) { }
}
public void testOpenIndexReaderWriter() throws Exception {
IndexReader reader = IndexReader.open(directory);
IndexWriter writer = new IndexWriter(directory, new SimpleAnalyzer(), false);
reader.close();
writer.close();
}
public void testAddDeleteDocumentError1() throws Exception {
try {
IndexReader reader = IndexReader.open(directory);
IndexWriter writer = new IndexWriter(directory, new SimpleAnalyzer(), false);
Document document = new Document();
document.add(new Field("id", "1", Field.Store.YES, Field.Index.UN_TOKENIZED));
document.add(new Field("field", "a sample", Field.Store.YES, Field.Index.TOKENIZED));
document.add(new Field("filter", "a sample filter", Field.Store.YES, Field.Index.TOKENIZED));
document.add(new Field("sort", "2", Field.Store.YES, Field.Index.UN_TOKENIZED));
writer.addDocument(document);
reader.deleteDocuments(new Term("field", "sample"));
fail();
} catch(IOException ex) {}
}
public void testAddDeleteDocumentError2() throws Exception {
try {
IndexReader reader = IndexReader.open(directory);
IndexWriter writer = new IndexWriter(directory, new SimpleAnalyzer(), false);
Document document = new Document();
document.add(new Field("id", "1", Field.Store.YES, Field.Index.UN_TOKENIZED));
document.add(new Field("field", "a sample", Field.Store.YES, Field.Index.TOKENIZED));
document.add(new Field("filter", "a sample filter", Field.Store.YES, Field.Index.TOKENIZED));
document.add(new Field("sort", "2", Field.Store.YES, Field.Index.UN_TOKENIZED));
writer.addDocument(document);
writer.close();
reader.deleteDocuments(new Term("field", "sample"));
reader.close();
fail();
} catch(IOException ex) {}
}
public void testAddDeleteDocumentSuccess() throws Exception {
IndexWriter writer = new IndexWriter(directory, new SimpleAnalyzer(), false);
Document document = new Document();
document.add(new Field("id", "1", Field.Store.YES, Field.Index.UN_TOKENIZED));
document.add(new Field("field", "a sample", Field.Store.YES, Field.Index.TOKENIZED));
document.add(new Field("filter", "a sample filter", Field.Store.YES, Field.Index.TOKENIZED));
document.add(new Field("sort", "2", Field.Store.YES, Field.Index.UN_TOKENIZED));
writer.addDocument(document);
writer.close();
IndexReader reader = IndexReader.open(directory);
reader.deleteDocuments(new Term("field", "sample"));
reader.close();
}
public void testAddOptimizeDocument() throws Exception {
IndexWriter writer = new IndexWriter(directory, new SimpleAnalyzer(), false);
Document document = new Document();
document.add(new Field("id", "1", Field.Store.YES, Field.Index.UN_TOKENIZED));
document.add(new Field("field", "a sample", Field.Store.YES, Field.Index.TOKENIZED));
document.add(new Field("filter", "a sample filter", Field.Store.YES, Field.Index.TOKENIZED));
document.add(new Field("sort", "2", Field.Store.YES, Field.Index.UN_TOKENIZED));
writer.addDocument(document);
writer.optimize();
writer.close();
}
public void testDeleteOptimizeDocumentError1() throws Exception {
try {
IndexWriter writer = new IndexWriter(directory, new SimpleAnalyzer(), false);
IndexReader reader = IndexReader.open(directory);
reader.deleteDocuments(new Term("field", "sample"));
writer.optimize();
fail();
} catch (Exception ex) { }
}
public void testDeleteOptimizeDocumentError2() throws Exception {
try {
IndexWriter writer = new IndexWriter(directory, new SimpleAnalyzer(), false);
IndexReader reader = IndexReader.open(directory);
reader.deleteDocuments(new Term("field", "sample"));
reader.close();
writer.optimize();
writer.close();
fail();
} catch (Exception ex) { }
}
public void testDeleteOptimizeDocumentSucess() throws Exception {
IndexReader reader = IndexReader.open(directory);
reader.deleteDocuments(new Term("field", "sample"));
reader.close();
IndexWriter writer = new IndexWriter(directory, new SimpleAnalyzer(), false);
writer.optimize();
writer.close();
}
}