SOLR-5488: Added DOM parsing to the test cases rather than string manipulation

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1545080 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Erick Erickson 2013-11-24 21:33:45 +00:00
parent aca845c6a0
commit 0e19da794b
3 changed files with 186 additions and 143 deletions

View File

@ -17,12 +17,15 @@
package org.apache.solr.analytics; package org.apache.solr.analytics;
import java.io.ByteArrayInputStream;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Locale;
import java.util.Scanner; import java.util.Scanner;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
@ -35,32 +38,75 @@ import org.apache.solr.request.SolrQueryRequest;
import com.google.common.collect.ObjectArrays; import com.google.common.collect.ObjectArrays;
import org.apache.solr.util.ExternalPaths; import org.apache.solr.util.ExternalPaths;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@SuppressCodecs({"Lucene3x","Lucene40","Lucene41","Lucene42","Appending","Asserting"}) @SuppressCodecs({"Lucene3x","Lucene40","Lucene41","Lucene42","Appending","Asserting"})
public class AbstractAnalyticsStatsTest extends SolrTestCaseJ4 { public class AbstractAnalyticsStatsTest extends SolrTestCaseJ4 {
protected static final String[] BASEPARMS = new String[]{ "q", "*:*", "indent", "true", "olap", "true", "rows", "0" }; protected static final String[] BASEPARMS = new String[]{ "q", "*:*", "indent", "true", "olap", "true", "rows", "0" };
protected static final HashMap<String,Object> defaults = new HashMap<String,Object>(); protected static final HashMap<String,Object> defaults = new HashMap<String,Object>();
public Object getStatResult(String response, String request, String type, String name) { public static enum VAL_TYPE {
String cat = "\n <lst name=\""+request+"\">"; INTEGER("int"),
String begin = "<"+type+" name=\""+name+"\">"; LONG("long"),
String end = "</"+type+">"; FLOAT("float"),
int beginInt = response.indexOf(begin, response.indexOf(cat))+begin.length(); DOUBLE("double"),
int endInt = response.indexOf(end, beginInt); STRING("str"),
String resultStr = response.substring(beginInt, endInt); DATE("date");
if (type.equals("double")) {
return Double.parseDouble(resultStr); private VAL_TYPE (final String text) {
} else if (type.equals("int")) { this.text = text;
return Integer.parseInt(resultStr); }
} else if (type.equals("long")) {
return Long.parseLong(resultStr); private final String text;
} else if (type.equals("float")) {
return Float.parseFloat(resultStr); @Override
} else { public String toString() {
return resultStr; return text;
} }
} }
static private Document doc;
static private XPathFactory xPathFact = XPathFactory.newInstance();
public static void setResponse(String response) throws ParserConfigurationException, IOException, SAXException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true); // never forget this!
DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.parse(new InputSource(new ByteArrayInputStream(response.getBytes())));
xPathFact = XPathFactory.newInstance();
}
public Object getStatResult(String section, String name, VAL_TYPE type) throws XPathExpressionException {
// Construct the XPath expression. The form better not change or all these will fail.
StringBuilder sb = new StringBuilder("/response/lst[@name='stats']/lst[@name='").append(section).append("']");
// This is a little fragile in that it demands the elements have the same name as type, i.e. when looking for a
// VAL_TYPE.DOUBLE, the element in question is <double name="blah">47.0</double>.
sb.append("/").append(type.toString()).append("[@name='").append(name).append("']");
String val = xPathFact.newXPath().compile(sb.toString()).evaluate(doc, XPathConstants.STRING).toString();
switch (type) {
case INTEGER: return Integer.parseInt(val);
case DOUBLE: return Double.parseDouble(val);
case FLOAT: return Float.parseFloat(val);
case LONG: return Long.parseLong(val);
case STRING: return val;
case DATE: return val;
}
fail("Unknown type used in getStatResult");
return null; // Really can't get here, but the compiler thinks we can!
}
public <T extends Number & Comparable<T>> Double calculateNumberStat(ArrayList<T> list, String stat) { public <T extends Number & Comparable<T>> Double calculateNumberStat(ArrayList<T> list, String stat) {
Double result; Double result;
if (stat.equals("median")) { if (stat.equals("median")) {

View File

@ -58,12 +58,10 @@ public class NoFacetTest extends AbstractAnalyticsStatsTest {
static ArrayList<String> dateTestStart; static ArrayList<String> dateTestStart;
static long dateMissing = 0; static long dateMissing = 0;
//STRING //STR
static ArrayList<String> stringTestStart; static ArrayList<String> stringTestStart;
static long stringMissing = 0; static long stringMissing = 0;
static String response;
@BeforeClass @BeforeClass
public static void beforeClass() throws Exception { public static void beforeClass() throws Exception {
initCore("solrconfig-basic.xml","schema-analytics.xml"); initCore("solrconfig-basic.xml","schema-analytics.xml");
@ -138,51 +136,51 @@ public class NoFacetTest extends AbstractAnalyticsStatsTest {
assertU(commit()); assertU(commit());
//Sort ascending tests //Sort ascending tests
response = h.query(request(fileToStringArr(fileName))); setResponse(h.query(request(fileToStringArr(fileName))));
} }
@Test @Test
public void sumTest() throws Exception { public void sumTest() throws Exception {
//Int //Int
Double intResult = (Double)getStatResult(response, "sr", "double", "int_id"); Double intResult = (Double)getStatResult("sr", "int_id", VAL_TYPE.DOUBLE);
Double intTest = (Double)calculateNumberStat(intTestStart, "sum"); Double intTest = (Double)calculateNumberStat(intTestStart, "sum");
assertEquals(intResult,intTest); assertEquals(intResult,intTest);
//Long //Long
Double longResult = (Double)getStatResult(response, "sr", "double", "long_ld"); Double longResult = (Double)getStatResult("sr", "long_ld", VAL_TYPE.DOUBLE);
Double longTest = (Double)calculateNumberStat(longTestStart, "sum"); Double longTest = (Double)calculateNumberStat(longTestStart, "sum");
assertEquals(longResult,longTest); assertEquals(longResult,longTest);
//Float //Float
Double floatResult = (Double)getStatResult(response, "sr", "double", "float_fd"); Double floatResult = (Double)getStatResult("sr", "float_fd", VAL_TYPE.DOUBLE);
Double floatTest = (Double)calculateNumberStat(floatTestStart, "sum"); Double floatTest = (Double)calculateNumberStat(floatTestStart, "sum");
assertEquals(floatResult,floatTest); assertEquals(floatResult,floatTest);
//Double //Double
Double doubleResult = (Double)getStatResult(response, "sr", "double", "double_dd"); Double doubleResult = (Double)getStatResult("sr", "double_dd", VAL_TYPE.DOUBLE);
Double doubleTest = (Double)calculateNumberStat(doubleTestStart, "sum"); Double doubleTest = (Double) calculateNumberStat(doubleTestStart, "sum");
assertEquals(doubleResult,doubleTest); assertEquals(doubleResult,doubleTest);
} }
@Test @Test
public void sumOfSquaresTest() throws Exception { public void sumOfSquaresTest() throws Exception {
//Int //Int
Double intResult = (Double)getStatResult(response, "sosr", "double", "int_id"); Double intResult = (Double)getStatResult("sosr", "int_id", VAL_TYPE.DOUBLE);
Double intTest = (Double)calculateNumberStat(intTestStart, "sumOfSquares"); Double intTest = (Double)calculateNumberStat(intTestStart, "sumOfSquares");
assertEquals(intResult,intTest); assertEquals(intResult,intTest);
//Long //Long
Double longResult = (Double)getStatResult(response, "sosr", "double", "long_ld"); Double longResult = (Double)getStatResult("sosr", "long_ld", VAL_TYPE.DOUBLE);
Double longTest = (Double)calculateNumberStat(longTestStart, "sumOfSquares"); Double longTest = (Double)calculateNumberStat(longTestStart, "sumOfSquares");
assertEquals(longResult,longTest); assertEquals(longResult,longTest);
//Float //Float
Double floatResult = (Double)getStatResult(response, "sosr", "double", "float_fd"); Double floatResult = (Double)getStatResult("sosr", "float_fd", VAL_TYPE.DOUBLE);
Double floatTest = (Double)calculateNumberStat(floatTestStart, "sumOfSquares"); Double floatTest = (Double)calculateNumberStat(floatTestStart, "sumOfSquares");
assertEquals(floatResult,floatTest); assertEquals(floatResult,floatTest);
//Double //Double
Double doubleResult = (Double)getStatResult(response, "sosr", "double", "double_dd"); Double doubleResult = (Double)getStatResult("sosr", "double_dd", VAL_TYPE.DOUBLE);
Double doubleTest = (Double)calculateNumberStat(doubleTestStart, "sumOfSquares"); Double doubleTest = (Double)calculateNumberStat(doubleTestStart, "sumOfSquares");
assertEquals(doubleResult,doubleTest); assertEquals(doubleResult,doubleTest);
} }
@ -190,22 +188,22 @@ public class NoFacetTest extends AbstractAnalyticsStatsTest {
@Test @Test
public void meanTest() throws Exception { public void meanTest() throws Exception {
//Int //Int
Double intResult = (Double)getStatResult(response, "mr", "double", "int_id"); Double intResult = (Double)getStatResult("mr", "int_id", VAL_TYPE.DOUBLE);
Double intTest = (Double)calculateNumberStat(intTestStart, "mean"); Double intTest = (Double)calculateNumberStat(intTestStart, "mean");
assertEquals(intResult,intTest); assertEquals(intResult,intTest);
//Long //Long
Double longResult = (Double)getStatResult(response, "mr", "double", "long_ld"); Double longResult = (Double)getStatResult("mr", "long_ld", VAL_TYPE.DOUBLE);
Double longTest = (Double)calculateNumberStat(longTestStart, "mean"); Double longTest = (Double)calculateNumberStat(longTestStart, "mean");
assertEquals(longResult,longTest); assertEquals(longResult,longTest);
//Float //Float
Double floatResult = (Double)getStatResult(response, "mr", "double", "float_fd"); Double floatResult = (Double)getStatResult("mr", "float_fd", VAL_TYPE.DOUBLE);
Double floatTest = (Double)calculateNumberStat(floatTestStart, "mean"); Double floatTest = (Double)calculateNumberStat(floatTestStart, "mean");
assertEquals(floatResult,floatTest); assertEquals(floatResult,floatTest);
//Double //Double
Double doubleResult = (Double)getStatResult(response, "mr", "double", "double_dd"); Double doubleResult = (Double)getStatResult("mr", "double_dd", VAL_TYPE.DOUBLE);
Double doubleTest = (Double)calculateNumberStat(doubleTestStart, "mean"); Double doubleTest = (Double)calculateNumberStat(doubleTestStart, "mean");
assertEquals(doubleResult,doubleTest); assertEquals(doubleResult,doubleTest);
} }
@ -213,17 +211,17 @@ public class NoFacetTest extends AbstractAnalyticsStatsTest {
@Test @Ignore("SOLR-5488") @Test @Ignore("SOLR-5488")
public void stddevTest() throws Exception { public void stddevTest() throws Exception {
//Int //Int
Double intResult = (Double)getStatResult(response, "str", "double", "int_id"); Double intResult = (Double)getStatResult("str", "int_id", VAL_TYPE.DOUBLE);
Double intTest = (Double)calculateNumberStat(intTestStart, "stddev"); Double intTest = (Double)calculateNumberStat(intTestStart, "stddev");
assertTrue(Math.abs(intResult-intTest)<.00000000001); assertTrue(Math.abs(intResult-intTest)<.00000000001);
//Long //Long
Double longResult = (Double)getStatResult(response, "str", "double", "long_ld"); Double longResult = (Double)getStatResult("str", "long_ld", VAL_TYPE.DOUBLE);
Double longTest = (Double)calculateNumberStat(longTestStart, "stddev"); Double longTest = (Double)calculateNumberStat(longTestStart, "stddev");
assertTrue(Math.abs(longResult-longTest)<.00000000001); assertTrue(Math.abs(longResult-longTest)<.00000000001);
//Float //Float
Double floatResult = (Double)getStatResult(response, "str", "double", "float_fd"); Double floatResult = (Double)getStatResult("str", "float_fd", VAL_TYPE.DOUBLE);
Double floatTest = (Double)calculateNumberStat(floatTestStart, "stddev"); Double floatTest = (Double)calculateNumberStat(floatTestStart, "stddev");
assertTrue("Oops: (double raws) " + Double.doubleToRawLongBits(floatResult) + " - " assertTrue("Oops: (double raws) " + Double.doubleToRawLongBits(floatResult) + " - "
+ Double.doubleToRawLongBits(floatTest) + " < " + Double.doubleToRawLongBits(.00000000001) + + Double.doubleToRawLongBits(floatTest) + " < " + Double.doubleToRawLongBits(.00000000001) +
@ -234,7 +232,7 @@ public class NoFacetTest extends AbstractAnalyticsStatsTest {
//Double //Double
Double doubleResult = (Double)getStatResult(response, "str", "double", "double_dd"); Double doubleResult = (Double)getStatResult("str", "double_dd", VAL_TYPE.DOUBLE);
Double doubleTest = (Double)calculateNumberStat(doubleTestStart, "stddev"); Double doubleTest = (Double)calculateNumberStat(doubleTestStart, "stddev");
assertTrue(Math.abs(doubleResult-doubleTest)<.00000000001); assertTrue(Math.abs(doubleResult-doubleTest)<.00000000001);
} }
@ -242,22 +240,22 @@ public class NoFacetTest extends AbstractAnalyticsStatsTest {
@Test @Test
public void medianTest() throws Exception { public void medianTest() throws Exception {
//Int //Int
Double intResult = (Double)getStatResult(response, "medr", "double", "int_id"); Double intResult = (Double)getStatResult("medr", "int_id", VAL_TYPE.DOUBLE);
Double intTest = (Double)calculateNumberStat(intTestStart, "median"); Double intTest = (Double)calculateNumberStat(intTestStart, "median");
assertEquals(intResult,intTest); assertEquals(intResult,intTest);
//Long //Long
Double longResult = (Double)getStatResult(response, "medr", "double", "long_ld"); Double longResult = (Double)getStatResult("medr", "long_ld", VAL_TYPE.DOUBLE);
Double longTest = (Double)calculateNumberStat(longTestStart, "median"); Double longTest = (Double)calculateNumberStat(longTestStart, "median");
assertEquals(longResult,longTest); assertEquals(longResult,longTest);
//Float //Float
Double floatResult = (Double)getStatResult(response, "medr", "double", "float_fd"); Double floatResult = (Double)getStatResult("medr", "float_fd", VAL_TYPE.DOUBLE);
Double floatTest = (Double)calculateNumberStat(floatTestStart, "median"); Double floatTest = (Double)calculateNumberStat(floatTestStart, "median");
assertEquals(floatResult,floatTest); assertEquals(floatResult,floatTest);
//Double //Double
Double doubleResult = (Double)getStatResult(response, "medr", "double", "double_dd"); Double doubleResult = (Double)getStatResult("medr", "double_dd", VAL_TYPE.DOUBLE);
Double doubleTest = (Double)calculateNumberStat(doubleTestStart, "median"); Double doubleTest = (Double)calculateNumberStat(doubleTestStart, "median");
assertEquals(doubleResult,doubleTest); assertEquals(doubleResult,doubleTest);
} }
@ -265,32 +263,32 @@ public class NoFacetTest extends AbstractAnalyticsStatsTest {
@Test @Test
public void perc20Test() throws Exception { public void perc20Test() throws Exception {
//Int 20 //Int 20
Integer intResult = (Integer)getStatResult(response, "p2r", "int", "int_id"); Integer intResult = (Integer)getStatResult("p2r", "int_id", VAL_TYPE.INTEGER);
Integer intTest = (Integer)calculateStat(intTestStart, "perc_20"); Integer intTest = (Integer)calculateStat(intTestStart, "perc_20");
assertEquals(intResult,intTest); assertEquals(intResult,intTest);
//Long 20 //Long 20
Long longResult = (Long)getStatResult(response, "p2r", "long", "long_ld"); Long longResult = (Long)getStatResult("p2r", "long_ld", VAL_TYPE.LONG);
Long longTest = (Long)calculateStat(longTestStart, "perc_20"); Long longTest = (Long)calculateStat(longTestStart, "perc_20");
assertEquals(longResult,longTest); assertEquals(longResult,longTest);
//Float 20 //Float 20
Float floatResult = (Float)getStatResult(response, "p2r", "float", "float_fd"); Float floatResult = (Float)getStatResult("p2r", "float_fd", VAL_TYPE.FLOAT);
Float floatTest = (Float)calculateStat(floatTestStart, "perc_20"); Float floatTest = (Float)calculateStat(floatTestStart, "perc_20");
assertEquals(floatResult,floatTest); assertEquals(floatResult,floatTest);
//Double 20 //Double 20
Double doubleResult = (Double)getStatResult(response, "p2r", "double", "double_dd"); Double doubleResult = (Double)getStatResult("p2r", "double_dd", VAL_TYPE.DOUBLE);
Double doubleTest = (Double)calculateStat(doubleTestStart, "perc_20"); Double doubleTest = (Double)calculateStat(doubleTestStart, "perc_20");
assertEquals(doubleResult,doubleTest); assertEquals(doubleResult,doubleTest);
//Date 20 //Date 20
String dateResult = (String)getStatResult(response, "p2r", "date", "date_dtd"); String dateResult = (String)getStatResult("p2r", "date_dtd", VAL_TYPE.DATE);
String dateTest = (String)calculateStat(dateTestStart, "perc_20"); String dateTest = (String)calculateStat(dateTestStart, "perc_20");
assertEquals(dateResult,dateTest); assertEquals(dateResult,dateTest);
//String 20 //String 20
String stringResult = (String)getStatResult(response, "p2r", "str", "string_sd"); String stringResult = (String)getStatResult("p2r", "string_sd", VAL_TYPE.STRING);
String stringTest = (String)calculateStat(stringTestStart, "perc_20"); String stringTest = (String)calculateStat(stringTestStart, "perc_20");
assertEquals(stringResult,stringTest); assertEquals(stringResult,stringTest);
} }
@ -298,32 +296,32 @@ public class NoFacetTest extends AbstractAnalyticsStatsTest {
@Test @Test
public void perc60Test() throws Exception { public void perc60Test() throws Exception {
//Int 60 //Int 60
Integer intResult = (Integer)getStatResult(response, "p6r", "int", "int_id"); Integer intResult = (Integer)getStatResult("p6r", "int_id", VAL_TYPE.INTEGER);
Integer intTest = (Integer)calculateStat(intTestStart, "perc_60"); Integer intTest = (Integer)calculateStat(intTestStart, "perc_60");
assertEquals(intResult,intTest); assertEquals(intResult,intTest);
//Long 60 //Long 60
Long longResult = (Long)getStatResult(response, "p6r", "long", "long_ld"); Long longResult = (Long)getStatResult("p6r", "long_ld", VAL_TYPE.LONG);
Long longTest = (Long)calculateStat(longTestStart, "perc_60"); Long longTest = (Long)calculateStat(longTestStart, "perc_60");
assertEquals(longResult,longTest); assertEquals(longResult,longTest);
//Float 60 //Float 60
Float floatResult = (Float)getStatResult(response, "p6r", "float", "float_fd"); Float floatResult = (Float)getStatResult("p6r", "float_fd", VAL_TYPE.FLOAT);
Float floatTest = (Float)calculateStat(floatTestStart, "perc_60"); Float floatTest = (Float)calculateStat(floatTestStart, "perc_60");
assertEquals(floatResult,floatTest); assertEquals(floatResult,floatTest);
//Double 60 //Double 60
Double doubleResult = (Double)getStatResult(response, "p6r", "double", "double_dd"); Double doubleResult = (Double)getStatResult("p6r", "double_dd", VAL_TYPE.DOUBLE);
Double doubleTest = (Double)calculateStat(doubleTestStart, "perc_60"); Double doubleTest = (Double)calculateStat(doubleTestStart, "perc_60");
assertEquals(doubleResult,doubleTest); assertEquals(doubleResult,doubleTest);
//Date 60 //Date 60
String dateResult = (String)getStatResult(response, "p6r", "date", "date_dtd"); String dateResult = (String)getStatResult("p6r", "date_dtd", VAL_TYPE.DATE);
String dateTest = (String)calculateStat(dateTestStart, "perc_60"); String dateTest = (String)calculateStat(dateTestStart, "perc_60");
assertEquals(dateResult,dateTest); assertEquals(dateResult,dateTest);
//String 60 //String 60
String stringResult = (String)getStatResult(response, "p6r", "str", "string_sd"); String stringResult = (String)getStatResult("p6r", "string_sd", VAL_TYPE.STRING);
String stringTest = (String)calculateStat(stringTestStart, "perc_60"); String stringTest = (String)calculateStat(stringTestStart, "perc_60");
assertEquals(stringResult,stringTest); assertEquals(stringResult,stringTest);
} }
@ -331,32 +329,32 @@ public class NoFacetTest extends AbstractAnalyticsStatsTest {
@Test @Test
public void minTest() throws Exception { public void minTest() throws Exception {
//Int //Int
Integer intResult = (Integer)getStatResult(response, "mir", "int", "int_id"); Integer intResult = (Integer)getStatResult("mir", "int_id", VAL_TYPE.INTEGER);
Integer intTest = (Integer)calculateStat(intTestStart, "min"); Integer intTest = (Integer)calculateStat(intTestStart, "min");
assertEquals(intResult,intTest); assertEquals(intResult,intTest);
//Long //Long
Long longResult = (Long)getStatResult(response, "mir", "long", "long_ld"); Long longResult = (Long)getStatResult("mir", "long_ld", VAL_TYPE.LONG);
Long longTest = (Long)calculateStat(longTestStart, "min"); Long longTest = (Long)calculateStat(longTestStart, "min");
assertEquals(longResult,longTest); assertEquals(longResult,longTest);
//Float //Float
Float floatResult = (Float)getStatResult(response, "mir", "float", "float_fd"); Float floatResult = (Float)getStatResult("mir", "float_fd", VAL_TYPE.FLOAT);
Float floatTest = (Float)calculateStat(floatTestStart, "min"); Float floatTest = (Float)calculateStat(floatTestStart, "min");
assertEquals(floatResult,floatTest); assertEquals(floatResult,floatTest);
//Double //Double
Double doubleResult = (Double)getStatResult(response, "mir", "double", "double_dd"); Double doubleResult = (Double)getStatResult("mir", "double_dd", VAL_TYPE.DOUBLE);
Double doubleTest = (Double)calculateStat(doubleTestStart, "min"); Double doubleTest = (Double)calculateStat(doubleTestStart, "min");
assertEquals(doubleResult,doubleTest); assertEquals(doubleResult,doubleTest);
//Date //Date
String dateResult = (String)getStatResult(response, "mir", "date", "date_dtd"); String dateResult = (String)getStatResult("mir", "date_dtd", VAL_TYPE.DATE);
String dateTest = (String)calculateStat(dateTestStart, "min"); String dateTest = (String)calculateStat(dateTestStart, "min");
assertEquals(dateResult,dateTest); assertEquals(dateResult,dateTest);
//String //String
String stringResult = (String)getStatResult(response, "mir", "str", "string_sd"); String stringResult = (String)getStatResult("mir", "string_sd", VAL_TYPE.STRING);
String stringTest = (String)calculateStat(stringTestStart, "min"); String stringTest = (String)calculateStat(stringTestStart, "min");
assertEquals(stringResult,stringTest); assertEquals(stringResult,stringTest);
} }
@ -364,32 +362,32 @@ public class NoFacetTest extends AbstractAnalyticsStatsTest {
@Test @Test
public void maxTest() throws Exception { public void maxTest() throws Exception {
//Int //Int
Integer intResult = (Integer)getStatResult(response, "mar", "int", "int_id"); Integer intResult = (Integer)getStatResult("mar", "int_id", VAL_TYPE.INTEGER);
Integer intTest = (Integer)calculateStat(intTestStart, "max"); Integer intTest = (Integer)calculateStat(intTestStart, "max");
assertEquals(intResult,intTest); assertEquals(intResult,intTest);
//Long //Long
Long longResult = (Long)getStatResult(response, "mar", "long", "long_ld"); Long longResult = (Long)getStatResult("mar", "long_ld", VAL_TYPE.LONG);
Long longTest = (Long)calculateStat(longTestStart, "max"); Long longTest = (Long)calculateStat(longTestStart, "max");
assertEquals(longResult,longTest); assertEquals(longResult,longTest);
//Float //Float
Float floatResult = (Float)getStatResult(response, "mar", "float", "float_fd"); Float floatResult = (Float)getStatResult("mar", "float_fd", VAL_TYPE.FLOAT);
Float floatTest = (Float)calculateStat(floatTestStart, "max"); Float floatTest = (Float)calculateStat(floatTestStart, "max");
assertEquals(floatResult,floatTest); assertEquals(floatResult,floatTest);
//Double //Double
Double doubleResult = (Double)getStatResult(response, "mar", "double", "double_dd"); Double doubleResult = (Double)getStatResult("mar", "double_dd", VAL_TYPE.DOUBLE);
Double doubleTest = (Double)calculateStat(doubleTestStart, "max"); Double doubleTest = (Double)calculateStat(doubleTestStart, "max");
assertEquals(doubleResult,doubleTest); assertEquals(doubleResult,doubleTest);
//Date //Date
String dateResult = (String)getStatResult(response, "mar", "date", "date_dtd"); String dateResult = (String)getStatResult("mar", "date_dtd", VAL_TYPE.DATE);
String dateTest = (String)calculateStat(dateTestStart, "max"); String dateTest = (String)calculateStat(dateTestStart, "max");
assertEquals(dateResult,dateTest); assertEquals(dateResult,dateTest);
//String //String
String stringResult = (String)getStatResult(response, "mar", "str", "string_sd"); String stringResult = (String)getStatResult("mar", "string_sd", VAL_TYPE.STRING);
String stringTest = (String)calculateStat(stringTestStart, "max"); String stringTest = (String)calculateStat(stringTestStart, "max");
assertEquals(stringResult,stringTest); assertEquals(stringResult,stringTest);
} }
@ -397,32 +395,32 @@ public class NoFacetTest extends AbstractAnalyticsStatsTest {
@Test @Test
public void uniqueTest() throws Exception { public void uniqueTest() throws Exception {
//Int //Int
Long intResult = (Long)getStatResult(response, "ur", "long", "int_id"); Long intResult = (Long)getStatResult("ur", "int_id", VAL_TYPE.LONG);
Long intTest = (Long)calculateStat(intTestStart, "unique"); Long intTest = (Long)calculateStat(intTestStart, "unique");
assertEquals(intResult,intTest); assertEquals(intResult,intTest);
//Long //Long
Long longResult = (Long)getStatResult(response, "ur", "long", "long_ld"); Long longResult = (Long)getStatResult("ur", "long_ld", VAL_TYPE.LONG);
Long longTest = (Long)calculateStat(longTestStart, "unique"); Long longTest = (Long)calculateStat(longTestStart, "unique");
assertEquals(longResult,longTest); assertEquals(longResult,longTest);
//Float //Float
Long floatResult = (Long)getStatResult(response, "ur", "long", "float_fd"); Long floatResult = (Long)getStatResult("ur", "float_fd", VAL_TYPE.LONG);
Long floatTest = (Long)calculateStat(floatTestStart, "unique"); Long floatTest = (Long)calculateStat(floatTestStart, "unique");
assertEquals(floatResult,floatTest); assertEquals(floatResult,floatTest);
//Double //Double
Long doubleResult = (Long)getStatResult(response, "ur", "long", "double_dd"); Long doubleResult = (Long)getStatResult("ur", "double_dd", VAL_TYPE.LONG);
Long doubleTest = (Long)calculateStat(doubleTestStart, "unique"); Long doubleTest = (Long)calculateStat(doubleTestStart, "unique");
assertEquals(doubleResult,doubleTest); assertEquals(doubleResult,doubleTest);
//Date //Date
Long dateResult = (Long)getStatResult(response, "ur", "long", "date_dtd"); Long dateResult = (Long)getStatResult("ur", "date_dtd", VAL_TYPE.LONG);
Long dateTest = (Long)calculateStat(dateTestStart, "unique"); Long dateTest = (Long)calculateStat(dateTestStart, "unique");
assertEquals(dateResult,dateTest); assertEquals(dateResult,dateTest);
//String //String
Long stringResult = (Long)getStatResult(response, "ur", "long", "string_sd"); Long stringResult = (Long)getStatResult("ur", "string_sd", VAL_TYPE.LONG);
Long stringTest = (Long)calculateStat(stringTestStart, "unique"); Long stringTest = (Long)calculateStat(stringTestStart, "unique");
assertEquals(stringResult,stringTest); assertEquals(stringResult,stringTest);
} }
@ -430,32 +428,32 @@ public class NoFacetTest extends AbstractAnalyticsStatsTest {
@Test @Test
public void countTest() throws Exception { public void countTest() throws Exception {
//Int //Int
Long intResult = (Long)getStatResult(response, "cr", "long", "int_id"); Long intResult = (Long)getStatResult("cr", "int_id", VAL_TYPE.LONG);
Long intTest = (Long)calculateStat(intTestStart, "count"); Long intTest = (Long)calculateStat(intTestStart, "count");
assertEquals(intResult,intTest); assertEquals(intResult,intTest);
//Long //Long
Long longResult = (Long)getStatResult(response, "cr", "long", "long_ld"); Long longResult = (Long)getStatResult("cr", "long_ld", VAL_TYPE.LONG);
Long longTest = (Long)calculateStat(longTestStart, "count"); Long longTest = (Long)calculateStat(longTestStart, "count");
assertEquals(longResult,longTest); assertEquals(longResult,longTest);
//Float //Float
Long floatResult = (Long)getStatResult(response, "cr", "long", "float_fd"); Long floatResult = (Long)getStatResult("cr", "float_fd", VAL_TYPE.LONG);
Long floatTest = (Long)calculateStat(floatTestStart, "count"); Long floatTest = (Long)calculateStat(floatTestStart, "count");
assertEquals(floatResult,floatTest); assertEquals(floatResult,floatTest);
//Double //Double
Long doubleResult = (Long)getStatResult(response, "cr", "long", "double_dd"); Long doubleResult = (Long)getStatResult("cr", "double_dd", VAL_TYPE.LONG);
Long doubleTest = (Long)calculateStat(doubleTestStart, "count"); Long doubleTest = (Long)calculateStat(doubleTestStart, "count");
assertEquals(doubleResult,doubleTest); assertEquals(doubleResult,doubleTest);
//Date //Date
Long dateResult = (Long)getStatResult(response, "cr", "long", "date_dtd"); Long dateResult = (Long)getStatResult("cr", "date_dtd", VAL_TYPE.LONG);
Long dateTest = (Long)calculateStat(dateTestStart, "count"); Long dateTest = (Long)calculateStat(dateTestStart, "count");
assertEquals(dateResult,dateTest); assertEquals(dateResult,dateTest);
//String //String
Long stringResult = (Long)getStatResult(response, "cr", "long", "string_sd"); Long stringResult = (Long)getStatResult("cr", "string_sd", VAL_TYPE.LONG);
Long stringTest = (Long)calculateStat(stringTestStart, "count"); Long stringTest = (Long)calculateStat(stringTestStart, "count");
assertEquals(stringResult,stringTest); assertEquals(stringResult,stringTest);
} }
@ -463,27 +461,27 @@ public class NoFacetTest extends AbstractAnalyticsStatsTest {
@Test @Test
public void missingDefaultTest() throws Exception { public void missingDefaultTest() throws Exception {
//Int //Int
long intResult = (Long)getStatResult(response, "misr", "long", "int_id"); long intResult = (Long)getStatResult("misr", "int_id", VAL_TYPE.LONG);
assertEquals(intMissing,intResult); assertEquals(intMissing,intResult);
//Long //Long
long longResult = (Long)getStatResult(response, "misr", "long", "long_ld"); long longResult = (Long)getStatResult("misr", "long_ld", VAL_TYPE.LONG);
assertEquals(longMissing,longResult); assertEquals(longMissing,longResult);
//Float //Float
long floatResult = (Long)getStatResult(response, "misr", "long", "float_fd"); long floatResult = (Long)getStatResult("misr", "float_fd", VAL_TYPE.LONG);
assertEquals(floatMissing,floatResult); assertEquals(floatMissing,floatResult);
//Double //Double
long doubleResult = (Long)getStatResult(response, "misr", "long", "double_dd"); long doubleResult = (Long)getStatResult("misr", "double_dd", VAL_TYPE.LONG);
assertEquals(doubleMissing,doubleResult); assertEquals(doubleMissing,doubleResult);
//Date //Date
long dateResult = (Long)getStatResult(response, "misr", "long", "date_dtd"); long dateResult = (Long)getStatResult("misr", "date_dtd", VAL_TYPE.LONG);
assertEquals(dateMissing,dateResult); assertEquals(dateMissing,dateResult);
//String //String
long stringResult = (Long)getStatResult(response, "misr", "long", "string_sd"); long stringResult = (Long)getStatResult("misr", "string_sd", VAL_TYPE.LONG);
assertEquals(stringMissing, stringResult); assertEquals(stringMissing, stringResult);
} }

View File

@ -23,6 +23,7 @@ import org.apache.solr.analytics.AbstractAnalyticsStatsTest;
import org.apache.solr.analytics.facet.AbstractAnalyticsFacetTest; import org.apache.solr.analytics.facet.AbstractAnalyticsFacetTest;
import org.junit.Assert; import org.junit.Assert;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
@SuppressCodecs({"Lucene3x","Lucene40","Lucene41","Lucene42","Appending","Asserting"}) @SuppressCodecs({"Lucene3x","Lucene40","Lucene41","Lucene42","Appending","Asserting"})
@ -37,8 +38,6 @@ public class FunctionTest extends AbstractAnalyticsStatsTest {
static public final int STRING = 28; static public final int STRING = 28;
static public final int NUM_LOOPS = 100; static public final int NUM_LOOPS = 100;
static String response;
@BeforeClass @BeforeClass
public static void beforeClass() throws Exception { public static void beforeClass() throws Exception {
initCore("solrconfig-basic.xml","schema-analytics.xml"); initCore("solrconfig-basic.xml","schema-analytics.xml");
@ -85,145 +84,145 @@ public class FunctionTest extends AbstractAnalyticsStatsTest {
assertU(commit()); assertU(commit());
response = h.query(request(fileToStringArr(fileName))); setResponse(h.query(request(fileToStringArr(fileName))));
} }
@Test @Test
public void addTest() throws Exception { public void addTest() throws Exception {
double result = (Double)getStatResult(response, "ar", "double", "sum"); double result = (Double)getStatResult("ar", "sum", VAL_TYPE.DOUBLE);
double calculated = (Double)getStatResult(response, "ar", "double", "sumc"); double calculated = (Double)getStatResult("ar", "sumc", VAL_TYPE.DOUBLE);
assertTrue(result==calculated); assertTrue(result==calculated);
result = (Double)getStatResult(response, "ar", "double", "mean"); result = (Double)getStatResult("ar", "mean", VAL_TYPE.DOUBLE);
calculated = (Double)getStatResult(response, "ar", "double", "meanc"); calculated = (Double)getStatResult("ar", "meanc", VAL_TYPE.DOUBLE);
assertTrue(result==calculated); assertTrue(result==calculated);
} }
@Test @Test
public void multiplyTest() throws Exception { public void multiplyTest() throws Exception {
double result = (Double)getStatResult(response, "mr", "double", "sum"); double result = (Double)getStatResult("mr", "sum", VAL_TYPE.DOUBLE);
double calculated = (Double)getStatResult(response, "mr", "double", "sumc"); double calculated = (Double)getStatResult("mr", "sumc", VAL_TYPE.DOUBLE);
assertTrue(result==calculated); assertTrue(result==calculated);
result = (Double)getStatResult(response, "mr", "double", "mean"); result = (Double)getStatResult("mr", "mean", VAL_TYPE.DOUBLE);
calculated = (Double)getStatResult(response, "mr", "double", "meanc"); calculated = (Double)getStatResult("mr", "meanc", VAL_TYPE.DOUBLE);
assertTrue(result==calculated); assertTrue(result==calculated);
} }
@Test @Test
public void divideTest() throws Exception { public void divideTest() throws Exception {
Double result = (Double)getStatResult(response, "dr", "double", "sum"); Double result = (Double)getStatResult("dr", "sum", VAL_TYPE.DOUBLE);
Double calculated = (Double)getStatResult(response, "dr", "double", "sumc"); Double calculated = (Double)getStatResult("dr", "sumc", VAL_TYPE.DOUBLE);
assertTrue(result.equals(calculated)); assertTrue(result.equals(calculated));
result = (Double)getStatResult(response, "dr", "double", "mean"); result = (Double)getStatResult("dr", "mean", VAL_TYPE.DOUBLE);
calculated = (Double)getStatResult(response, "dr", "double", "meanc"); calculated = (Double)getStatResult("dr", "meanc", VAL_TYPE.DOUBLE);
assertTrue(result.equals(calculated)); assertTrue(result.equals(calculated));
} }
@Test @Test
public void powerTest() throws Exception { public void powerTest() throws Exception {
double result = (Double)getStatResult(response, "pr", "double", "sum"); double result = (Double)getStatResult("pr", "sum", VAL_TYPE.DOUBLE);
double calculated = (Double)getStatResult(response, "pr", "double", "sumc"); double calculated = (Double)getStatResult("pr", "sumc", VAL_TYPE.DOUBLE);
assertTrue(result==calculated); assertTrue(result==calculated);
result = (Double)getStatResult(response, "pr", "double", "mean"); result = (Double)getStatResult("pr", "mean", VAL_TYPE.DOUBLE);
calculated = (Double)getStatResult(response, "pr", "double", "meanc"); calculated = (Double)getStatResult("pr", "meanc", VAL_TYPE.DOUBLE);
assertTrue(result==calculated); assertTrue(result==calculated);
} }
@Test @Test
public void negateTest() throws Exception { public void negateTest() throws Exception {
double result = (Double)getStatResult(response, "nr", "double", "sum"); double result = (Double)getStatResult("nr", "sum", VAL_TYPE.DOUBLE);
double calculated = (Double)getStatResult(response, "nr", "double", "sumc"); double calculated = (Double)getStatResult("nr", "sumc", VAL_TYPE.DOUBLE);
assertTrue(result==calculated); assertTrue(result==calculated);
result = (Double)getStatResult(response, "nr", "double", "mean"); result = (Double)getStatResult("nr", "mean", VAL_TYPE.DOUBLE);
calculated = (Double)getStatResult(response, "nr", "double", "meanc"); calculated = (Double)getStatResult("nr", "meanc", VAL_TYPE.DOUBLE);
assertTrue(result==calculated); assertTrue(result==calculated);
} }
@Test @Test @Ignore("SOLR-5488")
public void absoluteValueTest() throws Exception { public void absoluteValueTest() throws Exception {
double result = (Double)getStatResult(response, "avr", "double", "sum"); double result = (Double)getStatResult("avr", "sum", VAL_TYPE.DOUBLE);
double calculated = (Double)getStatResult(response, "avr", "double", "sumc"); double calculated = (Double)getStatResult("avr", "sumc", VAL_TYPE.DOUBLE);
assertTrue(result==calculated); assertTrue(result==calculated);
result = (Double)getStatResult(response, "avr", "double", "mean"); result = (Double)getStatResult("avr", "mean", VAL_TYPE.DOUBLE);
calculated = (Double)getStatResult(response, "avr", "double", "meanc"); calculated = (Double)getStatResult("avr", "meanc", VAL_TYPE.DOUBLE);
assertTrue(result==calculated); assertTrue(result==calculated);
} }
@Test @Test
public void constantNumberTest() throws Exception { public void constantNumberTest() throws Exception {
double result = (Double)getStatResult(response, "cnr", "double", "sum"); double result = (Double)getStatResult("cnr", "sum", VAL_TYPE.DOUBLE);
double calculated = (Double)getStatResult(response, "cnr", "double", "sumc"); double calculated = (Double)getStatResult("cnr", "sumc", VAL_TYPE.DOUBLE);
assertTrue(result==calculated); assertTrue(result==calculated);
result = (Double)getStatResult(response, "cnr", "double", "mean"); result = (Double)getStatResult("cnr", "mean", VAL_TYPE.DOUBLE);
calculated = (Double)getStatResult(response, "cnr", "double", "meanc"); calculated = (Double)getStatResult("cnr", "meanc", VAL_TYPE.DOUBLE);
assertTrue(result==calculated); assertTrue(result==calculated);
} }
@Test @Test
public void dateMathTest() throws Exception { public void dateMathTest() throws Exception {
String result = (String)getStatResult(response, "dmr", "date", "median"); String result = (String)getStatResult("dmr", "median", VAL_TYPE.STRING);
String calculated = (String)getStatResult(response, "dmr", "date", "medianc"); String calculated = (String)getStatResult("dmr", "medianc", VAL_TYPE.STRING);
assertTrue(result.equals(calculated)); assertTrue(result.equals(calculated));
result = (String)getStatResult(response, "dmr", "date", "max"); result = (String)getStatResult("dmr", "max", VAL_TYPE.STRING);
calculated = (String)getStatResult(response, "dmr", "date", "maxc"); calculated = (String)getStatResult("dmr", "maxc", VAL_TYPE.STRING);
assertTrue(result.equals(calculated)); assertTrue(result.equals(calculated));
} }
@Test @Test
public void constantDateTest() throws Exception { public void constantDateTest() throws Exception {
String result = (String)getStatResult(response, "cdr", "date", "median"); String result = (String)getStatResult("cdr", "median", VAL_TYPE.STRING);
String calculated = (String)getStatResult(response, "cdr", "date", "medianc"); String calculated = (String)getStatResult("cdr", "medianc", VAL_TYPE.STRING);
assertTrue(result.equals(calculated)); assertTrue(result.equals(calculated));
result = (String)getStatResult(response, "cdr", "date", "max"); result = (String)getStatResult("cdr", "max", VAL_TYPE.STRING);
calculated = (String)getStatResult(response, "cdr", "date", "maxc"); calculated = (String)getStatResult("cdr", "maxc", VAL_TYPE.STRING);
assertTrue(result.equals(calculated)); assertTrue(result.equals(calculated));
} }
@Test @Test
public void constantStringTest() throws Exception { public void constantStringTest() throws Exception {
String result = (String)getStatResult(response, "csr", "str", "min"); String result = (String)getStatResult("csr", "min", VAL_TYPE.STRING);
String calculated = (String)getStatResult(response, "csr", "str", "minc"); String calculated = (String)getStatResult("csr", "minc", VAL_TYPE.STRING);
assertTrue(result.equals(calculated)); assertTrue(result.equals(calculated));
result = (String)getStatResult(response, "csr", "str", "max"); result = (String)getStatResult("csr", "max", VAL_TYPE.STRING);
calculated = (String)getStatResult(response, "csr", "str", "maxc"); calculated = (String)getStatResult("csr", "maxc", VAL_TYPE.STRING);
assertTrue(result.equals(calculated)); assertTrue(result.equals(calculated));
} }
@Test @Test
public void concatenateTest() throws Exception { public void concatenateTest() throws Exception {
String result = (String)getStatResult(response, "cr", "str", "min"); String result = (String)getStatResult("cr", "min", VAL_TYPE.STRING);
String calculated = (String)getStatResult(response, "cr", "str", "minc"); String calculated = (String)getStatResult("cr", "minc", VAL_TYPE.STRING);
assertTrue(result.equals(calculated)); assertTrue(result.equals(calculated));
result = (String)getStatResult(response, "cr", "str", "max"); result = (String)getStatResult("cr", "max", VAL_TYPE.STRING);
calculated = (String)getStatResult(response, "cr", "str", "maxc"); calculated = (String)getStatResult("cr", "maxc", VAL_TYPE.STRING);
assertTrue(result.equals(calculated)); assertTrue(result.equals(calculated));
} }
@Test @Test
public void reverseTest() throws Exception { public void reverseTest() throws Exception {
String result = (String)getStatResult(response, "rr", "str", "min"); String result = (String)getStatResult("rr", "min", VAL_TYPE.STRING);
String calculated = (String)getStatResult(response, "rr", "str", "minc"); String calculated = (String)getStatResult("rr", "minc", VAL_TYPE.STRING);
assertTrue(result.equals(calculated)); assertTrue(result.equals(calculated));
result = (String)getStatResult(response, "rr", "str", "max"); result = (String)getStatResult("rr", "max", VAL_TYPE.STRING);
calculated = (String)getStatResult(response, "rr", "str", "maxc"); calculated = (String)getStatResult("rr", "maxc", VAL_TYPE.STRING);
assertTrue(result.equals(calculated)); assertTrue(result.equals(calculated));
} }
@Test @Test
public void missingTest() throws Exception { public void missingTest() throws Exception {
double min = (Double)getStatResult(response, "ms", "double", "min"); double min = (Double)getStatResult("ms", "min", VAL_TYPE.DOUBLE);
double max = (Double)getStatResult(response, "ms", "double", "max"); double max = (Double)getStatResult("ms", "max", VAL_TYPE.DOUBLE);
Assert.assertEquals((Double)48.0,(Double)max); Assert.assertEquals((Double)48.0,(Double)max);
Assert.assertEquals((Double)1.0,(Double)min); Assert.assertEquals((Double)1.0,(Double)min);
} }