Test de integración con Solr y el soporte de EmbeddedSolrServer.

0
6442

Test de integración con Solr y el soporte de EmbeddedSolrServer.

0. Índice de contenidos.


1. Introducción

Cerrando el ciclo de tutoriales sobre Solr que hemos publicado últimamente en adictos, en este vamos a analizar cómo realizar pruebas de integración de la configuración de Solr con el soporte de EmbeddedSolrServer, un servidor embebido de Solr, y jUnit. EmbeddedSolrServer proporciona la misma interfaz de servicios que Solr pero sin necesidad de una conexión HTTP.

Tomando como referencia la configuración del tutorial sobre «Arrancar Solr desde un proyecto Maven con el soporte de Jetty» vamos a exponer qué dependencias a librerías necesitamos en el entorno de test y cómo escribiremos esos tests de integración.

El objetivo de los tests de integración contra Solr es comprobar que la definición del esquema y la configuración de filtros de recuperación e indexación se comportan como esperamos realizando consultas con el soporte de solrj.


2. Entorno.

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 15′ (2.4 GHz Intel Core i7, 8GB DDR3 SDRAM).
  • Sistema Operativo: Mac OS X Lion 10.7.4
  • Solr 3.5


3. Configuración.

Siguiendo con el soporte de Maven, esta sería la configuración de dependencias de nuestro pom.xml:

	<dependency>
	    <groupId>org.apache.solr</groupId>
	    <artifactId>solr-test-framework</artifactId>
	    <version>3.5.0</version>
	    <scope>test</scope>
	</dependency>
	<dependency>
	    <groupId>javax.servlet</groupId>
	    <artifactId>servlet-api</artifactId>
	    <version>2.5</version>
	    <scope>test</scope>
	</dependency>
	<dependency>
	    <groupId>org.slf4j</groupId>
	    <artifactId>slf4j-simple</artifactId>
	    <version>1.6.1</version>
	    <scope>test</scope>
	</dependency>

Como vemos, todas con scope de test.


4. El código de nuestros tests.

Nuestros tests de integración no tendrían más que extender de la clase abstracta AbstractSolrTestCase y sobrecargar los métodos en los que se etablece la ubicación de los ficheros de configuración.

package com.autentia.tutoriales;

import java.io.IOException;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.util.AbstractSolrTestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class SolrSearchIntegrationTest extends AbstractSolrTestCase {

	   private SolrServer server;

	    @Override
	    public String getSchemaFile() {
	        return "schema.xml";
	    }

	    @Override
	    public String getSolrConfigFile() {
	        return "solrconfig.xml";
	    }
	    
	    @Override
	    public String getSolrHome() {
	        return "";
	    }
	    
	    @Before
	    @Override
	    public void setUp() throws Exception {
	        super.setUp();
	        server = new EmbeddedSolrServer(h.getCoreContainer(), h.getCore().getName());
	    }

	    @After
	    public void destroy() {
	    	h.getCoreContainer().shutdown();
	    }
	    
	    @Test
	    public void testThatDocumentExists() throws SolrServerException, IOException {
	        final SolrInputDocument document = new SolrInputDocument();
	        document.addField("id", "1");
	        document.addField("title", "Las reglas no escritas para triunfar en la empresa");
	        document.addField("type", "0");

	        server.add(document);
	        server.commit();

	        final SolrParams params = new SolrQuery("reglas");
	        final QueryResponse response = server.query(params);
	        assertEquals(1L, response.getResults().getNumFound());
	        assertEquals(1L, response.getResults().get(0).get("id"));
	    }
	    
}

Con lo anterior, los ficheros de configuración de solr deberían ubicarse en el directorio src/main/resources/

En el código del test podemos ver que disponemos de:

  • un método anotado con @Before que levanta el servidor embebido antes de cada test,
  • un método anotado con @After que lo para después de cada test, y
  • dentro del método de test propiamente dicho, el código que estimemos necesario para probar que podemos insertar nuevos documentos y recuperarlos.


4.1. Parametrización en Eclipse.

En este punto, el test debería pasar correctamente (con nuestro schema.xml) en el entorno de maven. Si bien, en el entorno de Elcipse se debería producir el siguiente error:

Para solventarlo deberíamos habilitar las asserciones en el entorno de ejecución de jUnit, para ello, en preferencias > java > jUnit debemos marcar la casilla «Add -ea to VM arguments», como sigue:

Para que aplique la nueva configuración debemos comprobar que en las propiedades de la ejecución del test > arguments > VM arguments se ha añadido la siguiente propiedad:


5. Referencias.

  • http://wiki.apache.org/solr/Solrj#EmbeddedSolrServer
  • http://blog.synyx.de/2011/01/integration-tests-for-your-solr-config/


6. Conclusiones.

Simple a la par que eficaz, ya podemos tener los mismos test de integración que podemos tener contra base de datos 😉

Con este tutorial damos por cubierta toda la gestión de configuración y configurabilidad arquitectónica de Solr en nuestros entornos de desarrollo.

Un saludo.

Jose

jmsanchez@autentia.com

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad