Java tutorial
/* * $HeadURL$ * $Id$ * Copyright (c) 2006-2012 by Public Library of Science http://plos.org http://ambraproject.org * 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.0Unless 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.ambraproject.service.search; 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.response.QueryResponse; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.params.SolrParams; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import org.ambraproject.testutils.EmbeddedSolrServerFactory; import java.util.HashMap; import java.util.Map; import static org.testng.Assert.*; /** * Basic test for {@link EmbeddedSolrServerFactory} . The working directory for this test needs to be set to the ambra * webapp home, so that the solr server factory can find the config files * * @author Alex Kudlick Date: 5/13/11 * <p/> * org.ambraproject.ambra */ public class EmbeddedSolrServerFactoryTest { private EmbeddedSolrServerFactory solrServerFactory; @Test(priority = -1) public void testConstructor() throws Exception { solrServerFactory = new EmbeddedSolrServerFactory(); } @Test public void testGetServer() throws SolrServerException { SolrServer server = solrServerFactory.getServer(); assertNotNull(server, "created null server"); } @Test(dependsOnMethods = { "testGetServer" }) public void testBadQuery() throws SolrServerException { SolrServer server = solrServerFactory.getServer(); SolrParams params = new SolrQuery("text that is not found"); QueryResponse response = server.query(params); assertEquals(0L, response.getResults().getNumFound()); } @DataProvider(name = "documentMap") public Object[][] getDocument() throws Exception { Map<String, String[]> document = new HashMap<String, String[]>(); document.put("id", new String[] { "test" }); document.put("title", new String[] { "test_title" }); document.put("alternate_title", new String[] { "alt_title_1", "alt_title_2" }); return new Object[][] { { document } }; } @Test(dataProvider = "documentMap", dependsOnMethods = { "testGetServer" }) public void testAddDocument(Map<String, String[]> document) throws Exception { solrServerFactory.addDocument(document); } @Test(dependsOnMethods = "testAddDocument") public void testBasicQuery() throws SolrServerException { SolrServer server = solrServerFactory.getServer(); SolrParams params = new SolrQuery("*:*"); SolrDocumentList results = server.query(params).getResults(); assertTrue(results.getNumFound() > 0, "didn't return any results"); } @Test(dependsOnMethods = "testBasicQuery", dataProvider = "documentMap") public void testIdQuery(Map<String, String[]> document) throws SolrServerException { String id = document.get("id")[0]; SolrServer server = solrServerFactory.getServer(); SolrParams params = new SolrQuery("id:" + id); SolrDocumentList results = server.query(params).getResults(); assertEquals(results.getNumFound(), 1, "didn't find article by id"); } @Test(dependsOnMethods = "testAddDocument", dataProvider = "documentMap") public void testMultiValuedField(Map<String, String[]> document) throws Exception { String value1 = document.get("alternate_title")[0]; String value2 = document.get("alternate_title")[1]; Long numFound = solrServerFactory.getServer().query(new SolrQuery("alternate_title:" + value1)).getResults() .getNumFound(); assertTrue(numFound > 0l, "query didn't work on multivalued field"); numFound = solrServerFactory.getServer().query(new SolrQuery("alternate_title:" + value2)).getResults() .getNumFound(); assertTrue(numFound > 0l, "query didn't work on multivalued field"); } @AfterClass public void tearDown() throws Exception { solrServerFactory.tearDown(); } }