View Javadoc
1   package org.wikimedia.search.extra.latency;
2   
3   import org.elasticsearch.action.search.SearchRequestBuilder;
4   import org.elasticsearch.index.query.MatchAllQueryBuilder;
5   import org.junit.Test;
6   import org.wikimedia.search.extra.AbstractPluginIntegrationTest;
7   
8   public class GetLatencyStatsIntegrationTest extends AbstractPluginIntegrationTest {
9       @Test
10      public void testReportingBuckets() throws Exception {
11          createIndex("test");
12          // This is pretty fragile and depends on nothing else using stat buckets
13          LatencyStatsAction.LatencyStatsNodesResponse statsResponse =
14                  client()
15                          .execute(LatencyStatsAction.INSTANCE, new LatencyStatsAction.LatencyStatsNodesRequest()).get();
16          statsResponse.getNodes().stream()
17                  .map(n -> n.statDetails)
18                  .forEach(stat -> assertEquals(0, stat.getLatencies().size()));
19          LatencyStatsAction.StatDetails allNodes = statsResponse.getAllNodes();
20          assertEquals(0, allNodes.getLatencies().size());
21  
22          // Run some query with a stat bucket, then wait around for the histogram to rotate.
23          SearchRequestBuilder builder = client()
24                  .prepareSearch("test")
25                  .setQuery(new MatchAllQueryBuilder())
26                  .setStats("integration");
27          client().search(builder.request()).get();
28          Thread.sleep(5200);
29  
30          statsResponse = client().execute(LatencyStatsAction.INSTANCE, new LatencyStatsAction.LatencyStatsNodesRequest()).get();
31          // 4 default latencies reported
32          assertEquals(4, statsResponse.getAllNodes().getLatencies().size());
33          statsResponse.getAllNodes().getLatencies()
34                  .forEach(stat -> assertEquals("integration", stat.getBucket()));
35  
36          // Something should have some latency stats now
37          assertNotEquals(0, statsResponse.getNodes().stream()
38                  .map(n -> n.statDetails)
39                  .filter(stat -> stat.getLatencies().size() > 0)
40                  .count());
41  
42          // And those latency stats should report the correct bucket
43          statsResponse.getNodes().stream()
44                  .flatMap(n -> n.statDetails.getLatencies().stream())
45                  .forEach(stat -> assertEquals("integration", stat.getBucket()));
46  
47          // Very sad test that json serialization "works"
48          /* TODO: This needs the REST api test framework which is a pain
49           * to setup without switching to gradle.
50          Response restResponse = getRestClient().performRequest("GET", "/_nodes/latencyStats");
51          assertEquals(200, restResponse.getStatusLine().getStatusCode());
52           */
53      }
54  }