package org.stagemonitor.core.elasticsearch;
import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.Set;
import com.codahale.metrics.Clock;
import org.junit.Test;
import org.mockito.Mockito;
import org.stagemonitor.AbstractElasticsearchTest;
public class IndexSelectorIntegrationTest extends AbstractElasticsearchTest {
private IndexSelector indexSelector;
@Test
public void testDeleteOldIndices() throws Exception {
setTime(0L);
elasticsearchClient.sendAsJson("POST", "/stagemonitor-metrics-1969.12.30/metrics", "{\"foo\":\"bar\"}");
elasticsearchClient.sendAsJson("POST", "/stagemonitor-metrics-1969.12.31/metrics", "{\"foo\":\"bar\"}");
elasticsearchClient.sendAsJson("POST", "/stagemonitor-metrics-1970.01.01/metrics", "{\"foo\":\"bar\"}");
refresh();
assertEquals(getIndices("stagemonitor-metrics*"),
asSet("stagemonitor-metrics-1969.12.30", "stagemonitor-metrics-1969.12.31", "stagemonitor-metrics-1970.01.01"));
elasticsearchClient.deleteIndices(indexSelector.getIndexPatternOlderThanDays("stagemonitor-metrics-", 1));
refresh();
assertEquals(getIndices("stagemonitor-metrics*"),
asSet("stagemonitor-metrics-1969.12.31", "stagemonitor-metrics-1970.01.01"));
}
@Test
public void testDeleteOldIndicesUnavailable() throws Exception {
setTime(new GregorianCalendar(1970, 0, 10, 1, 0, 0).getTimeInMillis());
elasticsearchClient.sendAsJson("POST", "/stagemonitor-metrics-1970.01.07/metrics", "{\"foo\":\"bar\"}");
elasticsearchClient.sendAsJson("POST", "/stagemonitor-metrics-1970.01.09/metrics", "{\"foo\":\"bar\"}");
elasticsearchClient.sendAsJson("POST", "/stagemonitor-metrics-1970.01.10/metrics", "{\"foo\":\"bar\"}");
refresh();
assertEquals(asSet("stagemonitor-metrics-1970.01.07", "stagemonitor-metrics-1970.01.09", "stagemonitor-metrics-1970.01.10"),
getIndices("stagemonitor-metrics*"));
elasticsearchClient.deleteIndices(indexSelector.getIndexPatternOlderThanDays("stagemonitor-metrics-", 1));
refresh();
assertEquals(asSet("stagemonitor-metrics-1970.01.09", "stagemonitor-metrics-1970.01.10"),
getIndices("stagemonitor-metrics*"));
}
private void setTime(long time) {
Clock clock = Mockito.mock(Clock.class);
when(clock.getTime()).thenReturn(time);
indexSelector = new IndexSelector(clock);
}
private Set<String> asSet(String... strings) {
return new HashSet<String>(asList(strings));
}
private Set<String> getIndices(String indexPattern) {
return new HashSet<String>(asList(client.admin().indices().prepareGetIndex().addIndices(indexPattern).get().indices()));
}
}