-
Notifications
You must be signed in to change notification settings - Fork 1k
/
QueryPlanTest.java
101 lines (87 loc) · 4.4 KB
/
QueryPlanTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package org.graylog.plugins.enterprise.search.engine;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import org.graylog.plugins.enterprise.search.Parameter;
import org.graylog.plugins.enterprise.search.Query;
import org.graylog.plugins.enterprise.search.Search;
import org.graylog.plugins.enterprise.search.SearchJob;
import org.graylog.plugins.enterprise.search.SearchType;
import org.graylog.plugins.enterprise.search.elasticsearch.ESQueryDecorators;
import org.graylog.plugins.enterprise.search.elasticsearch.ElasticsearchBackend;
import org.graylog.plugins.enterprise.search.elasticsearch.ElasticsearchQueryString;
import org.graylog.plugins.enterprise.search.elasticsearch.QueryStringParser;
import org.graylog.plugins.enterprise.search.elasticsearch.searchtypes.ESDateHistogram;
import org.graylog.plugins.enterprise.search.elasticsearch.searchtypes.ESMessageList;
import org.graylog.plugins.enterprise.search.elasticsearch.searchtypes.ESSearchTypeHandler;
import org.graylog.plugins.enterprise.search.searchtypes.DateHistogram;
import org.graylog.plugins.enterprise.search.searchtypes.MessageList;
import org.graylog2.indexer.ranges.IndexRangeService;
import org.graylog2.plugin.indexer.searches.timeranges.InvalidRangeParametersException;
import org.graylog2.plugin.indexer.searches.timeranges.RelativeRange;
import org.graylog2.streams.StreamService;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Provider;
import java.util.Collections;
import java.util.Map;
import java.util.UUID;
import static com.google.common.collect.ImmutableSet.of;
import static org.assertj.core.api.Assertions.assertThat;
import static org.graylog.plugins.enterprise.search.params.ValueBinding.bindToValue;
import static org.mockito.Mockito.mock;
public class QueryPlanTest {
private final RelativeRange timerange;
private final QueryEngine queryEngine;
public QueryPlanTest() throws InvalidRangeParametersException {
timerange = RelativeRange.create(60);
Map<String, Provider<ESSearchTypeHandler<? extends SearchType>>> handlers = Maps.newHashMap();
handlers.put(MessageList.NAME, () -> new ESMessageList(new ESQueryDecorators.Fake()));
handlers.put(DateHistogram.NAME, ESDateHistogram::new);
final QueryStringParser queryStringParser = new QueryStringParser();
ElasticsearchBackend backend = new ElasticsearchBackend(handlers, queryStringParser, null, mock(IndexRangeService.class), mock(StreamService.class), new ESQueryDecorators.Fake());
queryEngine = new QueryEngine(ImmutableMap.of("elasticsearch", backend), Collections.emptySet());
}
private static String randomUUID() {
return UUID.randomUUID().toString();
}
@Test
public void singleQuery() {
Search search = Search.builder()
.queries(of(wildcardQueryBuilder()
.build()))
.build();
SearchJob job = new SearchJob(randomUUID(), search, "admin");
final QueryPlan queryPlan = new QueryPlan(queryEngine, job);
ImmutableList<Query> queries = queryPlan.queries();
assertThat(queries).doesNotContain(Query.emptyRoot());
}
@Test
public void singleQueryValueParam() {
Search search = Search.builder()
.queries(of(wildcardQueryBuilder().build()))
.parameters(of(Parameter.builder()
.name("PARAM1")
.dataType("string")
.binding(bindToValue("hello parameter"))
.build()))
.build();
SearchJob job = new SearchJob(randomUUID(), search, "admin");
final QueryPlan queryPlan = new QueryPlan(queryEngine, job);
ImmutableList<Query> elements = queryPlan.queries();
assertThat(elements).doesNotContain(Query.emptyRoot());
}
private Query.Builder stringQueryBuilder(String queryString, String id) {
return Query.builder()
.id(id == null ? randomUUID() : id)
.timerange(timerange)
.query(ElasticsearchQueryString.builder().queryString(queryString).build());
}
private Query.Builder wildcardQueryBuilder() {
return wildcardQueryBuilder(null);
}
private Query.Builder wildcardQueryBuilder(String id) {
return stringQueryBuilder("*", id);
}
}