package com.linkedin.thirdeye.eventprovider; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.testng.Assert; import org.testng.annotations.Test; import com.google.common.collect.Lists; import com.linkedin.thirdeye.anomaly.events.EventFilter; import com.linkedin.thirdeye.datalayer.dto.EventDTO; public class TestEventFilter { @Test public void testApplyEventDimensionFilter() throws Exception { EventDTO event1 = new EventDTO(); event1.setName("event1"); EventDTO event2 = new EventDTO(); event2.setName("event2"); Map<String, List<String>> eventDimensionMap2 = new HashMap<>(); eventDimensionMap2.put("country_code", Lists.newArrayList("peru", "brazil")); eventDimensionMap2.put("BrowserName", Lists.newArrayList("chrome")); event2.setTargetDimensionMap(eventDimensionMap2); EventDTO event3 = new EventDTO(); event3.setName("event3"); Map<String, List<String>> eventDimensionMap3 = new HashMap<>(); eventDimensionMap3.put("country_code", Lists.newArrayList("srilanka", "india")); event3.setTargetDimensionMap(eventDimensionMap3); List<EventDTO> allEvents = new ArrayList<>(); Map<String, List<String>> eventFilterDimensionMap = new HashMap<>(); List<EventDTO> filteredEvents; // empty allEvents filteredEvents = EventFilter.applyDimensionFilter(allEvents , eventFilterDimensionMap); Assert.assertEquals(filteredEvents.size(), 0); // empty filters map allEvents.add(event1); filteredEvents = EventFilter.applyDimensionFilter(allEvents , eventFilterDimensionMap); Assert.assertEquals(filteredEvents.size(), 1); // non empty filters map, empty event dimensions map eventFilterDimensionMap.put("country", Lists.newArrayList("brazil")); filteredEvents = EventFilter.applyDimensionFilter(allEvents , eventFilterDimensionMap); Assert.assertEquals(filteredEvents.size(), 0); // an event passes one filter allEvents.add(event2); allEvents.add(event3); filteredEvents = EventFilter.applyDimensionFilter(allEvents , eventFilterDimensionMap); Assert.assertEquals(filteredEvents.size(), 1); Assert.assertEquals(filteredEvents.get(0).getName(), "event2"); // an event passes multiple filters eventFilterDimensionMap.put("browser", Lists.newArrayList("chrome")); filteredEvents = EventFilter.applyDimensionFilter(allEvents , eventFilterDimensionMap); Assert.assertEquals(filteredEvents.size(), 1); Assert.assertEquals(filteredEvents.get(0).getName(), "event2"); // multiple events pass a filter eventFilterDimensionMap.remove("browser"); eventFilterDimensionMap.put("country", Lists.newArrayList("brazil", "india")); filteredEvents = EventFilter.applyDimensionFilter(allEvents , eventFilterDimensionMap); Assert.assertEquals(filteredEvents.size(), 2); Assert.assertEquals(filteredEvents.get(0).getName(), "event2"); Assert.assertEquals(filteredEvents.get(1).getName(), "event3"); // an event passes a filter, another event passes another filter eventFilterDimensionMap.put("country", Lists.newArrayList("india")); eventFilterDimensionMap.put("browser", Lists.newArrayList("chrome")); filteredEvents = EventFilter.applyDimensionFilter(allEvents , eventFilterDimensionMap); Assert.assertEquals(filteredEvents.size(), 2); Assert.assertEquals(filteredEvents.get(0).getName(), "event2"); Assert.assertEquals(filteredEvents.get(1).getName(), "event3"); // no events pass filter eventFilterDimensionMap.put("country", Lists.newArrayList("france")); eventFilterDimensionMap.put("browser", Lists.newArrayList("mozilla")); filteredEvents = EventFilter.applyDimensionFilter(allEvents , eventFilterDimensionMap); Assert.assertEquals(filteredEvents.size(), 0); // all events pass filter Map<String, List<String>> eventDimensionMap1 = new HashMap<>(); eventDimensionMap1.put("country_code", Lists.newArrayList("india")); event1.setTargetDimensionMap(eventDimensionMap1); eventFilterDimensionMap.remove("browser"); eventFilterDimensionMap.put("country", Lists.newArrayList("brazil", "india")); filteredEvents = EventFilter.applyDimensionFilter(allEvents , eventFilterDimensionMap); Assert.assertEquals(filteredEvents.size(), 3); } }