Package org.springmodules.lucene.index.object.database

Source Code of org.springmodules.lucene.index.object.database.DatabaseIndexerTests

/*
* Copyright 2002-2007 the original author or authors.
*
* Licensed 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.springmodules.lucene.index.object.database;

import java.sql.ResultSet;
import java.sql.SQLException;

import junit.framework.TestCase;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.easymock.AbstractMatcher;
import org.easymock.MockControl;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.BadSqlGrammarException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springmodules.lucene.index.document.handler.database.SqlDocumentHandler;
import org.springmodules.lucene.index.document.handler.database.SqlRequest;
import org.springmodules.lucene.index.factory.IndexFactory;
import org.springmodules.lucene.index.factory.LuceneIndexWriter;

/**
* @author Thierry Templier
*/
public class DatabaseIndexerTests extends TestCase {

  private DriverManagerDataSource dataSource;
  private JdbcTemplate template;

  /**
   * @see junit.framework.TestCase#setUp()
   */
  protected void setUp() throws Exception {
    //Initialization of the datasource
    this.dataSource = new DriverManagerDataSource();
    this.dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
    this.dataSource.setUrl("jdbc:hsqldb:test");
    this.dataSource.setUsername("sa");
    this.dataSource.setPassword("");
    this.template = new JdbcTemplate(this.dataSource);

    //Creation of the schema
    StringBuffer requestCreate = new StringBuffer();
    requestCreate.append("DROP TABLE TEST IF EXISTS" );
    this.template.execute(requestCreate.toString());
    requestCreate = new StringBuffer();
    requestCreate.append("create table TEST ( TEST_ID INT not null,");
    requestCreate.append(" TEST_NAME VARCHAR(255) not null,");
    requestCreate.append(" constraint PK_TEST primary key (TEST_ID) )");
    this.template.execute(requestCreate.toString());

    //Insertion of tuples
    StringBuffer requestInsertion = new StringBuffer();
    requestInsertion.append("insert into TEST (TEST_ID, TEST_NAME)");
    requestInsertion.append(" values(1, 'this is a test')");
    this.template.execute(requestInsertion.toString());
  }

  /**
   * @see junit.framework.TestCase#tearDown()
   */
  protected void tearDown() throws Exception {
    //Destoy the schema
    this.template.execute("drop table TEST");

    //Finalization of the datasource
    this.dataSource = null;
    this.template = null;
  }

  final public void testRegisterDocumentHandler() {
    MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
    IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();

    indexFactoryControl.replay();
   
    //Indexer
    DefaultDatabaseIndexer indexer = new DefaultDatabaseIndexer(indexFactory);

    //Register a document handler
    SqlRequest request = new SqlRequest("select * from test");
    assertNull(indexer.getDocumentHandler(request));

    indexer.registerDocumentHandler(request,new SqlDocumentHandler() {
      public Document getDocument(SqlRequest request, ResultSet rs) throws SQLException {
        return null;
      }
    });
   
    Analyzer a = null;
   

    indexFactoryControl.verify();
    assertNotNull(indexer.getDocumentHandler(request));
  }

  final public void testUnregisterDocumentHandler() {
    MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
    IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();

    indexFactoryControl.replay();
   
    //Indexer
    DefaultDatabaseIndexer indexer = new DefaultDatabaseIndexer(indexFactory);

    //Register a document handler
    SqlRequest request = new SqlRequest("select * from test");
    indexer.registerDocumentHandler(request, new SqlDocumentHandler() {
      public Document getDocument(SqlRequest request, ResultSet rs) throws SQLException {
        return null;
      }
    });
    assertNotNull(indexer.getDocumentHandler(request));

    //Unregister a document handler
    indexer.unregisterDocumentHandler(request);
    assertNull(indexer.getDocumentHandler(request));

    indexFactoryControl.verify();
  }

  final public void testAddListener() {
    MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
    IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();

    indexFactoryControl.replay();
   
    //Indexer
    DefaultDatabaseIndexer indexer = new DefaultDatabaseIndexer(indexFactory);

    //Register a document handler
    assertEquals(indexer.getListeners().size(), 0);

    DatabaseIndexingListener listener = new DatabaseIndexingListenerAdapter();
    indexer.addListener(listener);
    assertEquals(indexer.getListeners().size(), 1);
    DatabaseIndexingListener tmpListener = (DatabaseIndexingListener)indexer.getListeners().get(0);
    assertEquals(listener, tmpListener);
   
    indexFactoryControl.verify();
  }

