package org.springmodules.lucene.index.resource; import org.apache.lucene.analysis.SimpleAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.Term; import org.apache.lucene.store.Directory; import org.apache.lucene.store.RAMDirectory; import org.springmodules.lucene.index.LuceneIndexingException; import org.springmodules.lucene.index.core.DefaultLuceneIndexTemplate; import org.springmodules.lucene.index.factory.IndexFactory; import org.springmodules.lucene.index.factory.LuceneIndexReader; import org.springmodules.lucene.index.factory.LuceneIndexWriter; public class DefaultResourceManagerTests extends AbstractDefaultResourceManagerTests { public void testTwoResourcesOpened() throws Exception { IndexFactory indexFactory = createIndexFactory(); ResourceManager resourceManager = createResourceManager(indexFactory); DefaultResourceManagementDefinition definition = new DefaultResourceManagementDefinition(); definition.setIndexReaderOpen(true); definition.setIndexWriterOpen(true); resourceManager.initializeResources(definition); ResourceHolder holder = (ResourceHolder)ResourceBindingManager.getResource(indexFactory); try { assertNotNull(holder.getIndexReader()); assertNotNull(holder.getIndexWriter()); } finally { resourceManager.releaseResources(); } } public void testOnlyIndexReaderOpened() throws Exception { IndexFactory indexFactory = createIndexFactory(); ResourceManager resourceManager = createResourceManager(indexFactory); DefaultResourceManagementDefinition definition = new DefaultResourceManagementDefinition(); definition.setIndexReaderOpen(true); definition.setIndexWriterOpen(false); resourceManager.initializeResources(definition); ResourceHolder holder = (ResourceHolder)ResourceBindingManager.getResource(indexFactory); assertNotNull(holder.getIndexReader()); try { holder.getIndexWriter(); fail(); } catch(LuceneIndexingException ex) { } finally { resourceManager.releaseResources(); } } public void testOnlyIndexReaderOpenedAndProtected() throws Exception { IndexFactory indexFactory = createIndexFactory(); ResourceManager resourceManager = createResourceManager(indexFactory); DefaultResourceManagementDefinition definition = new DefaultResourceManagementDefinition(); definition.setIndexReaderOpen(true); definition.setWriteOperationsForIndexReaderAuthorized(false); definition.setIndexWriterOpen(false); resourceManager.initializeResources(definition); ResourceHolder holder = (ResourceHolder)ResourceBindingManager.getResource(indexFactory); assertNotNull(holder.getIndexReader()); try { holder.getIndexWriter(); fail(); } catch(LuceneIndexingException ex) {} LuceneIndexReader indexReader = holder.getIndexReader(); try { indexReader.deleteDocument(2); fail(); } catch(LuceneIndexingException ex) {} try { indexReader.deleteDocuments(new Term("id", "1")); fail(); } catch(LuceneIndexingException ex) {} try { indexReader.setNorm(2, null, 2); fail(); } catch(LuceneIndexingException ex) {} try { indexReader.undeleteAll(); fail(); } catch(LuceneIndexingException ex) {} resourceManager.releaseResources(); } public void testOnlyIndexWriterOpened() throws Exception { IndexFactory indexFactory = createIndexFactory(); ResourceManager resourceManager = createResourceManager(indexFactory); DefaultResourceManagementDefinition definition = new DefaultResourceManagementDefinition(); definition.setIndexReaderOpen(false); definition.setIndexWriterOpen(true); resourceManager.initializeResources(definition); ResourceHolder holder = (ResourceHolder)ResourceBindingManager.getResource(indexFactory); try { holder.getIndexReader(); fail(); } catch(LuceneIndexingException ex) { } finally { resourceManager.releaseResources(); } try { assertNotNull(holder.getIndexWriter()); } finally { resourceManager.releaseResources(); } } public void testOnlyIndexWriterOpenedAndProtected() throws Exception { IndexFactory indexFactory = createIndexFactory(); ResourceManager resourceManager = createResourceManager(indexFactory); DefaultResourceManagementDefinition definition = new DefaultResourceManagementDefinition(); definition.setIndexReaderOpen(false); definition.setIndexWriterOpen(true); definition.setWriteOperationsForIndexWriterAuthorized(false); resourceManager.initializeResources(definition); ResourceHolder holder = (ResourceHolder)ResourceBindingManager.getResource(indexFactory); try { holder.getIndexReader(); fail(); } catch(LuceneIndexingException ex) {} assertNotNull(holder.getIndexWriter()); LuceneIndexWriter indexWriter = holder.getIndexWriter(); try { Document document = new Document(); document.add(new Field("id", "1", Field.Store.YES, Field.Index.UN_TOKENIZED)); indexWriter.addDocument(document); fail(); } catch(LuceneIndexingException ex) {} try { indexWriter.addIndexes(new Directory[] { new RAMDirectory() }); fail(); } catch(LuceneIndexingException ex) {} try { indexWriter.optimize(); fail(); } catch(LuceneIndexingException ex) {} try { indexWriter.setCommitLockTimeout(2); fail(); } catch(LuceneIndexingException ex) {} resourceManager.releaseResources(); } public void testTemplateExecutionWithIndexReader() throws Exception { IndexFactory indexFactory = createIndexFactory(); ResourceManager resourceManager = createResourceManager(indexFactory); DefaultLuceneIndexTemplate template = new DefaultLuceneIndexTemplate(); template.setIndexFactory(indexFactory); template.setAnalyzer(new SimpleAnalyzer()); template.afterPropertiesSet(); DefaultResourceManagementDefinition definition = new DefaultResourceManagementDefinition(); definition.setIndexReaderOpen(true); definition.setWriteOperationsForIndexReaderAuthorized(true); try { resourceManager.initializeResources(definition); template.deleteDocuments(new Term("id", "1")); template.hasDeletions(); template.isDeleted(1); template.isDeleted(2); template.undeleteDocuments(); } finally { resourceManager.releaseResources(); } } public void testTemplateExecutionWithIndexWriter() throws Exception { IndexFactory indexFactory = createIndexFactory(); ResourceManager resourceManager = createResourceManager(indexFactory); DefaultLuceneIndexTemplate template = new DefaultLuceneIndexTemplate(); template.setIndexFactory(indexFactory); template.setAnalyzer(new SimpleAnalyzer()); template.afterPropertiesSet(); DefaultResourceManagementDefinition definition = new DefaultResourceManagementDefinition(); definition.setIndexWriterOpen(true); definition.setWriteOperationsForIndexWriterAuthorized(true); try { resourceManager.initializeResources(definition); Document document = new Document(); document.add(new Field("id", "1", Field.Store.YES, Field.Index.UN_TOKENIZED)); template.addDocument(document); template.addDocument(document); template.addDocument(document); template.optimize(); } finally { resourceManager.releaseResources(); } } public void testTemplateExecutionWithIndexWriterReaderWithError() throws Exception { IndexFactory indexFactory = createIndexFactory(); ResourceManager resourceManager = createResourceManager(indexFactory); DefaultLuceneIndexTemplate template = new DefaultLuceneIndexTemplate(); template.setIndexFactory(indexFactory); template.setAnalyzer(new SimpleAnalyzer()); template.afterPropertiesSet(); DefaultResourceManagementDefinition definition = new DefaultResourceManagementDefinition(); definition.setIndexWriterOpen(true); definition.setWriteOperationsForIndexWriterAuthorized(true); //definition.setIndexReaderOpen(true); definition.setWriteOperationsForIndexReaderAuthorized(false); try { resourceManager.initializeResources(definition); Document document = new Document(); document.add(new Field("id", "3", Field.Store.YES, Field.Index.UN_TOKENIZED)); template.addDocument(document); template.addDocument(document); template.addDocument(document); try { template.deleteDocuments(new Term("id", "1")); fail(); } catch(LuceneIndexingException ex) {} template.optimize(); } finally { resourceManager.releaseResources(); } } public void testTemplateExecutionWithIndexWriterReader() throws Exception { IndexFactory indexFactory = createIndexFactory(); ResourceManager resourceManager = createResourceManager(indexFactory); DefaultLuceneIndexTemplate template = new DefaultLuceneIndexTemplate(); template.setIndexFactory(indexFactory); template.setAnalyzer(new SimpleAnalyzer()); template.afterPropertiesSet(); DefaultResourceManagementDefinition definition = new DefaultResourceManagementDefinition(); definition.setIndexWriterOpen(true); definition.setWriteOperationsForIndexWriterAuthorized(true); definition.setIndexReaderOpen(true); definition.setWriteOperationsForIndexReaderAuthorized(false); try { resourceManager.initializeResources(definition); Document document = new Document(); document.add(new Field("id", "3", Field.Store.YES, Field.Index.UN_TOKENIZED)); template.addDocument(document); template.addDocument(document); template.addDocument(document); try { template.deleteDocuments(new Term("id", "1")); } catch(LuceneIndexingException ex) {} template.optimize(); } finally { resourceManager.releaseResources(); } } }