package com.linkedin.thirdeye.eventprovider;
import com.google.common.collect.Lists;
import com.linkedin.thirdeye.anomaly.events.HolidayEventProvider;
import com.linkedin.thirdeye.anomaly.events.EventFilter;
import com.linkedin.thirdeye.anomaly.events.EventType;
import com.linkedin.thirdeye.datalayer.bao.AbstractManagerTestBase;
import com.linkedin.thirdeye.datalayer.dto.EventDTO;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.joda.time.DateTime;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class TestHolidayEventProvider {
public class TestEventManager extends AbstractManagerTestBase {
long testEventId;
HolidayEventProvider holidayEventProvider = null;
long hoursAgo5 = new DateTime().minusHours(5).getMillis();
long hoursAgo4 = new DateTime().minusHours(4).getMillis();
long hoursAgo3 = new DateTime().minusHours(3).getMillis();
long hoursAgo2 = new DateTime().minusHours(2).getMillis();
@BeforeClass
void beforeClass() {
super.init();
holidayEventProvider = new HolidayEventProvider();
}
@AfterClass(alwaysRun = true)
void afterClass() {
super.cleanup();
}
@Test
public void testGetEvents() {
EventDTO event1 = new EventDTO();
event1.setName("event1");
event1.setEventType(EventType.DEPLOYMENT.toString());
eventDAO.save(event1);
EventDTO event2 = new EventDTO();
event2.setName("event2");
event2.setEventType(EventType.HOLIDAY.toString());
event2.setStartTime(hoursAgo4);
event2.setEndTime(hoursAgo3);
Map<String, List<String>> eventDimensionMap2 = new HashMap<>();
eventDimensionMap2.put("country_code", Lists.newArrayList("peru", "brazil"));
eventDimensionMap2.put("BrowserName", Lists.newArrayList("chrome"));
event2.setTargetDimensionMap(eventDimensionMap2);
eventDAO.save(event2);
EventDTO event3 = new EventDTO();
event3.setName("event3");
event3.setStartTime(hoursAgo3);
event3.setEndTime(hoursAgo2);
event3.setEventType(EventType.HOLIDAY.toString());
Map<String, List<String>> eventDimensionMap3 = new HashMap<>();
eventDimensionMap3.put("country_code", Lists.newArrayList("srilanka", "india"));
event3.setTargetDimensionMap(eventDimensionMap3);
eventDAO.save(event3);
EventDTO event4 = new EventDTO();
event4.setName("event4");
event4.setStartTime(hoursAgo4);
event4.setEndTime(hoursAgo3);
event4.setEventType(EventType.HOLIDAY.toString());
Map<String, List<String>> eventDimensionMap4 = new HashMap<>();
eventDimensionMap4.put("country_code", Lists.newArrayList("srilanka", "india"));
event4.setTargetDimensionMap(eventDimensionMap3);
eventDAO.save(event4);
Assert.assertEquals(eventDAO.findAll().size(), 4);
// invalid time
EventFilter eventFilter = new EventFilter();
List<EventDTO> events = holidayEventProvider.getEvents(eventFilter);
Assert.assertEquals(events.size(), 0);
// check that it gets all HOLIDAY events in time range, and only HOLIDAY events
eventFilter.setStartTime(hoursAgo5);
eventFilter.setEndTime(hoursAgo3);
events = holidayEventProvider.getEvents(eventFilter);
Assert.assertEquals(events.size(), 2);
// check for HOLIDAY events in time range and filters
Map<String, List<String>> filterMap = new HashMap<>();
filterMap.put("country_code", Lists.newArrayList("india"));
eventFilter.setTargetDimensionMap(filterMap);
events = holidayEventProvider.getEvents(eventFilter);
Assert.assertEquals(events.size(), 1);
}
}
}