  final public void testRemoveListener() {
    MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
    IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();

    indexFactoryControl.replay();
   
    //Indexer
    DefaultDatabaseIndexer indexer = new DefaultDatabaseIndexer(indexFactory);

    //Register a document handler
    DatabaseIndexingListener listener = new DatabaseIndexingListenerAdapter();
    indexer.addListener(listener);
    assertEquals(indexer.getListeners().size(), 1);
    DatabaseIndexingListener tmpListener = (DatabaseIndexingListener)indexer.getListeners().get(0);
    assertEquals(listener, tmpListener);

    //Unregister a document handler
    indexer.removeListener(listener);
    assertEquals(indexer.getListeners().size(), 0);

    indexFactoryControl.verify();
  }

  final public void testIndexDataSource() throws Exception {
    MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
    IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();
    MockControl indexWriterControl = MockControl.createStrictControl(LuceneIndexWriter.class);
    LuceneIndexWriter indexWriter = (LuceneIndexWriter)indexWriterControl.getMock();
    MockControl listenerControl = MockControl.createControl(DatabaseIndexingListener.class);
    DatabaseIndexingListener listener = (DatabaseIndexingListener)listenerControl.getMock();

    //requests
    SqlRequest request1 = new SqlRequest("select * from test");
    SqlRequest request2 = new SqlRequest("select * from test");

    //documents
    final Document document1 = new Document();
    document1.add(new Field("contents", "test_name", Field.Store.NO, Field.Index.TOKENIZED));
    final Document document2 = new Document();
    document2.add(new Field("contents", "test_name", Field.Store.NO, Field.Index.TOKENIZED));

    indexFactory.getIndexWriter();
    indexFactoryControl.setReturnValue(indexWriter, 1);
   
    listener.beforeIndexingRequest(request1);
    listenerControl.setVoidCallable(1);
   
    indexWriter.addDocument(document1);
    indexWriterControl.setMatcher(new AbstractMatcher() {
      protected boolean argumentMatches(Object expected, Object actual) {
        if( expected instanceof Document && actual instanceof Document ) {
          return true;
        } else {
          return expected.equals(actual);
        }
      }
    });
    indexWriterControl.setVoidCallable(1);

    listener.afterIndexingRequest(request1);
    listenerControl.setVoidCallable(1);

    listener.beforeIndexingRequest(request2);
    listenerControl.setVoidCallable(1);

    indexWriter.addDocument(document2);
    indexWriterControl.setVoidCallable(1);

    listener.afterIndexingRequest(request2);
    listenerControl.setVoidCallable(1);

    indexWriter.close();
    indexWriterControl.setVoidCallable(1);
   
    indexFactoryControl.replay();
    indexWriterControl.replay();
    listenerControl.replay();
   
    //Indexer
    final boolean[] called = new boolean[] { false, false };
    DefaultDatabaseIndexer indexer = new DefaultDatabaseIndexer(indexFactory);
    indexer.registerDocumentHandler(request1, new SqlDocumentHandler() {
      public Document getDocument(SqlRequest request, ResultSet rs) throws SQLException {
        called[0] = true;
        return document1;
      }
    });
    indexer.registerDocumentHandler(request2, new SqlDocumentHandler() {
      public Document getDocument(SqlRequest request, ResultSet rs) throws SQLException {
        called[1] = true;
        return document2;
      }
    });
    indexer.addListener(listener);

    //Index
    indexer.index(this.dataSource);

    assertTrue(called[0]);
    assertTrue(called[1]);

    indexFactoryControl.verify();
    indexWriterControl.verify();
    listenerControl.verify();
  }

