|
@@ -23,12 +23,12 @@ import org.elasticsearch.common.Table;
|
|
|
import org.elasticsearch.common.xcontent.XContentType;
|
|
|
import org.elasticsearch.rest.AbstractRestChannel;
|
|
|
import org.elasticsearch.rest.RestResponse;
|
|
|
-import org.elasticsearch.rest.action.cat.RestTable;
|
|
|
import org.elasticsearch.test.ESTestCase;
|
|
|
import org.elasticsearch.test.rest.FakeRestRequest;
|
|
|
import org.junit.Before;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -62,11 +62,13 @@ public class RestTableTests extends ESTestCase {
|
|
|
" invalidAliasesBulk: \"foo\"\n" +
|
|
|
" timestamp: \"foo\"\n" +
|
|
|
" epoch: \"foo\"\n";
|
|
|
- private Table table = new Table();
|
|
|
- private FakeRestRequest restRequest = new FakeRestRequest();
|
|
|
+ private Table table;
|
|
|
+ private FakeRestRequest restRequest;
|
|
|
|
|
|
@Before
|
|
|
public void setup() {
|
|
|
+ restRequest = new FakeRestRequest();
|
|
|
+ table = new Table();
|
|
|
table.startHeaders();
|
|
|
table.addCell("bulk.foo", "alias:f;desc:foo");
|
|
|
table.addCell("bulk.bar", "alias:b;desc:bar");
|
|
@@ -146,6 +148,110 @@ public class RestTableTests extends ESTestCase {
|
|
|
assertThat(headerNames, not(hasItem("epoch")));
|
|
|
}
|
|
|
|
|
|
+ public void testCompareRow() {
|
|
|
+ Table table = new Table();
|
|
|
+ table.startHeaders();
|
|
|
+ table.addCell("compare");
|
|
|
+ table.endHeaders();
|
|
|
+
|
|
|
+ for (Integer i : Arrays.asList(1,2,1)) {
|
|
|
+ table.startRow();
|
|
|
+ table.addCell(i);
|
|
|
+ table.endRow();
|
|
|
+ }
|
|
|
+
|
|
|
+ RestTable.TableIndexComparator comparator = new RestTable.TableIndexComparator(table,
|
|
|
+ Collections.singletonList(new RestTable.ColumnOrderElement("compare", false)));
|
|
|
+ assertTrue(comparator.compare(0,1) < 0);
|
|
|
+ assertTrue(comparator.compare(0,2) == 0);
|
|
|
+ assertTrue(comparator.compare(1,2) > 0);
|
|
|
+
|
|
|
+ RestTable.TableIndexComparator reverseComparator = new RestTable.TableIndexComparator(table,
|
|
|
+ Collections.singletonList(new RestTable.ColumnOrderElement("compare", true)));
|
|
|
+
|
|
|
+ assertTrue(reverseComparator.compare(0,1) > 0);
|
|
|
+ assertTrue(reverseComparator.compare(0,2) == 0);
|
|
|
+ assertTrue(reverseComparator.compare(1,2) < 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testRowOutOfBounds() {
|
|
|
+ Table table = new Table();
|
|
|
+ table.startHeaders();
|
|
|
+ table.addCell("compare");
|
|
|
+ table.endHeaders();
|
|
|
+ RestTable.TableIndexComparator comparator = new RestTable.TableIndexComparator(table,
|
|
|
+ Collections.singletonList(new RestTable.ColumnOrderElement("compare", false)));
|
|
|
+ Error e = expectThrows(AssertionError.class, () -> {
|
|
|
+ comparator.compare(0,1);
|
|
|
+ });
|
|
|
+ assertEquals("Invalid comparison of indices (0, 1): Table has 0 rows.", e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testUnknownHeader() {
|
|
|
+ Table table = new Table();
|
|
|
+ table.startHeaders();
|
|
|
+ table.addCell("compare");
|
|
|
+ table.endHeaders();
|
|
|
+ restRequest.params().put("s", "notaheader");
|
|
|
+ Exception e = expectThrows(UnsupportedOperationException.class, () -> RestTable.getRowOrder(table, restRequest));
|
|
|
+ assertEquals("Unable to sort by unknown sort key `notaheader`", e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testAliasSort() {
|
|
|
+ Table table = new Table();
|
|
|
+ table.startHeaders();
|
|
|
+ table.addCell("compare", "alias:c;");
|
|
|
+ table.endHeaders();
|
|
|
+ List<Integer> comparisonList = Arrays.asList(3,1,2);
|
|
|
+ for (int i = 0; i < comparisonList.size(); i++) {
|
|
|
+ table.startRow();
|
|
|
+ table.addCell(comparisonList.get(i));
|
|
|
+ table.endRow();
|
|
|
+ }
|
|
|
+ restRequest.params().put("s", "c");
|
|
|
+ List<Integer> rowOrder = RestTable.getRowOrder(table, restRequest);
|
|
|
+ assertEquals(Arrays.asList(1,2,0), rowOrder);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testReversedSort() {
|
|
|
+ Table table = new Table();
|
|
|
+ table.startHeaders();
|
|
|
+ table.addCell("reversed");
|
|
|
+ table.endHeaders();
|
|
|
+ List<Integer> comparisonList = Arrays.asList(0, 1, 2);
|
|
|
+ for (int i = 0; i < comparisonList.size(); i++) {
|
|
|
+ table.startRow();
|
|
|
+ table.addCell(comparisonList.get(i));
|
|
|
+ table.endRow();
|
|
|
+ }
|
|
|
+ restRequest.params().put("s", "reversed:desc");
|
|
|
+ List<Integer> rowOrder = RestTable.getRowOrder(table, restRequest);
|
|
|
+ assertEquals(Arrays.asList(2,1,0), rowOrder);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testMultiSort() {
|
|
|
+ Table table = new Table();
|
|
|
+ table.startHeaders();
|
|
|
+ table.addCell("compare");
|
|
|
+ table.addCell("second.compare");
|
|
|
+ table.endHeaders();
|
|
|
+ List<Integer> comparisonList = Arrays.asList(3, 3, 2);
|
|
|
+ List<Integer> secondComparisonList = Arrays.asList(2, 1, 3);
|
|
|
+ for (int i = 0; i < comparisonList.size(); i++) {
|
|
|
+ table.startRow();
|
|
|
+ table.addCell(comparisonList.get(i));
|
|
|
+ table.addCell(secondComparisonList.get(i));
|
|
|
+ table.endRow();
|
|
|
+ }
|
|
|
+ restRequest.params().put("s", "compare,second.compare");
|
|
|
+ List<Integer> rowOrder = RestTable.getRowOrder(table, restRequest);
|
|
|
+ assertEquals(Arrays.asList(2,1,0), rowOrder);
|
|
|
+
|
|
|
+ restRequest.params().put("s", "compare:desc,second.compare");
|
|
|
+ rowOrder = RestTable.getRowOrder(table, restRequest);
|
|
|
+ assertEquals(Arrays.asList(1,0,2), rowOrder);
|
|
|
+ }
|
|
|
+
|
|
|
private RestResponse assertResponseContentType(Map<String, String> headers, String mediaType) throws Exception {
|
|
|
FakeRestRequest requestWithAcceptHeader = new FakeRestRequest.Builder().withHeaders(headers).build();
|
|
|
table.startRow();
|