View Javadoc
1   package org.wikimedia.search.extra.router;
2   
3   import static org.hamcrest.CoreMatchers.instanceOf;
4   
5   import java.io.IOException;
6   
7   import org.apache.lucene.util.LuceneTestCase;
8   import org.elasticsearch.index.query.MatchNoneQueryBuilder;
9   import org.elasticsearch.index.query.MatchPhraseQueryBuilder;
10  import org.elasticsearch.index.query.QueryBuilder;
11  import org.junit.Test;
12  import org.wikimedia.search.extra.QueryBuilderTestUtils;
13  import org.wikimedia.search.extra.router.AbstractRouterQueryBuilder.ConditionDefinition;
14  import org.wikimedia.search.extra.router.DegradedRouterQueryBuilder.DegradedConditionType;
15  
16  public class DegradedRouterQueryBuilderTest extends LuceneTestCase {
17      @Test
18      public void testParseExample() throws IOException {
19          String json = "{\"degraded_router\": {\n" +
20                  "   \"conditions\" : [\n" +
21                  "       {\n" +
22                  "           \"lt\": 70,\n" +
23                  "           \"type\": \"cpu\"," +
24                  "           \"query\": {\n" +
25                  "               \"match_phrase\": {\n" +
26                  "                   \"text\": \"input query\"\n" +
27                  "               }\n" +
28                  "           }\n" +
29                  "       }\n" +
30                  "   ],\n" +
31                  "   \"fallback\": {\n" +
32                  "       \"match_none\": {}\n" +
33                  "   }\n" +
34                  "}}";
35  
36          QueryBuilder builder = QueryBuilderTestUtils.FULLY_FEATURED.parseQuery(json);
37          assertThat(builder, instanceOf(DegradedRouterQueryBuilder.class));
38          DegradedRouterQueryBuilder qb = (DegradedRouterQueryBuilder) builder;
39          assertNotNull(qb.systemLoad());
40          assertEquals(1, qb.conditionStream().count());
41          DegradedRouterQueryBuilder.DegradedCondition cond = qb.conditionStream().findFirst().get();
42          assertEquals(DegradedConditionType.cpu, cond.type());
43          assertThat(cond.query(), instanceOf(MatchPhraseQueryBuilder.class));
44          assertEquals(ConditionDefinition.lt, cond.definition());
45          assertEquals(70, cond.value());
46          assertThat(qb.fallback(), instanceOf(MatchNoneQueryBuilder.class));
47  
48          DegradedRouterQueryBuilder expected = new DegradedRouterQueryBuilder();
49          expected.condition(ConditionDefinition.lt, DegradedConditionType.cpu, null, null, 70,
50                  new MatchPhraseQueryBuilder("text", "input query"));
51          expected.fallback(new MatchNoneQueryBuilder());
52          assertEquals(expected, qb);
53      }
54  }