package com.thinkbiganalytics.ingest; /*- * #%L * thinkbig-nifi-core-processors * %% * Copyright (C) 2017 ThinkBig Analytics * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import org.joda.time.DateTimeZone; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.Date; import java.util.TimeZone; import static org.junit.Assert.assertEquals; /** */ public class GetTableDataSupportTest { private GetTableDataSupport tableDataSupport; private Connection conn; private Date testDate = new Date(1458872629591L); @Before public void setUp() throws Exception { this.conn = Mockito.mock(Connection.class); tableDataSupport = new GetTableDataSupport(conn, 0); DateTimeZone.setDefault(DateTimeZone.forTimeZone(TimeZone.getTimeZone("America/Los_Angeles"))); } @Test public void testMaxAllowableDateFromUnit() throws Exception { assertEquals(1458872629591L, GetTableDataSupport.maxAllowableDateFromUnit(testDate, GetTableDataSupport.UnitSizes.NONE).getTime()); assertEquals(1458871200000L, GetTableDataSupport.maxAllowableDateFromUnit(testDate, GetTableDataSupport.UnitSizes.HOUR).getTime()); assertEquals(1458802800000L, GetTableDataSupport.maxAllowableDateFromUnit(testDate, GetTableDataSupport.UnitSizes.DAY).getTime()); assertEquals(1458543600000L, GetTableDataSupport.maxAllowableDateFromUnit(testDate, GetTableDataSupport.UnitSizes.WEEK).getTime()); assertEquals(1456819200000L, GetTableDataSupport.maxAllowableDateFromUnit(testDate, GetTableDataSupport.UnitSizes.MONTH).getTime()); assertEquals(1451635200000L, GetTableDataSupport.maxAllowableDateFromUnit(testDate, GetTableDataSupport.UnitSizes.YEAR).getTime()); } @Test public void testSelectFullLoad() throws Exception { Statement st = Mockito.mock(Statement.class); ResultSet rs = Mockito.mock(ResultSet.class); Mockito.when(conn.createStatement()).thenReturn(st); Mockito.when(st.executeQuery("select col1, col2 from testTable")).thenReturn(rs); tableDataSupport.selectFullLoad("testTable", new String[]{"col1", "col2"}); } @Test public void testRangeNoLastLoad() throws Exception { GetTableDataSupport.DateRange range = new GetTableDataSupport.DateRange(null, testDate, 0, 0, GetTableDataSupport.UnitSizes.NONE); assertEquals(range.getMinDate(), new Date(0L)); assertEquals(range.getMaxDate(), testDate); } @Test public void testRangeLastLoad() throws Exception { Date lastLoad = new Date(1458872000000L); GetTableDataSupport.DateRange range = new GetTableDataSupport.DateRange(lastLoad, testDate, 0, 0, GetTableDataSupport.UnitSizes.NONE); assertEquals(range.getMinDate(), lastLoad); assertEquals(range.getMaxDate(), testDate); } @Test public void testRangeLastLoadWithBackoff() throws Exception { Date lastLoad = new Date(1458872000000L); int backoffTimeSecs = 10; GetTableDataSupport.DateRange range = new GetTableDataSupport.DateRange(lastLoad, testDate, 0, backoffTimeSecs, GetTableDataSupport.UnitSizes.NONE); assertEquals(range.getMinDate(), lastLoad); assertEquals(range.getMaxDate(), new Date(testDate.getTime() - (backoffTimeSecs * 1000L))); } @Test public void testRangeLastLoadWithOverlap() throws Exception { Date lastLoad = new Date(1458872000000L); int overlapSecs = 10; GetTableDataSupport.DateRange range = new GetTableDataSupport.DateRange(lastLoad, testDate, overlapSecs, 0, GetTableDataSupport.UnitSizes.NONE); assertEquals(range.getMinDate(), new Date(lastLoad.getTime() - (overlapSecs * 1000L))); assertEquals(range.getMaxDate(), testDate); } @Test public void testRangeUnitSizeHour() throws Exception { Date lastLoad = new Date(1458872000000L); GetTableDataSupport.DateRange range = new GetTableDataSupport.DateRange(lastLoad, testDate, 0, 0, GetTableDataSupport.UnitSizes.HOUR); assertEquals(range.getMinDate(), lastLoad); assertEquals(range.getMaxDate(), new Date(1458871200000L)); } @Test public void testRangeUnitSizeDay() throws Exception { Date lastLoad = new Date(1458872000000L); GetTableDataSupport.DateRange range = new GetTableDataSupport.DateRange(lastLoad, testDate, 0, 0, GetTableDataSupport.UnitSizes.DAY); assertEquals(range.getMinDate(), lastLoad); assertEquals(range.getMaxDate(), new Date(1458802800000L)); } @Test public void testSelectIncremental() throws Exception { Statement st = Mockito.mock(Statement.class); ResultSet rs = Mockito.mock(ResultSet.class); Mockito.when(conn.createStatement()).thenReturn(st); Mockito.when(st.executeQuery("select col1, col2 from testTable")).thenReturn(rs); Mockito.when(conn.prepareStatement(Mockito.anyString())).thenReturn(Mockito.mock(PreparedStatement.class)); int overlapTime = 0; Date lastLoadDate = new Date(1458872629591L); int backoffTime = 0; tableDataSupport.selectIncremental("testTable", new String[]{"col1", "col2"}, "col2", overlapTime, lastLoadDate, backoffTime, GetTableDataSupport.UnitSizes.NONE); } }