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 }