package pl.allegro.tech.search.elasticsearch.tools.reindex.process;
import org.junit.Test;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.*;
public class IndexingComponentTest {
public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm");
@Test
public void testComputeIndexName() throws Exception {
// no replacement and error cases
assertEquals("myindex", IndexingComponent.computeIndexName("myindex", null, null));
assertEquals("", IndexingComponent.computeIndexName("", null, null));
try {
IndexingComponent.computeIndexName("${value}", Collections.emptyMap(), null);
fail("Should throw NullPointerException with informative text");
} catch (NullPointerException e) {
assertTrue(!e.getMessage().isEmpty());
}
// simple replacement
assertEquals("123", IndexingComponent.computeIndexName("${value}", Collections.singletonMap("value", "123"), null));
assertEquals("doc-123", IndexingComponent.computeIndexName("doc-${value}", Collections.singletonMap("value", "123"), null));
assertEquals("doc-123doc", IndexingComponent.computeIndexName("doc-${value}doc", Collections.singletonMap("value", "123"), null));
// multiple replacements
Map<String, Object> map = new HashMap<>();
map.put("value", (Object) "123");
map.put("key", (Object) "key45");
assertEquals("doc-123dockey45", IndexingComponent.computeIndexName("doc-${value}doc${key}", map, null));
// source-index
assertEquals("doc-idx43doc", IndexingComponent.computeIndexName("doc-${_index}doc", null, "idx43"));
// parse the date to avoid issues due to different timezones
long jan1970 = DATE_FORMAT.parse("1970-01-01 03:23").getTime();
long may2015 = DATE_FORMAT.parse("2015-05-23 11:23").getTime();
// date/time formatting
assertEquals("doc-1970-01-01doc", IndexingComponent.computeIndexName("doc-${startTime:yyyy-MM-dd}doc", Collections.singletonMap("startTime", Long.toString(jan1970)), null));
assertEquals("doc-2015-05-23doc", IndexingComponent.computeIndexName("doc-${startTime:yyyy-MM-dd}doc", Collections.singletonMap("startTime", Long.toString(may2015)), null));
assertEquals("doc-2015-05-23 11:23:00doc", IndexingComponent.computeIndexName("doc-${startTime:yyyy-MM-dd HH:mm:ss}doc", Collections.singletonMap("startTime", Long.toString(may2015)), null));
map.put("startTime", Long.toString(DATE_FORMAT.parse("2015-05-23 21:12").getTime()));
map.put("endTime", Long.toString(DATE_FORMAT.parse("2015-05-24 23:12").getTime()));
assertEquals("doc-2015-05-2323:12doc", IndexingComponent.computeIndexName("doc-${startTime:yyyy-MM-dd}${endTime:HH:mm}doc", map, null));
}
}