Skip to content

Commit 93a012d

Browse files
authored
TestExportWriter fix, loosen order constraint (#2615)
This test was asserting the docs from /export came in the same order as an equivalent from /select. But that's too strong an expectation; only the sorted values should be equivalent.
1 parent 7c25cee commit 93a012d

File tree

1 file changed

+38
-74
lines changed

1 file changed

+38
-74
lines changed

solr/core/src/test/org/apache/solr/handler/export/TestExportWriter.java

+38-74
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.util.Date;
2424
import java.util.HashMap;
2525
import java.util.HashSet;
26-
import java.util.LinkedHashMap;
2726
import java.util.List;
2827
import java.util.Locale;
2928
import java.util.Map;
@@ -1368,84 +1367,49 @@ private void validateSort(int numDocs) throws Exception {
13681367
String sortStr = String.join(",", fieldWithOrderStrs); // sort : field1 asc, field2 desc
13691368
String fieldsStr = String.join(",", fieldStrs); // fl : field1, field2
13701369

1371-
String resp =
1372-
h.query(req("q", "*:*", "qt", "/export", "fl", "id," + fieldsStr, "sort", sortStr));
1373-
HashMap respMap = mapper.readValue(resp, HashMap.class);
1374-
List docs = (ArrayList) ((HashMap) respMap.get("response")).get("docs");
1370+
List<?> exportDocs =
1371+
queryJsonReturnDocs(
1372+
req("q", "*:*", "qt", "/export", "fl", "id," + fieldsStr, "sort", sortStr));
1373+
assertEquals(exportDocs.size(), numDocs);
13751374

1376-
SolrQueryRequest selectReq =
1377-
req(
1378-
"q",
1379-
"*:*",
1380-
"qt",
1381-
"/select",
1382-
"fl",
1383-
"id," + fieldsStr,
1384-
"sort",
1385-
sortStr,
1386-
"rows",
1387-
Integer.toString(numDocs),
1388-
"wt",
1389-
"json");
1390-
String response = h.query(selectReq);
1391-
Map rsp = (Map) Utils.fromJSONString(response);
1392-
List doclist = (List) (((Map) rsp.get("response")).get("docs"));
1393-
1394-
assertEquals(docs.size(), numDocs);
1395-
1396-
for (int i = 0; i < docs.size() - 1; i++) { // docs..
1397-
assertEquals(
1398-
"Position:" + i + " has different id value",
1399-
((LinkedHashMap) doclist.get(i)).get("id"),
1400-
String.valueOf(((HashMap<?, ?>) docs.get(i)).get("id")));
1401-
1402-
for (SortFields fieldSort : fieldSorts) { // fields ..
1403-
String field = fieldSort.getField();
1404-
String sort = fieldSort.getSort();
1405-
String fieldVal1 = String.valueOf(((HashMap) docs.get(i)).get(field)); // 1st doc
1406-
String fieldVal2 = String.valueOf(((HashMap) docs.get(i + 1)).get(field)); // 2nd obj
1407-
if (fieldVal1.equals(fieldVal2)) {
1408-
continue;
1409-
} else {
1410-
if (sort.equals("asc")) {
1411-
if (field.equals("stringdv")
1412-
|| field.equals("field1_s_dv")
1413-
|| field.equals("datedv")
1414-
|| field.equals("booleandv")) { // use string comparator
1415-
assertTrue(fieldVal1.compareTo(fieldVal2) < 0);
1416-
} else if (field.equals("doubledv")) {
1417-
assertTrue(Double.compare(Double.valueOf(fieldVal1), Double.valueOf(fieldVal2)) <= 0);
1418-
} else if (field.equals("floatdv")) {
1419-
assertTrue(Float.compare(Float.valueOf(fieldVal1), Float.valueOf(fieldVal2)) <= 0);
1420-
} else if (field.equals("intdv") || "field2_i_p".equals(field)) {
1421-
assertTrue(
1422-
Integer.compare(Integer.valueOf(fieldVal1), Integer.valueOf(fieldVal2)) <= 0);
1423-
} else if (field.equals("longdv") || field.equals("field3_l_p")) {
1424-
assertTrue(Long.compare(Integer.valueOf(fieldVal1), Long.valueOf(fieldVal2)) <= 0);
1425-
}
1426-
} else {
1427-
if (field.equals("stringdv")
1428-
|| field.equals("field1_s_dv")
1429-
|| field.equals("datedv")
1430-
|| field.equals("booleandv")) { // use string comparator
1431-
assertTrue(fieldVal1.compareTo(fieldVal2) > 0);
1432-
} else if (field.equals("doubledv")) {
1433-
assertTrue(Double.compare(Double.valueOf(fieldVal1), Double.valueOf(fieldVal2)) >= 0);
1434-
} else if (field.equals("floatdv")) {
1435-
assertTrue(Float.compare(Float.valueOf(fieldVal1), Float.valueOf(fieldVal2)) >= 0);
1436-
} else if (field.equals("intdv") || "field2_i_p".equals(field)) {
1437-
assertTrue(
1438-
Integer.compare(Integer.valueOf(fieldVal1), Integer.valueOf(fieldVal2)) >= 0);
1439-
} else if (field.equals("longdv") || field.equals("field3_l_p")) {
1440-
assertTrue(Long.compare(Integer.valueOf(fieldVal1), Long.valueOf(fieldVal2)) >= 0);
1441-
}
1442-
}
1443-
break;
1444-
}
1375+
// equivalent for /select
1376+
List<?> selectDocs =
1377+
queryJsonReturnDocs(
1378+
req(
1379+
"q",
1380+
"*:*",
1381+
"qt",
1382+
"/select",
1383+
"fl",
1384+
"id," + fieldsStr,
1385+
"sort",
1386+
sortStr,
1387+
"rows",
1388+
Integer.toString(numDocs),
1389+
"wt",
1390+
"json"));
1391+
1392+
assertEquals(selectDocs.size(), numDocs);
1393+
1394+
// check that both /select and /export return docs with the same values for the sorted fields
1395+
for (int i = 0; i < exportDocs.size(); i++) {
1396+
Map exportDoc = (Map) exportDocs.get(i);
1397+
Map selectDoc = (Map) selectDocs.get(i);
1398+
for (SortFields fieldSort : fieldSorts) {
1399+
String field = fieldSort.fieldName;
1400+
assertEquals(
1401+
"doc " + i + " differs for field " + field, exportDoc.get(field), selectDoc.get(field));
14451402
}
14461403
}
14471404
}
14481405

1406+
@SuppressWarnings("rawtypes")
1407+
private List<?> queryJsonReturnDocs(SolrQueryRequest exportReq) throws Exception {
1408+
String respStr = h.query(exportReq);
1409+
Map respMap = mapper.readValue(respStr, Map.class);
1410+
return (List) ((Map) respMap.get("response")).get("docs");
1411+
}
1412+
14491413
private static class SortFields {
14501414
String fieldName;
14511415
String sortOrder;

0 commit comments

Comments
 (0)