Package org.hibernate.search.test.directoryProvider

Source Code of org.hibernate.search.test.directoryProvider.RetryInitializeTest

/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/

package org.hibernate.search.test.directoryProvider;

import static org.hibernate.search.test.directoryProvider.FSSlaveAndMasterDPTest.masterCopy;
import static org.hibernate.search.test.directoryProvider.FSSlaveAndMasterDPTest.masterMain;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.io.File;

import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.RAMDirectory;
import org.hibernate.search.exception.SearchException;
import org.hibernate.search.engine.spi.EntityIndexBinding;
import org.hibernate.search.indexes.impl.DirectoryBasedIndexManager;
import org.hibernate.search.indexes.spi.IndexManager;
import org.hibernate.search.spi.SearchFactoryIntegrator;
import org.hibernate.search.test.util.FullTextSessionBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
* Verifies basic behavior of FSSlaveDirectoryProvider around
* {@link org.hibernate.search.store.impl.DirectoryProviderHelper#getRetryInitializePeriod(java.util.Properties, String)}
* (HSEARCH-323)
*
* @author Sanne Grinovero <sanne@hibernate.org> (C) 2011 Red Hat Inc.
*/
public class RetryInitializeTest {

  private FullTextSessionBuilder slave;
  private FullTextSessionBuilder master;
  private File root;

  @Before
  public void setUp() throws Exception {
    root = FSSlaveAndMasterDPTest.prepareDirectories( getClass().getSimpleName() );
  }

  @After
  public void tearDown() throws Exception {
    if ( slave != null ) {
      slave.close();
    }
    if ( master != null ) {
      master.close();
    }
    FSSlaveAndMasterDPTest.cleanupDirectories( root );
  }

  @Test
  public void testStandardInitialization() {
    master = createMasterNode();
    slave = createSlaveNode( false );
  }

  @Test(expected = SearchException.class)
  public void testInitiallyFailing() {
    slave = createSlaveNode( false );
  }

  @Test
  public void testMasterDelayedInitialization() {
    slave = createSlaveNode( true );

    assertNotNull( FSSlaveDirectoryProviderTestingExtension.taskScheduled );
    Long scheduledPeriod = FSSlaveDirectoryProviderTestingExtension.taskScheduledPeriod;
    assertNotNull( scheduledPeriod );
    assertEquals( Long.valueOf( 12000L ), scheduledPeriod );

    SearchFactoryIntegrator searchFactory = (SearchFactoryIntegrator) slave.getSearchFactory();

    EntityIndexBinding snowIndexBinder = searchFactory.getIndexBinding( SnowStorm.class );
    IndexManager[] indexManagers = snowIndexBinder.getIndexManagers();
    assertEquals( 1, indexManagers.length );
    DirectoryBasedIndexManager indexManager = (DirectoryBasedIndexManager) indexManagers[0];
    FSSlaveDirectoryProviderTestingExtension dp = (FSSlaveDirectoryProviderTestingExtension) indexManager.getDirectoryProvider();
    // now as master wasn't started yet, it should return a "dummy" index a RAMDirectory
    Directory directory = dp.getDirectory();
    assertTrue( directory instanceof RAMDirectory );
    dp.triggerTimerAction();
    // still didn't start it..
    directory = dp.getDirectory();
    assertTrue( directory instanceof RAMDirectory );
    // now the master goes online, at first timer tick we'll switch to the real index
    master = createMasterNode();
    dp.triggerTimerAction();
    directory = dp.getDirectory();
    assertTrue( directory instanceof FSDirectory );
  }

  private FullTextSessionBuilder createMasterNode() {
    return new FullTextSessionBuilder()
      .addAnnotatedClass( SnowStorm.class )
      .setProperty( "hibernate.search.default.sourceBase", root.getAbsolutePath() + masterCopy )
      .setProperty( "hibernate.search.default.indexBase", root.getAbsolutePath() + masterMain )
      .setProperty( "hibernate.search.default.directory_provider", "filesystem-master" )
      .build();
  }

  private FullTextSessionBuilder createSlaveNode(boolean enableRetryInitializePeriod) {
    FullTextSessionBuilder builder = new FullTextSessionBuilder()
      .addAnnotatedClass( SnowStorm.class )
      .setProperty( "hibernate.search.default.sourceBase", root.getAbsolutePath() + masterCopy )
      .setProperty( "hibernate.search.default.indexBase", root.getAbsolutePath() + "/slave" )
      .setProperty( "hibernate.search.default.directory_provider", FSSlaveDirectoryProviderTestingExtension.class.getName() );
    if ( enableRetryInitializePeriod ) {
      builder.setProperty( "hibernate.search.default.retry_initialize_period", "12" );
    }
    return builder.build();
  }

}
TOP

Related Classes of org.hibernate.search.test.directoryProvider.RetryInitializeTest

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.