/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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.apache.solr.client.solrj.response; import junit.framework.Assert; import org.apache.lucene.util.LuceneTestCase; import org.apache.solr.client.solrj.impl.XMLResponseParser; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.util.DateUtil; import org.apache.solr.common.util.NamedList; import org.apache.solr.core.SolrResourceLoader; import org.junit.Test; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.util.List; /** * A few tests for parsing Solr response in QueryResponse * * @since solr 1.3 */ public class QueryResponseTest extends LuceneTestCase { @Test public void testDateFacets() throws Exception { XMLResponseParser parser = new XMLResponseParser(); InputStream is = new SolrResourceLoader(null, null).openResource("solrj/sampleDateFacetResponse.xml"); assertNotNull(is); Reader in = new InputStreamReader(is, "UTF-8"); NamedList<Object> response = parser.processResponse(in); in.close(); QueryResponse qr = new QueryResponse(response, null); Assert.assertNotNull(qr); Assert.assertNotNull(qr.getFacetDates()); for (FacetField f : qr.getFacetDates()) { Assert.assertNotNull(f); // TODO - test values? // System.out.println(f.toString()); // System.out.println("GAP: " + f.getGap()); // System.out.println("END: " + f.getEnd()); } } @Test public void testRangeFacets() throws Exception { XMLResponseParser parser = new XMLResponseParser(); InputStream is = new SolrResourceLoader(null, null).openResource("solrj/sampleDateFacetResponse.xml"); assertNotNull(is); Reader in = new InputStreamReader(is, "UTF-8"); NamedList<Object> response = parser.processResponse(in); in.close(); QueryResponse qr = new QueryResponse(response, null); Assert.assertNotNull(qr); int counter = 0; RangeFacet.Numeric price = null; RangeFacet.Date manufacturedateDt = null; for (RangeFacet r : qr.getFacetRanges()){ assertNotNull(r); if ("price".equals(r.getName())) { price = (RangeFacet.Numeric) r; } else if ("manufacturedate_dt".equals(r.getName())) { manufacturedateDt = (RangeFacet.Date) r; } counter++; } assertEquals(2, counter); assertNotNull(price); assertNotNull(manufacturedateDt); assertEquals(0.0F, price.getStart()); assertEquals(5.0F, price.getEnd()); assertEquals(1.0F, price.getGap()); assertEquals("0.0", price.getCounts().get(0).getValue()); assertEquals(3, price.getCounts().get(0).getCount()); assertEquals("1.0", price.getCounts().get(1).getValue()); assertEquals(0, price.getCounts().get(1).getCount()); assertEquals("2.0", price.getCounts().get(2).getValue()); assertEquals(0, price.getCounts().get(2).getCount()); assertEquals("3.0", price.getCounts().get(3).getValue()); assertEquals(0, price.getCounts().get(3).getCount()); assertEquals("4.0", price.getCounts().get(4).getValue()); assertEquals(0, price.getCounts().get(4).getCount()); assertEquals(DateUtil.parseDate("2005-02-13T15:26:37Z"), manufacturedateDt.getStart()); assertEquals(DateUtil.parseDate("2008-02-13T15:26:37Z"), manufacturedateDt.getEnd()); assertEquals("+1YEAR", manufacturedateDt.getGap()); assertEquals("2005-02-13T15:26:37Z", manufacturedateDt.getCounts().get(0).getValue()); assertEquals(4, manufacturedateDt.getCounts().get(0).getCount()); assertEquals("2006-02-13T15:26:37Z", manufacturedateDt.getCounts().get(1).getValue()); assertEquals(7, manufacturedateDt.getCounts().get(1).getCount()); assertEquals("2007-02-13T15:26:37Z", manufacturedateDt.getCounts().get(2).getValue()); assertEquals(0, manufacturedateDt.getCounts().get(2).getCount()); assertEquals(90, manufacturedateDt.getBefore()); assertEquals(1, manufacturedateDt.getAfter()); assertEquals(11, manufacturedateDt.getBetween()); } @Test public void testGroupResponse() throws Exception { XMLResponseParser parser = new XMLResponseParser(); InputStream is = new SolrResourceLoader(null, null).openResource("solrj/sampleGroupResponse.xml"); assertNotNull(is); Reader in = new InputStreamReader(is, "UTF-8"); NamedList<Object> response = parser.processResponse(in); in.close(); QueryResponse qr = new QueryResponse(response, null); assertNotNull(qr); GroupResponse groupResponse = qr.getGroupResponse(); assertNotNull(groupResponse); List<GroupCommand> commands = groupResponse.getValues(); assertNotNull(commands); assertEquals(3, commands.size()); GroupCommand fieldCommand = commands.get(0); assertEquals("acco_id", fieldCommand.getName()); assertEquals(30000000, fieldCommand.getMatches()); assertEquals(5687, fieldCommand.getNGroups().intValue()); List<Group> fieldCommandGroups = fieldCommand.getValues(); assertEquals(10, fieldCommandGroups.size()); assertEquals("116_ar", fieldCommandGroups.get(0).getGroupValue()); assertEquals(2, fieldCommandGroups.get(0).getResult().size()); assertEquals(2236, fieldCommandGroups.get(0).getResult().getNumFound()); assertEquals("116_hi", fieldCommandGroups.get(1).getGroupValue()); assertEquals(2, fieldCommandGroups.get(1).getResult().size()); assertEquals(2234, fieldCommandGroups.get(1).getResult().getNumFound()); assertEquals("953_ar", fieldCommandGroups.get(2).getGroupValue()); assertEquals(2, fieldCommandGroups.get(2).getResult().size()); assertEquals(1020, fieldCommandGroups.get(2).getResult().getNumFound()); assertEquals("953_hi", fieldCommandGroups.get(3).getGroupValue()); assertEquals(2, fieldCommandGroups.get(3).getResult().size()); assertEquals(1030, fieldCommandGroups.get(3).getResult().getNumFound()); assertEquals("954_ar", fieldCommandGroups.get(4).getGroupValue()); assertEquals(2, fieldCommandGroups.get(4).getResult().size()); assertEquals(2236, fieldCommandGroups.get(4).getResult().getNumFound()); assertEquals("954_hi", fieldCommandGroups.get(5).getGroupValue()); assertEquals(2, fieldCommandGroups.get(5).getResult().size()); assertEquals(2234, fieldCommandGroups.get(5).getResult().getNumFound()); assertEquals("546_ar", fieldCommandGroups.get(6).getGroupValue()); assertEquals(2, fieldCommandGroups.get(6).getResult().size()); assertEquals(4984, fieldCommandGroups.get(6).getResult().getNumFound()); assertEquals("546_hi", fieldCommandGroups.get(7).getGroupValue()); assertEquals(2, fieldCommandGroups.get(7).getResult().size()); assertEquals(4984, fieldCommandGroups.get(7).getResult().getNumFound()); assertEquals("708_ar", fieldCommandGroups.get(8).getGroupValue()); assertEquals(2, fieldCommandGroups.get(8).getResult().size()); assertEquals(4627, fieldCommandGroups.get(8).getResult().getNumFound()); assertEquals("708_hi", fieldCommandGroups.get(9).getGroupValue()); assertEquals(2, fieldCommandGroups.get(9).getResult().size()); assertEquals(4627, fieldCommandGroups.get(9).getResult().getNumFound()); GroupCommand funcCommand = commands.get(1); assertEquals("sum(price, price)", funcCommand.getName()); assertEquals(30000000, funcCommand.getMatches()); assertNull(funcCommand.getNGroups()); List<Group> funcCommandGroups = funcCommand.getValues(); assertEquals(10, funcCommandGroups.size()); assertEquals("95000.0", funcCommandGroups.get(0).getGroupValue()); assertEquals(2, funcCommandGroups.get(0).getResult().size()); assertEquals(43666, funcCommandGroups.get(0).getResult().getNumFound()); assertEquals("91400.0", funcCommandGroups.get(1).getGroupValue()); assertEquals(2, funcCommandGroups.get(1).getResult().size()); assertEquals(27120, funcCommandGroups.get(1).getResult().getNumFound()); assertEquals("104800.0", funcCommandGroups.get(2).getGroupValue()); assertEquals(2, funcCommandGroups.get(2).getResult().size()); assertEquals(34579, funcCommandGroups.get(2).getResult().getNumFound()); assertEquals("99400.0", funcCommandGroups.get(3).getGroupValue()); assertEquals(2, funcCommandGroups.get(3).getResult().size()); assertEquals(40519, funcCommandGroups.get(3).getResult().getNumFound()); assertEquals("109600.0", funcCommandGroups.get(4).getGroupValue()); assertEquals(2, funcCommandGroups.get(4).getResult().size()); assertEquals(36203, funcCommandGroups.get(4).getResult().getNumFound()); assertEquals("102400.0", funcCommandGroups.get(5).getGroupValue()); assertEquals(2, funcCommandGroups.get(5).getResult().size()); assertEquals(37852, funcCommandGroups.get(5).getResult().getNumFound()); assertEquals("116800.0", funcCommandGroups.get(6).getGroupValue()); assertEquals(2, funcCommandGroups.get(6).getResult().size()); assertEquals(40393, funcCommandGroups.get(6).getResult().getNumFound()); assertEquals("107800.0", funcCommandGroups.get(7).getGroupValue()); assertEquals(2, funcCommandGroups.get(7).getResult().size()); assertEquals(41639, funcCommandGroups.get(7).getResult().getNumFound()); assertEquals("136200.0", funcCommandGroups.get(8).getGroupValue()); assertEquals(2, funcCommandGroups.get(8).getResult().size()); assertEquals(25929, funcCommandGroups.get(8).getResult().getNumFound()); assertEquals("131400.0", funcCommandGroups.get(9).getGroupValue()); assertEquals(2, funcCommandGroups.get(9).getResult().size()); assertEquals(29179, funcCommandGroups.get(9).getResult().getNumFound()); GroupCommand queryCommand = commands.get(2); assertEquals("country:fr", queryCommand.getName()); assertNull(queryCommand.getNGroups()); assertEquals(30000000, queryCommand.getMatches()); List<Group> queryCommandGroups = queryCommand.getValues(); assertEquals(1, queryCommandGroups.size()); assertEquals("country:fr", queryCommandGroups.get(0).getGroupValue()); assertEquals(2, queryCommandGroups.get(0).getResult().size()); assertEquals(57074, queryCommandGroups.get(0).getResult().getNumFound()); } @Test public void testSimpleGroupResponse() throws Exception { XMLResponseParser parser = new XMLResponseParser(); InputStream is = new SolrResourceLoader(null, null).openResource("solrj/sampleSimpleGroupResponse.xml"); assertNotNull(is); Reader in = new InputStreamReader(is, "UTF-8"); NamedList<Object> response = parser.processResponse(in); in.close(); QueryResponse qr = new QueryResponse(response, null); assertNotNull(qr); GroupResponse groupResponse = qr.getGroupResponse(); assertNotNull(groupResponse); List<GroupCommand> commands = groupResponse.getValues(); assertNotNull(commands); assertEquals(1, commands.size()); GroupCommand fieldCommand = commands.get(0); assertEquals("acco_id", fieldCommand.getName()); assertEquals(30000000, fieldCommand.getMatches()); assertEquals(5687, fieldCommand.getNGroups().intValue()); List<Group> fieldCommandGroups = fieldCommand.getValues(); assertEquals(1, fieldCommandGroups.size()); assertEquals("acco_id", fieldCommandGroups.get(0).getGroupValue()); SolrDocumentList documents = fieldCommandGroups.get(0).getResult(); assertNotNull(documents); assertEquals(10, documents.size()); assertEquals("116_AR", documents.get(0).getFieldValue("acco_id")); assertEquals("116_HI", documents.get(1).getFieldValue("acco_id")); assertEquals("953_AR", documents.get(2).getFieldValue("acco_id")); assertEquals("953_HI", documents.get(3).getFieldValue("acco_id")); assertEquals("954_AR", documents.get(4).getFieldValue("acco_id")); assertEquals("954_HI", documents.get(5).getFieldValue("acco_id")); assertEquals("546_AR", documents.get(6).getFieldValue("acco_id")); assertEquals("546_HI", documents.get(7).getFieldValue("acco_id")); assertEquals("708_AR", documents.get(8).getFieldValue("acco_id")); assertEquals("708_HI", documents.get(9).getFieldValue("acco_id")); } }