@Test public void testWindowAssignment() { WindowAssigner.WindowAssignerContext mockContext = mock(WindowAssigner.WindowAssignerContext.class); SessionWindowTimeGapExtractor<String> extractor = mock(SessionWindowTimeGapExtractor.class); when(extractor.extract(eq("gap5000"))).thenReturn(5000L); when(extractor.extract(eq("gap4000"))).thenReturn(4000L); when(extractor.extract(eq("gap9000"))).thenReturn(9000L); DynamicEventTimeSessionWindows<String> assigner = DynamicEventTimeSessionWindows.withDynamicGap(extractor); assertThat(assigner.assignWindows("gap5000", 0L, mockContext), contains(timeWindow(0, 5000))); assertThat(assigner.assignWindows("gap4000", 4999L, mockContext), contains(timeWindow(4999, 8999))); assertThat(assigner.assignWindows("gap9000", 5000L, mockContext), contains(timeWindow(5000, 14000))); }
@Test public void testInvalidParameters() { WindowAssigner.WindowAssignerContext mockContext = mock(WindowAssigner.WindowAssignerContext.class); try { SessionWindowTimeGapExtractor extractor = mock(SessionWindowTimeGapExtractor.class); when(extractor.extract(any())).thenReturn(-1L); DynamicEventTimeSessionWindows assigner = DynamicEventTimeSessionWindows.withDynamicGap(extractor); assigner.assignWindows(Lists.newArrayList(new Object()), 1, mockContext); fail("should fail"); } catch (IllegalArgumentException e) { assertThat(e.toString(), containsString("0 < gap")); } try { SessionWindowTimeGapExtractor extractor = mock(SessionWindowTimeGapExtractor.class); when(extractor.extract(any())).thenReturn(0L); DynamicEventTimeSessionWindows assigner = DynamicEventTimeSessionWindows.withDynamicGap(extractor); assigner.assignWindows(Lists.newArrayList(new Object()), 1, mockContext); fail("should fail"); } catch (IllegalArgumentException e) { assertThat(e.toString(), containsString("0 < gap")); } }