  final public void testIndexDataSourceWithSqlError() throws Exception {
    MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
    IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();
    MockControl indexWriterControl = MockControl.createStrictControl(LuceneIndexWriter.class);
    LuceneIndexWriter indexWriter = (LuceneIndexWriter)indexWriterControl.getMock();
    MockControl listenerControl = MockControl.createControl(DatabaseIndexingListener.class);
    DatabaseIndexingListener listener = (DatabaseIndexingListener)listenerControl.getMock();
   
    //requests
    SqlRequest request1 = new SqlRequest("select * from test1");

    //documents
    final Document document1 = new Document();
    document1.add(new Field("contents", "test_name", Field.Store.NO, Field.Index.TOKENIZED));
   
    //exception
    BadSqlGrammarException ex = new BadSqlGrammarException("arg1", "arg2", null);

    indexFactory.getIndexWriter();
    indexFactoryControl.setReturnValue(indexWriter, 1);
   
    listener.beforeIndexingRequest(request1);
    listenerControl.setVoidCallable(1);
   
    listener.onErrorIndexingRequest(request1, ex);
    listenerControl.setMatcher(new AbstractMatcher() {
      protected boolean argumentMatches(Object expected, Object actual) {
        if( expected instanceof DataAccessException && actual instanceof DataAccessException ) {
          return true;
        } else {
          return expected.equals(actual);
        }
      }
    });

    listenerControl.setVoidCallable(1);

    indexWriter.close();
    indexWriterControl.setVoidCallable(1);
   
    indexFactoryControl.replay();
    indexWriterControl.replay();
    listenerControl.replay();
   
    //Indexer
    final boolean[] called = new boolean[] { false };
    DefaultDatabaseIndexer indexer = new DefaultDatabaseIndexer(indexFactory);
    indexer.registerDocumentHandler(request1, new SqlDocumentHandler() {
      public Document getDocument(SqlRequest request, ResultSet rs) throws SQLException {
        called[0] = true;
        return document1;
      }
    });
    indexer.addListener(listener);

    //Index
    indexer.index(this.dataSource);

    assertFalse(called[0]);

    indexFactoryControl.verify();
    indexWriterControl.verify();
    listenerControl.verify();
  }

  final public void testIndexDataSourceboolean() throws Exception {
    MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
    IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();
    MockControl indexWriterControl = MockControl.createStrictControl(LuceneIndexWriter.class);
    LuceneIndexWriter indexWriter = (LuceneIndexWriter)indexWriterControl.getMock();
    MockControl listenerControl = MockControl.createControl(DatabaseIndexingListener.class);
    DatabaseIndexingListener listener = (DatabaseIndexingListener)listenerControl.getMock();

    //requests
    SqlRequest request1 = new SqlRequest("select * from test");
    SqlRequest request2 = new SqlRequest("select * from test");

    //documents
    final Document document1 = new Document();
    document1.add(new Field("contents", "test_name", Field.Store.NO, Field.Index.TOKENIZED));
    final Document document2 = new Document();
    document2.add(new Field("contents", "test_name", Field.Store.NO, Field.Index.TOKENIZED));

    indexFactory.getIndexWriter();
    indexFactoryControl.setReturnValue(indexWriter, 1);
   
    listener.beforeIndexingRequest(request1);
    listenerControl.setVoidCallable(1);
   
    indexWriter.addDocument(document1);
    indexWriterControl.setMatcher(new AbstractMatcher() {
      protected boolean argumentMatches(Object expected, Object actual) {
        if( expected instanceof Document && actual instanceof Document ) {
          return true;
        } else {
          return expected.equals(actual);
        }
      }
    });
    indexWriterControl.setVoidCallable(1);

    listener.afterIndexingRequest(request1);
    listenerControl.setVoidCallable(1);

    listener.beforeIndexingRequest(request2);
    listenerControl.setVoidCallable(1);

    indexWriter.addDocument(document2);
    indexWriterControl.setVoidCallable(1);

    listener.afterIndexingRequest(request2);
    listenerControl.setVoidCallable(1);
   
    indexWriter.optimize();
    indexWriterControl.setVoidCallable(1);

    indexWriter.close();
    indexWriterControl.setVoidCallable(1);
   
    indexFactoryControl.replay();
    indexWriterControl.replay();
    listenerControl.replay();
   
    //Indexer
    final boolean[] called = new boolean[] { false, false };
    DefaultDatabaseIndexer indexer = new DefaultDatabaseIndexer(indexFactory);
    indexer.registerDocumentHandler(request1, new SqlDocumentHandler() {
      public Document getDocument(SqlRequest request, ResultSet rs) throws SQLException {
        called[0] = true;
        return document1;
      }
    });
    indexer.registerDocumentHandler(request2, new SqlDocumentHandler() {
      public Document getDocument(SqlRequest request, ResultSet rs) throws SQLException {
        called[1] = true;
        return document2;
      }
    });
    indexer.addListener(listener);

    //Index
    indexer.index(this.dataSource, true);

    assertTrue(called[0]);
    assertTrue(called[1]);

    indexFactoryControl.verify();
    indexWriterControl.verify();
    listenerControl.verify();
  }

}
TOP

Related Classes of org.springmodules.lucene.index.object.database.DatabaseIndexerTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.