Package org.hibernate.search.test.serialization

Source Code of org.hibernate.search.test.serialization.SerializationTest

/*
* 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.serialization;

import static org.fest.assertions.Assertions.assertThat;
import static org.junit.Assert.assertTrue;

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.lucene.document.Document;
import org.apache.lucene.document.DoubleField;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.FloatField;
import org.apache.lucene.document.IntField;
import org.apache.lucene.document.LongField;
import org.apache.lucene.util.AttributeImpl;
import org.hibernate.search.backend.AddLuceneWork;
import org.hibernate.search.backend.DeleteLuceneWork;
import org.hibernate.search.backend.LuceneWork;
import org.hibernate.search.backend.OptimizeLuceneWork;
import org.hibernate.search.backend.PurgeAllLuceneWork;
import org.hibernate.search.backend.UpdateLuceneWork;
import org.hibernate.search.engine.service.impl.StandardServiceManager;
import org.hibernate.search.engine.service.spi.ServiceManager;
import org.hibernate.search.indexes.serialization.avro.impl.AvroSerializationProvider;
import org.hibernate.search.indexes.serialization.impl.CopyTokenStream;
import org.hibernate.search.indexes.serialization.impl.LuceneWorkSerializerImpl;
import org.hibernate.search.indexes.serialization.spi.LuceneWorkSerializer;
import org.hibernate.search.indexes.serialization.spi.SerializationProvider;
import org.hibernate.search.test.serialization.AvroTestHelpers.SerializableStringReader;
import org.hibernate.search.testsupport.junit.SearchFactoryHolder;
import org.hibernate.search.testsupport.setup.SearchConfigurationForTest;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;

/**
* @author Emmanuel Bernard <emmanuel@hibernate.org>
*/
public class SerializationTest {

  @Rule
  public SearchFactoryHolder searchFactoryHolder = new SearchFactoryHolder( RemoteEntity.class );

  private SerializationProvider serializationProvider;

  @Before
  public void setUp() {
    ServiceManager serviceManager = new StandardServiceManager(
        new SearchConfigurationForTest(),
        null
    );

    serializationProvider = serviceManager.requestService( SerializationProvider.class );
    assertTrue( "Wrong serialization provider", serializationProvider instanceof AvroSerializationProvider );
  }

  @Test
  public void testAvroSerialization() throws Exception {


    LuceneWorkSerializer converter = new LuceneWorkSerializerImpl(
        serializationProvider,
        searchFactoryHolder.getSearchFactory()
    );
    List<LuceneWork> works = buildWorks();

    byte[] bytes = converter.toSerializedModel( works );
    List<LuceneWork> copyOfWorks = converter.toLuceneWorks( bytes );

    assertThat( copyOfWorks ).hasSize( works.size() );
    for ( int index = 0; index < works.size(); index++ ) {
      AvroTestHelpers.assertLuceneWork( works.get( index ), copyOfWorks.get( index ) );
    }
  }

  public static List<LuceneWork> buildWorks() throws Exception {
    List<LuceneWork> works = new ArrayList<LuceneWork>();
    works.add( OptimizeLuceneWork.INSTANCE );
    works.add( OptimizeLuceneWork.INSTANCE );
    works.add( new OptimizeLuceneWork( RemoteEntity.class ) ); //class won't be send over
    works.add( new PurgeAllLuceneWork( RemoteEntity.class ) );
    works.add( new PurgeAllLuceneWork( RemoteEntity.class ) );
    works.add( new DeleteLuceneWork( 123l, "123", RemoteEntity.class ) );
    works.add( new DeleteLuceneWork( "Sissi", "Sissi", RemoteEntity.class ) );
    works.add(
        new DeleteLuceneWork(
            new URL( "http://emmanuelbernard.com" ),
            "http://emmanuelbernard.com",
            RemoteEntity.class
        )
    );

    Document doc = new Document();
    Field numField = new DoubleField( "double", 23d, Store.NO );
    //numField.setBoost( 3f );
    //numField.setOmitNorms( true );
    //numField.setOmitTermFreqAndPositions( true );
    doc.add( numField );
    numField = new IntField( "int", 23, Store.NO );
    doc.add( numField );
    numField = new FloatField( "float", 2.3f, Store.NO );
    doc.add( numField );
    numField = new LongField( "long", 23l, Store.NO );
    doc.add( numField );

    Map<String, String> analyzers = new HashMap<String, String>();
    analyzers.put( "godo", "ngram" );
    works.add( new AddLuceneWork( 123, "123", RemoteEntity.class, doc, analyzers ) );

    doc = new Document();
    Field field = new Field(
        "StringF",
        "String field",
        Field.Store.YES,
        Field.Index.ANALYZED,
        Field.TermVector.WITH_OFFSETS
    );
//    field.setOmitNorms( true );
//    field.setOmitTermFreqAndPositions( true );
    field.setBoost( 3f );
    doc.add( field );

    field = new Field(
        "StringF2",
        "String field 2",
        Field.Store.YES,
        Field.Index.ANALYZED,
        Field.TermVector.WITH_OFFSETS
    );
    doc.add( field );

    byte[] array = new byte[4];
    array[0] = 2;
    array[1] = 5;
    array[2] = 5;
    array[3] = 8;
    field = new Field( "binary", array, 0, array.length );
    doc.add( field );

    SerializableStringReader reader = new SerializableStringReader();
    field = new Field( "ReaderField", reader, Field.TermVector.WITH_OFFSETS );
    doc.add( field );

    List<List<AttributeImpl>> tokens = AvroTestHelpers.buildTokenSteamWithAttributes();

    CopyTokenStream tokenStream = new CopyTokenStream( tokens );
    field = new Field( "tokenstream", tokenStream, Field.TermVector.WITH_POSITIONS_OFFSETS );
//    field.setOmitNorms( true );
//    field.setOmitTermFreqAndPositions( true );
    field.setBoost( 3f );
    doc.add( field );

    works.add( new UpdateLuceneWork( 1234, "1234", RemoteEntity.class, doc ) );
    works.add( new AddLuceneWork( 125, "125", RemoteEntity.class, new Document() ) );
    return works;
  }

}
TOP

Related Classes of org.hibernate.search.test.serialization.SerializationTest

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.