Cat API: Do not rely on hashmap for sorted entries

The tests for the recently added added wildcard feature were
relying on order of the hashmap being used, which could be
different.

The implementation now ensures, that the header fields are
parsed in the order they have been added.
This commit is contained in:
Alexander Reelsen 2015-05-27 17:38:31 +02:00
parent ceb0782ebd
commit 9d5e789508
3 changed files with 7 additions and 8 deletions

View File

@ -36,7 +36,7 @@
- match:
$body: |
/^ bulk.max \s+ bulk.min \s+ \n
/^ bulk.min \s+ bulk.max \s+ \n
(\s+ \d+ \s+ \d+ \s+ \n)+ $/
#(\s+ \d+ \s+ \d+ \n)+ $/

View File

@ -157,16 +157,15 @@ public class RestTable {
private static Set<String> expandHeadersFromRequest(Table table, RestRequest request) {
Set<String> headers = new LinkedHashSet<>(table.getHeaders().size());
Map<String, Table.Cell> headerMap = table.getHeaderMap();
// check headers and aliases
for (String header : Strings.splitStringByCommaToArray(request.param("h"))) {
if (Regex.isSimpleMatchPattern(header)) {
for (Map.Entry<String, Table.Cell> configuredHeaderEntry : headerMap.entrySet()) {
String configuredHeader = configuredHeaderEntry.getKey();
for (Table.Cell tableHeaderCell : table.getHeaders()) {
String configuredHeader = tableHeaderCell.value.toString();
if (Regex.simpleMatch(header, configuredHeader)) {
headers.add(configuredHeader);
} else if (configuredHeaderEntry.getValue().attr.containsKey("alias")) {
String[] aliases = Strings.splitStringByCommaToArray(configuredHeaderEntry.getValue().attr.get("alias"));
} else if (tableHeaderCell.attr.containsKey("alias")) {
String[] aliases = Strings.splitStringByCommaToArray(tableHeaderCell.attr.get("alias"));
for (String alias : aliases) {
if (Regex.simpleMatch(header, alias)) {
headers.add(configuredHeader);

View File

@ -57,7 +57,7 @@ public class RestTableTest extends ElasticsearchTestCase {
List<RestTable.DisplayHeader> headers = buildDisplayHeaders(table, restRequest);
List<String> headerNames = getHeaderNames(headers);
assertThat(headerNames, containsInAnyOrder("bulk.foo", "bulk.bar", "aliasedBulk", "aliasedSecondBulk"));
assertThat(headerNames, contains("bulk.foo", "bulk.bar", "aliasedBulk", "aliasedSecondBulk"));
assertThat(headerNames, not(hasItem("unmatched")));
}
@ -67,7 +67,7 @@ public class RestTableTest extends ElasticsearchTestCase {
List<RestTable.DisplayHeader> headers = buildDisplayHeaders(table, restRequest);
List<String> headerNames = getHeaderNames(headers);
assertThat(headerNames, containsInAnyOrder("bulk.foo", "bulk.bar", "aliasedBulk", "aliasedSecondBulk"));
assertThat(headerNames, contains("bulk.foo", "bulk.bar", "aliasedBulk", "aliasedSecondBulk"));
assertThat(headerNames, not(hasItem("unmatched")));
}